Назад | Перейти на главную страницу

Отмена chmod 777

Иногда в отчаянии, чтобы проверить, не связана ли моя проблема с разрешением, которое я делаю:

sudo chmod -R 777 mydir/

В большинстве случаев это не помогает, и теперь у меня две проблемы;)

Файлы внутри mydir/ у каждого были разные разрешения и разные владельцы, и теперь мне нужно восстановить их до исходного состояния.

Есть ли какой-нибудь умный способ рекурсивного восстановления разрешений, кроме создания резервной копии? Например.

command_to_save_the_permissions_somewhere mydir/
chmod -R 777 mydir/
command_to_restore_the_permissions_from_somewhere mydir/

Кстати, какие-нибудь советы по отладке проблем с разрешением?

Существует простой способ резервного копирования и восстановления разрешений и прав собственности на дерево каталогов с помощью инструментов ACL. Он работает, даже если в файловой системе не включены списки контроля доступа.

getfacl -R >saved-permissions
setfacl --restore=saved-permissions

Большинство проблем с разрешениями приводят к тому, что где-то на консоли или в каком-либо файле журнала появляется сообщение об ошибке «В разрешении отказано».

Мощным инструментом для исследования проблем с доступом к файлам является strace. Он показывает системные вызовы, сделанные процессом. Вывод может быть трудным для понимания, но относительно легко увидеть, к каким файлам программа пытается получить доступ и почему она может или не может найти то, что хочет. Примеры использования:

strace -s9999 -o myprogram.strace myprogram  # trace myprogram
strace -s9999 -fF ...                        # also trace subprocesses
strace -s9999 -p12345                        # connect to running process by PID
strace -s9999 -efile ...                     # only show filesystem calls
strace -eaccess,open,stat,lstat              # only show common file access calls