Seperti yang ditunjukkan Gilles, setfacl
izin default menentukan izin maksimum, yang pada dasarnya menggantikan umask
. Jadi file yang baru dibuat akan rw
kecuali aplikasi yang membuat file meminta khusus untuk dapat dieksekusi.
$ 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--
Perhatikan perm efektif di atas. (Hanya ada beberapa program yang akan meminta untuk mengatur bit eksekusi pada file yang dibuatnya, misalnya gcc
untuk file yang dapat dieksekusi dan cp
jika file yang sedang disalin dapat dieksekusi.)
Atau maksud Anda bahwa perintah setfacl pertama berfungsi seperti yang Anda inginkan, tetapi yang kedua tidak? Dengan kata lain, Anda sedang mencari cara untuk memperbaiki izin pada file-file lama, memastikan bahwa direktori dapat dilewati, tanpa memberikan file biasa lainnya menjalankan izin?
Versi saya setfacl
memungkinkan X
persis seperti yang Anda inginkan, misalnya:
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
Jika versi setfacl
Anda tidak mendukung itu, mengapa tidak digunakan find
?
menimpa izin, mengaturnya untuk rw untuk file dan rwx untuk dir
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
atur izin ACL mygroup berdasarkan izin grup yang ada
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Anda mungkin ingin memeriksa bahwa mask grup memberikan izin yang efektif. Jika tidak, Anda harus menjalankan ini juga:
$ find . -type d -exec chmod g+rwX '{}' ';'