touch / mkdirがデフォルトのACLを無視しているようです。

touch / mkdirがデフォルトのACLを無視しているようです。

私はこれが愚かな間違いだと確信していますが、自分でそれを理解することはできないようです。

現在のフォルダのACLを次のように設定しました。

zigbee2mqtt@nuc:/tmp/folder$ getfacl .
# file: .
# owner: zigbee2mqtt
# group: zigbee2mqtt
user::rwx
user:stack:r-x
user:zigbee2mqtt:rwx
user:milkpirate:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:stack:r-x
default:user:zigbee2mqtt:rwx
default:user:milkpirate:rwx
default:group::---
default:mask::rwx
default:other::---
zigbee2mqtt@nuc:/tmp/folder$ id
uid=978(zigbee2mqtt) gid=977(zigbee2mqtt) groups=977(zigbee2mqtt)

これで、次のようにそのフォルダにフォルダ/ファイルを作成するとき:

zigbee2mqtt@nuc:/tmp/folder$ touch foo; mkdir bar

これにより、フォルダに次の権限が付与されますfoo

zigbee2mqtt@nuc:/tmp/folder$ getfacl foo
# file: foo
# owner: zigbee2mqtt
# group: zigbee2mqtt
user::rwx
user:stack:r-x
user:zigbee2mqtt:rwx
user:milkpirate:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:stack:r-x
default:user:zigbee2mqtt:rwx
default:user:milkpirate:rwx
default:group::---
default:mask::rwx
default:other::---

これまではよさそうだ。

しかし、ファイルのACLは消えたようです。

# file: bar
# owner: zigbee2mqtt
# group: zigbee2mqtt
user::rw-
user:stack:r-x                  #effective:r--
user:zigbee2mqtt:rwx            #effective:rw-
user:milkpirate:rwx             #effective:rw-
group::---
mask::rw-
other::---
  1. maskよろしくお願いしますrwx
  2. なぜなら とgroupother(必要な)同じ---権限ですが、次のようになります。ls -la
zigbee2mqtt@nuc:/tmp/folder$ ls -la
total 20
drwxrwx---+  3 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 .
drwxrwxrwt  16 root        root        4096 Jan 15 17:59 ..
-rw-rw----+  1 zigbee2mqtt zigbee2mqtt    0 Jan 15 17:55 bar
drwxrwx---+  2 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 foo

しかし、私は次のように期待しています。

zigbee2mqtt@nuc:/tmp/folder$ ls -la
total 20
drwxrwx---+  3 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 .
drwxrwxrwt  16 root        root        4096 Jan 15 17:59 ..
-rw-------+  1 zigbee2mqtt zigbee2mqtt    0 Jan 15 17:55 bar
drwx------+  2 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 foo

編集する: さて、いくつかのテストをしてみると、すべてが期待どおりに機能しているようですが、結果はls -la正しい結果を反映していないようです。

zigbee2mqtt@nuc:/tmp/folder$ sudo -u nginx -g zigbee2mqtt bash
nginx@nuc:/tmp/folder$ ls
ls: cannot open directory '.': Permission denied

答え1

リストに表示されるのは、ls「レガシー」権限ビットです。これはACLをサポートしていないシステムへのフルアクセス許可であり、ACLをサポートしていないツール(またはユーザー!)が使用できるすべての権限です。 。

「レガシー」グループ権限ビットいいえグループACLに対応しますが、ACLマスク(acl(5)マニュアルページ):

ACLエントリとファイル権限ビットの対応

ACLによって定義された権限は、ファイル権限ビットによって指定された権限の親セットです。

ファイル所有者、グループ、その他の権限と特定のACLエントリとの間には対応関係があります。所有者権限は、ACL_USER_OBJエントリの権限に対応します。ACLにACL_MASKエントリがある場合、グループ権限はACL_MASKエントリの権限に対応します。 それ以外の場合、ACL に ACL_MASK エントリがない場合、グループ権限は ACL_GROUP_OBJ エントリの権限に対応します。その他の権限は、ACL_OTHER エントリの権限に対応します。

マスクの目的は、ACLエントリが名前付きユーザー、名前付きグループ、または所属するグループに付与する権限を制限することです。ある程度までは、3つの「従来の」権限ビットセットが1)所有ユーザー、2)明示的に定義された他のユーザー(ACLなし:グループのメンバー所有、ACLあり:他の指定ユーザー)に適用されると考えることができます。ユーザーまたは他の名前付きグループのメンバー)および3)他のすべての人。

実際の推論は、ユーザーまたはプログラムが所有者だけがファイルへの書き込みアクセス権を持つようにしたい場合、この方法はchmod go-wまだトリックを実行することです。参加者がACLを知らなくても

したがって、ACLエントリがあるため、グループリストに表示されるように意図的rwxls設計されています。出力は、単に所有者以外のユーザーがファイルに対する読み取り、書き込み、および/または実行権限を持っていることを意味します。マスクを(または適切なコマンドを使用)に設定すると、これらのACLエントリは無効になります。user:zigbee2mqtt:rwxuser:stack:r-xls000chmod g-rwxsetfacluser:zigbee2mqttuser:stack


を使用してファイルを作成して表示touchすると、mask::rw-他のほとんどのツールが代わりにtouch特権を持つ一般的なファイルを生成してこれらのビットを保存するためです。ほとんどのファイルは実行可能ではありません。 ACLに関係なく、システムコールに渡された権限は、変更権限を使用するのと同じように有効です。これらのビットをオフに加えて、プログラムは許可ビットを 。06660777xopen()chmod()x0600

関連情報