新しいファイルとフォルダに設定されたデフォルトのACL権限

新しいファイルとフォルダに設定されたデフォルトのACL権限

新しく作成されたすべてのフォルダとファイルがこの既定のアクセス許可を持つように、フォルダ内に既定のアクセス許可を設定したいと思います。
だから私がちょっと調べてみた結果、私が見つけた最高のスレッドは次のようになります。これ

それで私はこの小さな「テスト」を思い出しました。

#!/bin/bash

# setup folder
rm -rf ./test
mkdir ./test
cd ./test

# Reset all files/folders
sudo chmod -R 0000 ./ # delete all permissions
sudo chmod -R -st ./ # remove all special bits
sudo setfacl -Rdx u::,g::,o:: ./ # remove all default user/group permissions

# set new permissions and ownership
sudo chown -R christopher:users ./ # Set user and group for all files/folders
sudo chmod -R 550 ./ # set default permissions to all files/folders
sudo chmod 750 ./ # set folder main permission
sudo setfacl -d -m u::rx ./ # set user default permission (same as 550)
sudo setfacl -d -m g::rx ./ # set group default permission (same as 550)

# test the default permissions
nano myFile # write some data in it and save

今テストしたいです。
まず、getfacl ./この出力を生成する内容は次のとおりです。

# file: .
# owner: christopher
# group: users
user::rwx
group::r-x
other::---
default:user::r-x
default:group::r-x
default:other::---

getfacl ./myFileその後、次の出力も試しました。

# file: myFile
# owner: christopher
# group: users
user::r--
group::r--
other::---

これは明らかにうまくいかないので、2つの質問があります。

  1. 私は何が間違っていましたか?新しく作成されたファイルには、myFilesetfaclコマンドで指定されているようにr-xr-x---権限が必要です。それではなぜそうではありませんか?
  2. SUID / GUID / OUIDフラグ(sst)を設定しても機能しません。しかし、定義によると、どのように使用するのかよくわかりませんset the SUID or GUID flag on a folder will inherit its own permission to new created files within the folder。本当に許可があるのでしょうか?または、所有者のユーザー/グループのみが適用されますか?
  3. たぶん私の小さなスクリプトを修正するのに役立ちます。ただし、これにより、新しく作成されたフォルダに対する既定のアクセス許可と新しく作成されたファイルに対する既定のアクセス許可が異なる必要があるという問題が残ります。これは、新しく作成されたフォルダには常に550のアクセス許可が必要で、新しく作成されたファイルには常に440のアクセス許可が必要なためです。次のコマンドを区別できますfind -type。したがって、find ./ -type d -exec chmod 550 {} \;すべてのフォルダに対する権限を一度に550に設定するなどの操作を実行できます。 (type fファイルに似ています)。ただし、これは作成され、存在するフォルダ/ファイルにのみ適用されます。ただし、新しく作成されたフォルダとファイルに対するいくつかの「デフォルト」権限が必要ですが、両方に別々のデフォルト権限が必要です。

答え1

デフォルトのACLによって設定された権限は、ファイルを生成したプログラムによって提供されるモードによって上書きされます。通常、通常のファイルを生成するプログラムは権限を設定し0666(つまり、実行ビットなし)、ハンドルがグループをumask削除し、他の誰もがアクセスできるようにします。ディレクトリの場合、モードは通常0777xビットですはいしばしば必要だからです。

「プライベート」ファイル(SSHキーなど)を生成するプログラムは、自分0600自身以外には誰もアクセスできないように権限を指定します。

これ手動acl(5)説明する:

オブジェクト生成と基本ACL

  1. モードパラメータに指定された権限に含まれていない権限が含まれないように、ファイル権限ビットに対応するアクセスACLエントリを変更します。

したがって、ACLはu::ファイルユーザーの共通権限ビットに対応するため、権限は生成プログラムによって提供される内容によって隠されます。 (ある意味では、デフォルトのACLがumaskを置き換えるようです。)ディレクトリを作成すると、x必要なビットが得られることがわかります。

技術的には、これはACLエントリには影響しません。特定のようなユーザーですが、u:foo:rwxACLマスクに制限されています。このマスクは既存のグループ権限ビットに対応し、上記で引用した規則はこのマスクにも適用されるように見え、ACLマスクはファイルの作成時に設定されたグループ権限ビットによって制限されます。

しよう:

$ mkdir dir ; chmod 750 dir ; setfacl -d -m u::rx -m g::rx -m u:foo:rwx dir 
$ touch dir/file ; mkdir dir/subdir

生成されたファイルにはxビットがマスクされています(getfaclビットセットはマスキングが適用された後に有効な値とともにここに表示されます)。

$ getfacl dir/file
user::r--
user:foo:rwx                    #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::---

しかし、ディレクトリにはありません。

$ getfacl dir/subdir/
user::r-x
user:foo:rwx
group::r-x
mask::rwx
...

これは(1)と(3)の答えです。 (2)の場合:IIRC、設定-bit() を使用すると、そのg+sディレクトリに作成された新しいファイルが継承されます。グループディレクトリ(スキーマではない)。固定ビット()はあなたに属していないファイルの削除を制御し、実際にsetuid bit()がディレクトリで何をしているのか+tわかりません。u+s

関連情報