У меня есть скрипт perl, который систематически изменяет разрешения. Первое, что делает скрипт, это удаляет все разрешения. Он делает это, вызывая chmod
(из perl). Я сделал это, поскольку обнаружил, что бит set guid не очищается, пока я явно не очистил его:
system('find',
$topdir,
'-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);
Я устанавливаю разные разрешения для групп и каталогов. Используя find
, я вызываю его из perl следующим образом (в данном случае для каталогов):
system(
'find',
$topdir,
'-type', 'd',
'-exec', 'chmod', 'g=rx', '{}', ';'
);
Теперь, хотя я установил только rx, когда я проверяю права доступа к файлам после завершения выполнения скрипта, скрипты, похоже, имеют rwx. Есть ли что-то, на что мне следует обратить внимание, так как я не совсем понимаю, почему это происходит; я нигде явно не устанавливаю это. Я также устанавливаю ACL, но все они ведут себя так, как и ожидалось. Единственное, что я замечаю, когда проверяю с помощью getfacl, это mask::rwx
и default:mask::rwx
. Может ли это быть причиной проблемы?
решение1
Посмотрите на вывод ошибок: вы должны увидеть find: `…' Permission denied
ошибки. Первое, что вы делаете, это удаляете все разрешения на доступ из $topdir
, что предотвращает дальнейшую рекурсию в него. Ни одна из chmod
ожидаемых вами команд не выполняется, за исключением самой первой.
Если вы хотите удалить разрешение на доступ ко всем каталогам в дереве, вам нужно сделать это изнутри наружу. В противном случае, как только вы отрежете себя от родительского каталога, вы больше не сможете рекурсивно зайти в него.
system('find',
$topdir,
'-depth',
'-exec', 'chmod', 'u-swrx,g-swrx,o-swrx', '{}', ';'
);
Поскольку вы используете Perl, используйтеFile::Find
вместо вызова внешней программы find
. Используйте finddepth
функцию, чтобы получить правильный порядок обхода.
Кажется бессмысленным делать два обхода. Вместо этого сделайте один обход и напрямую установите разрешения файла на то, что вам нужно, например, chmod 0750
или на то, что должно быть. Использование File::Find
даст вам большую гибкость, например, для обработки каталогов и обычных файлов по-разному.