Я управляю сервером Mac Mini OS X 10.8.5 Server 2.2.2. используется в качестве общего файлового ресурса для назначенных партнеров для загрузки видеофайлов в их соответствующие папки на самом нижнем уровне файловой системы (доступ с помощью Filezilla). Разрешения этих пользователей должны оставаться неизменными и не должны превышать их соответствующую папку и ее дочерние папки.
Руководители проекта должны иметь доступ ко всем файлам на чтение и запись через Filezilla.
В настоящее время они могут это делать, у каждого пользователя есть индивидуальные разрешения для каждой папки. Я создал группу «доступ», которая имеет все разрешения, необходимые руководству проекта, и разместил ее на самом высоком уровне необходимой файловой системы и применил наследование.
Проблема, с которой я столкнулся, заключается в удалении разрешений отдельных пользователей от самого высокого до самого низкого. При использовании команды «распространить разрешения» для применения нового ACL иногда разрешения лидов проекта удаляются из дочерней папки, иногда - нет.
Как я могу рекурсивно удалить определенные права пользователей по всей файловой структуре, не затрагивая разрешения остальных папок?
Посмотрите chmod -a, чтобы удалить определенные ACL
От человека chmod
-a The -a mode is used to delete ACL entries. All entries exactly
matching the supplied entry will be deleted. If the entry lists a
subset of rights granted by an entry, only the rights listed are
removed. Entries may also be deleted by index using the -a# mode.
-R сделает действие рекурсивным
ls -le filename перечислит ACL, связанные с именем файла
Теоретически вы могли бы сделать этот НЕПРОВЕРЕННЫЙ (я только что написал его для вас) скрипт для рекурсивного просмотра всех файлов и удаления ACL для указанного пользователя.
#!/bin/bash
OLDIFS=$IFS
IFS='
'
while read file
do
for ACL in $(ls -led $file|tail -n+2|cut -d':' -f2,3)
do
if [ $ACL ] && [[ $ACL =~ YourUserName ]]; then
echo ACL found: $ACL
echo FILE found: $file
echo "Removing ACL..."
chmod -a "$(echo $ACL|cut -d':' -f2)" ${file}
fi
done
done < <(find / )
IFS=$OLDIFS
Предполагается, что YourUserName - это имя сотрудника, чей ACL вы хотите отозвать, и что / - это точка в файловой системе, из которой вы хотите выполнить рекурсию, что эффективно повлияет на всю файловую систему, если вы используете /, если вы не добавите аргумент -maxdepth в найти.
Обновить, Я проверил это, и он работает. Просто скопируйте код в файл и сохраните его как aclchange.sh, а затем поместите его в корень каталога, который вы хотите рекурсировать. измените команду файла на (найти.) и YourUserName на пользователя, чьи списки управления доступом вы хотите удалить. Откройте терминал и cd / directory / где / script_is, затем введите chmod + x ./aclchange.sh. Наконец, sudo ./aclchange.sh Он запустит и выведет список файлов и списков контроля доступа, которые удаляются из этих файлов.