Как установить разрешения по умолчанию для файлов, перемещаемых или копируемых в каталог?

11292
Rob

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

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

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

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

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

8

3 ответа на вопрос

5
Dennis Williamson

Вы можете использовать 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 

Перемонтируйте ( справочную mount.cifsстраницу Samba ) свою файловую систему, перезагрузив или используя:

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

Я не думаю, что вам следует добавлять `acl` в качестве опции в команду` mount`, когда она добавлена ​​в `/ etc / fstab`. Это будет избыточно, и когда вы запустите команду `mount` в своем ответе, вы получите такой вывод:` / dev / vda1 on / type ext4 (rw, errors = remount-ro, acl, acl) ` (смотрите `acl, acl` в конце). Пожалуйста, исправьте это, если я не ошибаюсь. its_me 9 лет назад 0
1
Peter Eisentraut

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

1
Arcege

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

  • 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"было бы самым простым.

Похожие вопросы