Мой вопрос похож на Как установить права доступа к файлам по умолчанию для ВСЕХ вновь созданных файлов в Linux - но отличается по-разному:
Я хочу, чтобы все файлы, созданные в (или скопированные или перемещенные) в определенном каталоге, наследовали набор разрешений по умолчанию, который отличается от системных по умолчанию.
Обоснование: рассматриваемый каталог является «приемным бункером» для приложения. Пользователи в группе помещают файлы в каталог, а приложение (работающее под другим идентификатором пользователя в той же группе) берет их и обрабатывает их. Проблема заключается в том, что владельцем каждого файла, размещенного в каталоге, является пользователь, который разместил его там, а разрешения по умолчанию имеют значение «rw-r - r--»; Я хочу изменить это на "rw-rw ----". Приложение, выполняющее получение, не может сделать это явно, потому что идентификатор пользователя, под которым выполняется приложение, не владеет рассматриваемым файлом, а разрешения по умолчанию не позволяют приложению выполнять chmod для файла! Очевидно, что пользователь может выполнить команду chmod после помещения файла туда, но я хочу, чтобы «сброс» пользователем был как можно более простым. (Эти люди не Linux-грамотны,
umask кажется слишком мощным: я не хочу устанавливать разрешения по умолчанию для каждого файла, созданного этими пользователями в любом месте - только для тех, которые созданы (или помещены в) в этом каталоге.
Пожалуйста, посоветуйте ... спасибо!
acl
в качестве опции вmount
команде, когда вы добавили его в/etc/fstab
. Это будет избыточно, и когда вы запуститеmount
команду в своем ответе, вы получите такой вывод:/dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl)
(см.acl,acl
В конце). Пожалуйста, исправьте это, если я не ошибаюсь.Я могу предложить обходной путь: создайте отдельный каталог «drop», запустите отдельный minijob, который фиксирует разрешения, а затем перемещает файлы в каталог данных приложения. Вы можете использовать incron для этого, чтобы практически не было заметной задержки.
источник
Я могу придумать четыре возможных способа сделать это:
find $HOME/intake -type f -exec chmod 660 {} \;
Различные системы имеют улучшения производительности (например,-exec+
опция)PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"
было бы самым простым.источник