Мой вопрос подобен тому, Как установить полномочия файла по умолчанию на ВСЕХ недавно созданных файлах в Linux - но отличается важными способами:
Я хочу, чтобы все файлы, созданные в (или скопированный в или перемещенный в) определенный каталог, наследовали ряд полномочий по умолчанию, который отличается от системного значения по умолчанию.
Объяснение: рассматриваемый каталог является "загрузочным лотком потребления" для приложения. Пользователи в месте группы регистрируют в каталоге, и приложение (работающий под другим идентификатором пользователя в той же группе) берет их и обрабатывает их. Проблема состоит в том, что владелец каждого файла, помещенного в каталог, является пользователем, который поместил его туда, и полномочия принимают значение по умолчанию к "rw-r - r -"; я хочу изменить это на "rw-rw----". Приложение, делающее потребление, не может сделать этого явно, потому что идентификатор пользователя, под которым работает приложение, не владеет рассматриваемым файлом, и полномочия по умолчанию не позволяют приложение chmod на файле! Очевидно, пользователь мог сделать chmod после помещения файла там - но я хочу сохранить "отбрасывание" пользователем максимально простым. (Эти люди не являются грамотными Linux, они просто перетаскивают файлы от своего рабочего стола окон до (Samba) сетевой ресурс - т.е. они даже не знают, что взаимодействуют с системой Linux.)
umask кажется слишком мощным: Я не хочу устанавливать полномочия по умолчанию для каждого файла, созданного где угодно этими пользователями - просто созданные в (или помещенный в) этот каталог.
Советуйте... спасибо!
Можно использовать ACL (список управления доступом) для установки полномочий по умолчанию для файлов в каталоге.
От man 5 acl
:
Если ACL по умолчанию связан с каталогом, параметр режима к функциям, создающим объекты файла и ACL по умолчанию каталога, используется для определения ACL нового объекта:
Новый объект наследовал ACL по умолчанию содержания каталога как его доступ ACL.
Записи ACL доступа, соответствующие битам полномочий файла, изменяются так, чтобы они не содержали полномочий, которые не содержатся в полномочиях, указанных параметром режима.
Для установки его (изменяют устройство, каталоги, и т.д., соответственно):
Отредактируйте Ваш /etc/fstab
файл и добавляет acl
смонтируйте опцию.
/dev/mapper/star-home /home ext3 defaults,acl 0 2
Повторно смонтируйтесь (Samba mount.cifs
страница справочника) Ваша файловая система путем перезагрузки или использование:
mount -o remount,acl /home
Удостоверьтесь, что Вы имеете setfacl
и getfacl
утилиты.
Установите ACL по умолчанию на каталоге (Вы, возможно, также должны установить ACL на существующих файлах):
$ setfacl -m d:user:george:rwx,d:group:sales-g:rwx,d:group:marketing-g:rwx projections
См. связанное учебное руководство для получения дополнительной информации.
Я могу предложить обходное решение: Сделайте отдельный каталог "отбрасывания", выполните отдельное мини-задание туда, которое исправляет полномочия и затем перемещает файлы в каталог данных приложения. Можно использовать incron для этого, таким образом, не было бы фактически никакой значимой задержки.
Я могу думать о четырех возможных методах выполнения этого:
find $HOME/intake -type f -exec chmod 660 {} \;
, различные системы имеют повышения производительности на этом (как -exec+
опция)PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"
было бы самым простым.