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


10

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

回答:


15

最初のコマンドは、既存のファイル/ディレクトリの権限を変更します。-d2番目のコマンドでは、順番にこれらのディレクトリ内のすべてのファイルのACLのデフォルトセットを提供する任意のディレクトリ、のために今後既定のアクセス許可を設定するために重要です。

注:どちらの場合も、コマンドは-Rスイッチを介して再帰的に実行されます。

-dスイッチについては、setfaclmanページから:

   -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--

ああ、確認のために、app/cacheと呼ばれるディレクトリを含むディレクトリがある場合dev、最初のコマンドはそれに適用されますが、2番目のコマンドは適用されません。そして、後で別のディレクトリが追加された場合(例:)prod、2番目のコマンドは権限を設定しますか?そうでない場合は、2番目のコマンドをスキップできますか?
Hosh Sadiq、2014年

1
@HoshSadiq-いいえ-R、再帰的なコマンドではないため、権限が適用されます。-d警備員、誰かがディレクトリを作成するか、後でので、それはあまりにも、このACLが適用されなければならないこと木にいくつかのディレクトリを移動した場合。
slm

それは素晴らしいことです!物事をより明確にします:)ありがとう!
Hosh Sadiq、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.