У меня есть сценарий, который я периодически запускаю, который повторно применяет разрешения FACL и chmod для домашних каталогов игровых серверов, которые я запускаю.
Сценарий сначала выдает рекурсивный chmod для всего домашнего каталога, а затем chmod изменяет определенные файлы на определенные значения (сначала все файлы имеют значение 770, затем вносятся дополнительные изменения).
Соответствующий бит из сценария:
for d in */; do
< server verification and type checking >
chmod -R 770 ${d%/}
chmod 771 ${d%/}
chmod 775 ${d%/}/$gamedir
< ... chmodding unrelated game asset directories for webserver access ... >
for k in "${BLOCK_DIRS[@]}"; do
if [ -d "$k" ]; then
echo -e "${CYAN}Checking $(pwd)/$k...${NC}"
echo -e "${RED}Debug: chmod -R 1700 $(pwd)/$k${NC}"
chmod -v 1700 "$(pwd)/$k"
chmod -R 0700 "$(pwd)/$k"
fi
done
done
Пример вывода:
mode of ‘/home/servers/tf_test/tf/../bin’ changed from 0770 (rwxrwx---) to 1700 (rwx-----T)
Однако права доступа к каталогу изменяются только для последнего сервера в первом цикле. То есть в первом цикле for есть 9 серверов, и только последний получает изменения внутренним циклом for.
Те же команды, введенные вручную, работают абсолютно нормально. Что я делаю не так?
(к тому же это мой первый вопрос - если я не сказал чего-то важного - поправьте меня, я соответствующим образом отредактирую вопрос)
ls
не показывает флаги доступа для группы владельцев - он показывает доступ самой высокой группы, и это меня обмануло. Я также изменил chmods в скрипте так, чтобы они сначала изменяли содержимое каталога, а затем сам каталог, и теперь работает липкий бит.
Для ls
проблема с разрешениями группы.
foo@bar:/foo# ls -lha game_server | grep bin
drwxrwx--T+ 2 gameaccount gameaccount 4.0K Dec 21 20:56 bin
foo@bar:/foo#
Каталог принадлежит gameaccount, и похоже, что у группы gameaccount, которой он принадлежит, есть бит разрешения 7, верно? Неправильно
foo@bar:/foo# getfacl game_server/bin
# file: game_server/bin
# owner: gameaccount
# group: gameaccount
# flags: --t
user::rwx
group::---
group:root:rwx
mask::rwx
other::---
Вопрос можно закрыть - ls просто не показывал биты разрешений, которые я ожидал.