Ubuntu 20.04 LTSを実行し、Nginx 1.18.0およびPHP-FPMを実行してWebサイトを提供します。
/var/www
FPMユーザーが所有し、foo
サイトをホストするドキュメントルートとして新しいフォルダを作成します。
$ sudo mkdir foo
$ sudo chown -R foo:foo
$ sudo chmod -R u=rwX,g=rX,o= foo
$ sudo chmod -R g+s foo
$ ls -la
drwxr-s--- ... foo foo ... foo
グループにNginxを追加しましたが、書き込みfoo
ができないことを望むので、グループ権限を上記のrX
ように設定しました。
デフォルトのACLを設定しました。デフォルトでは、すべての新しいファイルに同じ権限を付与したいと思います。
$ sudo setfacl -Rm d:u::rwX foo
$ getfacl foo
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::---
rwX
私はディレクトリを閲覧できますが、基本的にファイルを実行可能にしたくないので、特に使用しました。
今AliceとBobはそこに何かをしたいので、両方をグループfoo
に追加します。
$ sudo usermod -aG foo bob
$ sudo usermod -aG foo alice
Bobにアクセスを許可しました。foo
AliceとBobがグループの人間ユーザーとして書き込むことができるように、ACLオーバーライドを追加したいと思います。まずご飯:
$ sudo setfacl -Rm u:bob:rwX,d:u:bob:rwX foo
$ getfacl foo
user::rwx
user:bob:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:bob:rwx
default:group::r-x
default:mask::rwx
default:other::---
Bobは新たに発見した能力をテストします。
$ touch foo/bobfile
$ ls -la foo
drwxrws---+ ... foo foo ... .
drwxr-xr-x ... root root ... ..
-rw-rw----+ ... bob foo ... bobfile
ls
これでグループ書き込み権限があることがわかりましたが、これはbobfile
担当者ls
です1 つ以上のエンティティに適用される使用可能な最高権限すべてのユーザーがそれを持っているわけではありません。
アリスにアクセス権を与えます。私は彼女がボブと同じ権限を持つことを望んでいます。
$ sudo setfacl -Rm u:alice:rwX,d:u:alice:rwX foo
$ getfacl foo
user::rwx
user:bob:rwx
user:alice:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:bob:rwx
default:user:alice:rwx
default:group::r-x
default:mask::rwx
default:other::---
AliceはBobのコマンドを実行できるようになりました。文書。ああ?
$ ls -la foo
drwxrws---+ ... foo foo ... .
drwxr-xr-x ... root root ... ..
-rw-rwx---+ ... bob foo ... bobfile*
実際、Aliceは今すぐ実行できますfoo/bobfile
。一方、所有者のボブは自分のファイルを実行できません。
Aliceが新しいファイルを作成すると、そのファイルを実行できなくなり、bobfile
ACLが追加されたときにすでに存在していたファイルのみが実行されます。
興味深いことに、BobはAliceのファイルも実行できません。私にとって、これはACL基本項目と非基本項目の違いを示しています。
私は2つのことを間違って理解したようです。
x
重要度はX
少なくともACLにとってはそうです。 Aliceがここで既存のファイルに対する実行権限を取得するのはなぜですか?X
ACLエントリを追加すると既存のファイルを実行できますが、新しいファイルは実行できないため、ACLのデフォルトルールとデフォルト以外のルールが重要です。
目的の結果を得るための正しいコマンドは何ですか?
修正する:状況がさらに奇妙になります。
上記の結果の後、すべてのファイルに対する実行権限を削除しました。
$ sudo chmod -R ug-x+X foo
これは期待どおりに機能します。
しかし、その後、AliceのACLエントリを削除しました。
$ sudo setfacl -Rx u:alice,d:u:alice foo
何か合わせてみて?これにより、すべてのファイルがbob
実行可能になりますalice
。
$ ls -la foo
-rw-rwx---+ ... alice foo ... alicefile*
-rw-rwx---+ ... bob foo ... bobfile*
-rw-rw----+ ... foo foo ... foofile
これらのファイルのテスト実行は次のようになります。
- これで、アリスは自分の所有ファイルを再実行できるようになりました。
bob
- Bobは所有している次のファイルを実行できるようになりました。
alice
alice
これでfooファイルとfooファイルを実行できますbob
。- AliceとBobはどちらも独自のファイルを実行できません。
- どちらも所有しているファイルを実行できません。
foo
この行動により完全に慌てたので、ここに助けと洞察を与えてくれてありがとう。ありがとうございます。
注:以前にこのコンテンツを公開したことがあります。サーバー障害気づく前に、これはより良い場所かもしれません。これがルールに違反している場合は、お知らせください。他の質問を削除します。