web-dev-qa-db-ja.com

ACLを使用したディレクトリごとのumaskの設定

次の結果を確実にするために、特定のディレクトリfooでシステム全体の002 umaskの動作を模倣したいと思います。

  1. fooの下に作成されたすべてのサブディレクトリには、775の権限が付与されます
  2. fooおよびサブディレクトリの下に作成されたすべてのファイルには、664のアクセス許可があります
  3. 1と2は、ルートを含むすべてのユーザーとすべてのデーモンによって作成されたファイル/ディレクトリで発生します。

パーティションで ACLが有効になっている と仮定すると、これは私たちが思いついたコマンドです:

setfacl -R -d -m mask:002 foo

...しかし、これは機能しません。ディレクトリに作成された新しいファイルは、次のようになります。

-rw--w-r-+

新しいファイルでgetfaclを実行すると、次のようになります。

#ファイル:newfile.py
#所有者:ルート
#グループ:agroup
ユーザー:: rw-
グループ:: rwx#有効:-w-
マスク::-w-
その他:: r--

つまり、ACLを使用したmask:200の適用は、umask 200の適用とはnotと同じではありません。

isACLを使用してディレクトリごとのumaskを適用する方法はありますか?

5
Yarin

これはACLの典型的な仕事です:-)

あなたの例

$ mkdir /tmp/foo

ディレクトリ自体の権限を設定します

$ setfacl -m g::rwx -m o::rx  /tmp/foo

新しく作成されたディレクトリとそのディレクトリ内のファイルの権限を設定します。

$ setfacl -m default:g::rwx -m o::rx  /tmp/foo

テスト

$ mkdir /tmp/foo/bar
$ touch /tmp/foo/bar/baz.py
$ ls -ld /tmp/foo/bar /tmp/foo/bar/baz.py
drwxrwxr-x+ 2 jdoe jdoe 4096 Mar 10 00:06 /tmp/foo/bar
-rw-rw-r--  1 jdoe jdoe    0 Mar 10 00:06 /tmp/foo/bar/baz.py

解説

  • マスクの概念は、ACLとUnixのアクセス許可マスクでは大きく異なります。 ACLのマスクはファイルの属性です... ACLを通じて付与される最大のアクセス許可を制限します(mask:r-x + group:foo:rwx =>有効なアクセス許可= r-x
  • 警告:グループのUnix権限を変更すると、ACLのマスクも変更されます(設計上)。

提案

  • Setgid(chmod 2755など)を使用して、ファイルに書き込むことができるグループを制御します。
  • および/またはグループに権限を明示的に付与するsetfacl -m group:dev_team:rwx
3
Franklin Piat

ファイルが作成されるたびにトリガーされるdnotifyおよびスクリプトを使用できます。参照: https://serverfault.com/a/127686/30946

0