Я хочу настроить полномочия по умолчанию для доли файла так, чтобы все могли 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
?
Спасибо
Поскольку 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 '{}' ';'
Насколько я понимаю 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
записи сгенерированы, но на практике правильная вещь, кажется, происходит.