Linux 拡張 ACL と「通常の」権限の干渉に関する奇妙な点

Linux 拡張 ACL と「通常の」権限の干渉に関する奇妙な点

一部のファイルが読み取り専用であり、所有者のみが読み取り可能であることを確認するレガシー コードがあります (つまり、アクセス許可が 0400 に設定されています)。また、システム上の他のユーザーにこのファイルの読み取り専用アクセスを与える必要があります。拡張 ACL を設定しようとしていますが、これにより「通常の」アクセス許可ビットも奇妙な方法で変更されます。

$ ls -l hostkey.pem 
-r-------- 1 root root 0 Jun  7 23:34 hostkey.pem
$ setfacl -m user:apache:r hostkey.pem 
$ getfacl hostkey.pem 
# file: hostkey.pem
# owner: root
# group: root
user::r--
user:apache:r--
group::---
mask::r--
other::---

$ ls -l hostkey.pem 
-r--r-----+ 1 root root 0 Jun  7 23:34 hostkey.pem

そして、この後、レガシー コードは、ファイルがグループ読み取り可能であるとエラーを出し始めます (実際にはそうではありません)。

ファイルに 0400 の「通常の」権限のみがあるように表示しながら、他のユーザーには読み取り専用アクセス権も付与するように拡張 ACL を設定することは可能ですか?

答え1

私たちは、Linux ACL、特に Samba を使用した実験で、このような現象を目にしてきました。しかし、ほとんどの場合、通常の権限/ファイル モード ビットが奇妙な方法で変更されたとしても、システムは全体として意図したとおりに動作します。

どこかで読んだ覚えがあるのですが (どこだったかは覚えていません、すみません)、ファイルを作成するとき (おそらく Samba 経由)、データがファイルに書き込まれるまで ACL 権限がモード ビットに適切に反映されないということです。これは、たとえば touch を使用して作成されたファイルに影響します。

他に考慮すべきことは、デフォルトの ACL を設定するかどうかです。

ACL で保護されたファイルを含む新しいディレクトリを作成するときは、次のようなコマンドを使用します。最後のコマンドは、getfacl を setfacl にパイプして、現在設定されている ACL をコピーし、このディレクトリに作成される新しいファイルのデフォルトの ACL として使用します。

chown --recursive $username:$userrole /home/data/private/$datadir
chmod --recursive u=rwx,g=,o= /home/data/private/$datadir

# remove previous ACLs
setfacl --recursive --remove-all /home/data/private/$datadir

# User/group access for owner, group leader and web server
setfacl --recursive -m u:$username:rwx /home/data/private/$datadir
setfacl --recursive -m g:RGLeader:rx /home/data/private/$datadir
setfacl --recursive -m u:www-data:rwx /home/data/private/$datadir

# Copy access modes to default access modes
getfacl --access /home/data/private/$datadir | setfacl --recursive -d -M- /home/data/private/$datadir

関連情報