8

Мой вопрос похож на Как установить права доступа к файлам по умолчанию для ВСЕХ вновь созданных файлов в Linux - но отличается по-разному:

Я хочу, чтобы все файлы, созданные в (или скопированные или перемещенные) в определенном каталоге, наследовали набор разрешений по умолчанию, который отличается от системного по умолчанию.

Обоснование: рассматриваемый каталог является "приемным бункером" для приложения. Пользователи в группе помещают файлы в каталог, а приложение (работающее под другим идентификатором пользователя в той же группе) берет их и обрабатывает их. Проблема заключается в том, что владельцем каждого файла, помещенного в каталог, является пользователь, который разместил его там, а разрешения по умолчанию имеют значение «rw-r - r--»; Я хочу изменить это на "rw-rw ----". Приложение, выполняющее получение, не может сделать это явно, потому что идентификатор пользователя, под которым выполняется приложение, не владеет рассматриваемым файлом, а разрешения по умолчанию не позволяют приложению выполнять chmod для файла! Очевидно, что пользователь может выполнить команду chmod после помещения файла туда, но я хочу, чтобы "отбрасывание" пользователем было как можно более простым. (Эти люди не знают Linux, они просто перетаскивают файлы со своего рабочего стола Windows на сетевой ресурс (Samba) - т.е. они даже не знают, что взаимодействуют с системой Linux.)

umask кажется слишком мощным: я не хочу устанавливать разрешения по умолчанию для каждого файла, созданного этими пользователями в любом месте - только для тех, которые созданы (или помещены в) в этом каталоге.

Пожалуйста, посоветуйте ... спасибо!

3 ответа3

5

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

От man 5 acl:

Если ACL по умолчанию связан с каталогом, параметр mode для функций, создающих файловые объекты, и ACL по умолчанию для каталога используются для определения ACL нового объекта:

  1. Новый объект наследует ACL по умолчанию для содержащегося каталога в качестве ACL доступа.

  2. Записи ACL доступа, соответствующие битам разрешений файла, модифицируются таким образом, что они не содержат разрешений, которые не содержатся в разрешениях, указанных параметром mode.

Чтобы настроить его (сменить устройство, каталоги и т.д. Соответственно):

Отредактируйте файл /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

Смотрите связанный учебник для получения дополнительной информации.

Источник: учебник, часть 1 и часть 2

Справка: списки контроля доступа POSIX в Linux

1

Я могу придумать четыре возможных способа сделать это:

  • Umask, который вы не хотите использовать
  • программная оболочка, которая устанавливает маску этого приложения, а не пользователя
  • cron, как описал @Peter Eisentraut; find $HOME/intake -type f -exec chmod 660 {} \; в разных системах улучшена производительность (например, опция -exec+ )
  • настройки на основе каталогов, которые требуют небольшого программирования оболочки, но в основном оболочка при установке приглашения или вызова cd изменит umask, если в этом каталоге присутствует файл точек (или, возможно, каталог предков); для bash PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND" будет наиболее простым.
1

Я могу предложить обходной путь: создайте отдельный каталог "drop", запустите отдельный minijob, который фиксирует разрешения и затем перемещает файлы в каталог данных приложения. Вы можете использовать incron для этого, чтобы практически не было заметной задержки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .