Как указывает Жиль, 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 для dirs
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
установить разрешения ACL mygroup на основе существующих разрешений группы
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Возможно, вы захотите проверить, что маска группы предоставляет действующие разрешения. Если нет, вам придется запустить это тоже:
$ find . -type d -exec chmod g+rwX '{}' ';'