
ファイルとディレクトリにACLを再適用するスクリプトがあります。ただし、グループへの書き込み権限を開く副作用がありますが、これは説明できません。各文の前後の権限を確認し、スクリプト内の特定の文の一つに原因を絞り込んだ。
root@kompir:/tmp/perms# nl /apply-sec
1 #!/bin/bash
2 targetbase=$1
3 [ -z "$targetbase" ] && exit
4 [ ! -d $targetbase ] && exit
5 #set -x
6 check_base() {
7 # Debugging function - call it to view the current ACL and mode bits
8 getfacl $targetbase
9 ls -ld $targetbase
10 echo ---------------------------------------------
11 }
12 # Remove any ACLs
13 setfacl -R -b $targetbase
14 # Set basic permissions
15 chown -R owner $targetbase
16 find $targetbase -type d -exec chmod 2755 {} \;
17 find $targetbase -type f -exec chmod 644 {} \;
18 # Set Default Mask
19 setfacl -d -m m:rwx $targetbase
20 # User1 with Default
21 check_base
22 setfacl -m u:user1:rwx $targetbase
23 check_base
24 setfacl -d -m u:user1:rwx $targetbase
25 # User2 with Default
26 setfacl -m u:user2:r-x $targetbase
27 setfacl -d -m u:user2:r-x $targetbase
28 # Apply recursively
29 getfacl $targetbase | setfacl -R -M- $targetbase
22行目のステートメントはグループ書き込みモードビットをオンにします(16行目ではビットがオフになっています)。
テスト目的で生成されたいくつかのサンプルディレクトリを使用して、スクリプトの出力を以下に示します。
root@kompir:/tmp/perms# /apply-sec perms1/
# file: perms1/
# owner: owner
# group: root
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:mask::rwx
default:other::r-x
drwxr-sr-x+ 4 owner root 4096 Jun 9 09:20 perms1/
---------------------------------------------
# file: perms1/
# owner: owner
# group: root
# flags: -s-
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:mask::rwx
default:other::r-x
drwxrwsr-x+ 4 owner root 4096 Jun 9 09:20 perms1/
---------------------------------------------
デバッグ関数が表示モードで2番目に呼び出されると、グループ書き込み権限が再びオンになります。
なぜこれが起こり、これは予想される動作ですか?避けられますか?
答え1
デバッグ関数が表示モードで2番目に呼び出されると、グループ書き込み権限が再びオンになります。
これは本当ではありません。得られる結果を見てください。
# file: perms1/
[...]
group::r-x
出力に表示されるのは、ls
グループ権限ではなく、指定されたユーザーおよびグループACLエントリが付与できる権限を制限するACLマスクです。
よりacl(5)
マニュアルページ。以前の答えには長い説明があります。
touch / mkdirがデフォルトのACLを無視しているようです。