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コマンドは希望どおりに機能していたが、2番目のコマンドはそうではなかったということですか?つまり、他の通常のファイルに実行許可を与えることなく、ディレクトリがトラバース可能であることを確認して、古いファイルの許可を修正しようとしていますか?
私のバージョンはあなたが望むように正確に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、dirsの場合は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 '{}' ';'