Назад | Перейти на главную страницу

Настройка umask для каталога с помощью ACL

Мы хотим имитировать поведение общесистемной маски 002 в определенном каталоге. foo, чтобы обеспечить следующий результат:

  1. Все подкаталоги, созданные под foo будет иметь 775 разрешений
  2. Все файлы, созданные ниже foo и подкаталоги будут иметь 664 разрешения
  3. 1 и 2 будут выполняться для файлов / каталогов, созданных всеми пользователями, включая root, и всеми демонами.

При условии, что ACL включен в нашем разделе это команда, которую мы придумали:

setfacl -R -d -m mask:002 foo

... но это не работает. Новые файлы, созданные в каталоге, выглядят так:

-rw - w-r - +

Когда я бегу getfacl в новом файле я получаю:

# файл: newfile.py
# владелец: root
# группа: группа
пользователь :: rw-
группа :: rwx # эффективная: -w-
маска :: - w-
другое :: r--

Другими словами, применяя mask:200 с ACL есть не то же самое, что и применение umask 200.

Так является есть ли способ применить umask для каталога с ACL?

Это типичная работа для ACL :-)

Ваш пример

$ mkdir /tmp/foo

Установите разрешения для самого каталога

$ setfacl -m g::rwx -m o::rx  /tmp/foo

Установите разрешения для вновь созданного каталога и файлов в этом каталоге.

$ setfacl -m default:g::rwx -m o::rx  /tmp/foo

Тест

$ mkdir /tmp/foo/bar
$ touch /tmp/foo/bar/baz.py
$ ls -ld /tmp/foo/bar /tmp/foo/bar/baz.py
drwxrwxr-x+ 2 jdoe jdoe 4096 Mar 10 00:06 /tmp/foo/bar
-rw-rw-r--  1 jdoe jdoe    0 Mar 10 00:06 /tmp/foo/bar/baz.py

Пояснения

  • Концепция маски сильно отличается от маски разрешений ACL и Unix. маска ACL - это атрибут файла ... который ограничивает максимальное разрешение, предоставляемое через ACL (mask:r-x + group:foo:rwx => действующие разрешения = r-x)
  • Предупреждение: изменение разрешения Unix для группы также изменяет маску ACL (по замыслу!).

Предложения

  • Используйте setgid (например, chmod 2755), поэтому вы контролируете, какая группа может записывать в файл.
  • и / или явно предоставить разрешения группе setfacl -m group:dev_team:rwx

Вы можете использовать dnotify и сценарий, запускаемый каждый раз при создании файла. Видеть: https://serverfault.com/a/127686/30946