Как установить разрешения по умолчанию для файлов, перемещаемых или копируемых в каталог?
Мой вопрос похож на Как установить права доступа к файлам по умолчанию для ВСЕХ вновь созданных файлов в Linux - но отличается по-разному:
Я хочу, чтобы все файлы, созданные в (или скопированные или перемещенные) в определенном каталоге, наследовали набор разрешений по умолчанию, который отличается от системных по умолчанию.
Обоснование: рассматриваемый каталог является "приемным бункером" для приложения. Пользователи в группе помещают файлы в каталог, а приложение (работающее под другим идентификатором пользователя в той же группе) берет их и обрабатывает их. Проблема в том, что владельцем каждого файла, помещенного в каталог, является пользователь, который разместил его там, а права доступа по умолчанию равны "rw-r -r--"; Я хочу изменить это на "rw-rw----". Приложение, выполняющее получение, не может сделать это явно, потому что идентификатор пользователя, под которым выполняется приложение, не владеет рассматриваемым файлом, а разрешения по умолчанию не позволяют приложению выполнять chmod для файла! Очевидно, что пользователь может выполнить команду chmod после помещения файла туда, но я хочу, чтобы "отбрасывание" пользователем было как можно более простым. (Эти люди не знают Linux, они просто перетаскивают файлы со своего рабочего стола Windows на сетевой ресурс (Samba) - т.е. они даже не знают, что взаимодействуют с системой Linux.)
umask кажется слишком мощным: я не хочу устанавливать разрешения по умолчанию для каждого файла, созданного этими пользователями в любом месте - только для тех, которые созданы (или помещены в) в этом каталоге.
Пожалуйста, посоветуйте... спасибо!
3 ответа
Вы можете использовать ACL (список контроля доступа), чтобы установить разрешения по умолчанию для файлов в каталоге.
От man 5 acl
:
Если ACL по умолчанию связан с каталогом, параметр mode для функций, создающих файловые объекты, и ACL по умолчанию для каталога используются для определения ACL нового объекта:
Новый объект наследует ACL по умолчанию для содержащегося каталога в качестве ACL доступа.
Записи ACL доступа, соответствующие битам разрешений файла, модифицируются таким образом, что они не содержат разрешений, которые не содержатся в разрешениях, указанных параметром mode.
Чтобы настроить его (сменить устройство, каталоги и т. Д. Соответственно):
Отредактируйте свой /etc/fstab
файл и добавить acl
опция монтирования
/dev/mapper/star-home /home ext3 defaults,acl 0 2
Ремонт ( Самба mount.cifs
Страница man) ваша файловая система путем перезагрузки или использования:
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
Смотрите связанный учебник для получения дополнительной информации.
Я могу придумать четыре возможных способа сделать это:
- Umask, который вы не хотите использовать
- программная оболочка, которая устанавливает маску этого приложения, а не пользователя
- cron, как описал @Peter Eisentraut;
find $HOME/intake -type f -exec chmod 660 {} \;
В разных системах улучшена производительность (например,-exec+
опция) - настройки на основе каталогов, которые требуют небольшого программирования оболочки, но в основном оболочка при установке приглашения или вызова cd изменит umask, если в этом каталоге присутствует файл точек (или, возможно, каталог предков); для баш,
PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"
было бы самым простым.
Я могу предложить обходной путь: создайте отдельный каталог "drop", запустите отдельный minijob, который фиксирует разрешения, а затем перемещает файлы в каталог данных приложения. Вы можете использовать incron для этого, чтобы практически не было заметной задержки.