web-dev-qa-db-ja.com

setfacl:これら2つのコマンドは同じですか?

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番目のコマンドは最初のコマンドが追加オプションを使用して行うのとまったく同じことを行います(よくわかりません)。私の質問は、私の仮定は正しいですか?もしそうなら、最初のコマンドを削除しても同じ効果がありますか?

10
Hosh Sadiq

最初のコマンドは、既存のファイル/ディレクトリの権限を変更します。 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--
15
slm