Установка расходящийся ACLs в каталогах и файлах

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

Все, кто получает доступ к этой доле, находятся в той же группе, таким образом, это не беспокойство.

Я посмотрел на выполнение этого через ACLs, не изменяя все umasks пользователей и такой. Вот мои текущие вызовы:

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

Моя проблема - это, в то время как я хочу, чтобы все недавно созданные подкаталоги были rwx, Я только хочу, чтобы недавно созданные файлы были rw.

У кого-либо есть лучший метод для достижения моего желаемого конечного результата? Есть ли некоторый способ установить ACLs на каталогах отдельно из файлов, в том же духе к chmod +x по сравнению с. chmod +X?

Спасибо

15
задан 18.09.2016, 23:54

2 ответа

Поскольку Gilles указывает, setfacl полномочия по умолчанию указывают максимальные полномочия, в основном заменяя umask. Таким образом, недавно созданные файлы будут rw если приложение, которое создало файл, который спрашивают особенно, чтобы это был исполняемый файл.

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

Отметьте эффективный перманент выше. (Существует только несколько программ, которые попросят устанавливать выполнение, обдумал файлы, которые оно создает, например. gcc для исполняемых файлов и cp если скопированный файл был исполняемым файлом.)

Или Вы подразумевали, что первая команда setfacl работала способ, которым Вы хотели, но второй не был? Другими словами, Вы надеетесь ремонтировать полномочия на старых файлах, удостоверяясь, что каталоги проходимы, не давая другие регулярные файлы выполняют полномочия?

Моя версия setfacl позволяет X точно как Вы хочу, например:

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

Если Ваша версия setfacl не поддерживает это, почему бы не использовать find?

полномочия перезаписи, устанавливая их на rw для файлов и rwx для директоров

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

набор mygroup полномочия ACL на основе существующих полномочий группы

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Вы, вероятно, захотите проверить, что маска группы предоставляет эффективные полномочия. В противном случае необходимо будет выполнить это также:

$ find . -type d -exec chmod g+rwX '{}' ';'
12
ответ дан 07.12.2019, 11:07

Насколько я понимаю Linux ACLs, setfacl -Rdm g:mygroup:rwx share_name делает точно, что Вы хотите. Эксперимент:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

Затем как другой пользователь в группе mygroup:

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

Что продолжается?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

Эффективный ACL для mygroup результат and'ing ACL_GROUP запись для mygroup (rwx) с записью ACL_MASK (rw-).

acl (5) страница справочника объясняет вычисление это в соответствии с “Алгоритмами проверки прав доступа”. Это не объясняет как ACL_MASK записи сгенерированы, но на практике правильная вещь, кажется, происходит.

2
ответ дан 07.12.2019, 11:07

Теги

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