Symfony2インストールの特定のサーバーに権限を設定する(capifonyに基づく)デプロイメントスクリプトがあります。これには、いくつかのディレクトリに対してこれを行うための次の2つのコマンドが含まれています。
setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache
これらの2つのコマンドは、権限を修正する方法としてSymfony2サイトにありますが、これらは私と非常によく似ていました。だから私はsetfacl
のマンページを見て、私が理解できることから、2番目のコマンドは最初のコマンドが追加オプションを使用して行うのとまったく同じことを行います(よくわかりません)。私の質問は、私の仮定は正しいですか?もしそうなら、最初のコマンドを削除しても同じ効果がありますか?
最初のコマンドは、既存のファイル/ディレクトリの権限を変更します。 2番目のコマンドの-d
は、ディレクトリのデフォルトのアクセス許可を設定するために重要です。これにより、これらのディレクトリ内のすべてのファイルにデフォルトのACLセットが提供されます。
注:どちらの場合も、コマンドは-R
スイッチを介して再帰的に実行されます。
-d
スイッチについては、setfacl
のマニュアルページから:
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
この抜粋はそれをかなりよく説明しています:
ACLには、アクセスACLとデフォルトACLの2つのタイプがあります。アクセスACLは、特定のファイルまたはディレクトリのアクセス制御リストです。デフォルトACLはディレクトリにのみ関連付けることができます。ディレクトリ内のファイルにアクセスACLがない場合は、ディレクトリのデフォルトACLのルールを使用します。デフォルトACLはオプションです。
ソース: 8.2。アクセスACLの設定 。
このディレクトリ構造があるとします。
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
次に、質問の最初のsetfacl
コマンドを使用して権限を設定します。
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
次の結果になります。
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
ここで-dR
コマンドを実行しないと、新しいディレクトリはACLでカバーされません。
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
ただし、このディレクトリを削除してsetfacl -dR ...
コマンドを実行し、上記の操作を繰り返す場合:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
これで、権限はかなり異なります。
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
そして、新しく作成されたディレクトリは、これらの「デフォルト」権限を取得します。
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
これらの権限をdir2
に設定すると、dir2
内のファイルにもこれらの権限が適用されるようになります。
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--