ディレクトリにアクセス許可を再帰的に設定するにはどうすればよいですか(ACLを有効にした場合)?


24

たとえば、同僚に特定のディレクトリへの書き込みアクセスを許可したいとします。その中のサブディレクトリにアクセス権775、ファイル664があり、さらにdir-775にいくつかの実行可能ファイルがあったと仮定しましょう。

次に、書き込み権限を追加します。chmodを使用すると、次のようなことができます

chmod o+w -R mydir/

しかし、それはクールではありません。ディレクトリを誰でも書き込み可能にしたくないからです。特定のユーザーにのみアクセスを許可したいので、ACLを使用します。しかし、これらのアクセス許可を設定する簡単な方法はありますか?ご覧のとおり、少なくとも3つのケース(ディレクトリ、ファイル、実行可能ファイル)に個別に取り組む必要があります。

find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;

このような単純なタスクには、かなり多くのコード行があるようです。もっと良い方法はありますか?

回答:


40

setfacl次のような再帰オプション(-R)がありますchmod

  -R, --recursive
      Apply operations to all files and directories recursively. This
      option cannot be mixed with `--restore'.

また、capital-x X許可の使用も許可されます。

  execute only if the file is a directory or already has
  execute permission for some user (X)

したがって、次のことを行うと動作するはずです:

setfacl -R -m u:colleague:rwX .

(すべての引用はDebianに同梱されているacl-2.2.52からのものman setfaclです)


4
setfaclには、FreeBSD 9の '-R'フラグがありません
アーロンC.デブルーン14

6
OPは[linuxの]として自分の質問にタグ付けされたことを、それの良い
ウムラウト

それを逃した。;)
アーロンC.デブルーン

これは、後で作成された新しいファイル/フォルダーに自動的に適用されますか?
エニグマ

setfaclのバージョンのmanページを確認してください。このオプション-Xは、に含まれてsetfacl 2.2.49いるとおりに機能しません。
-phyatt

5

umläuteで述べたように、setfacl -R大文字の「X」を使用したコマンドは、次のような方法です。

setfacl -R -m u:colleague:rwX .

ただし、ACLを再帰的再適用する必要がある場合(つまり、Windowsの "サブディレクトリにアクセス許可を再適用する"など)。

find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')

このようなコマンドは、などのエラーを回避するために分割できますsetfacl: foobar: Only directories can have default ACLs

find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')

構文<( something )はbash固有のProcess Substitutionであることに注意してください。別のシェルを使用する場合は、一時ファイルを作成する必要があります。


-1
for i in $(find /data -mindepth 0 -type d)
do setfacl -m  u:zabbix:r-x $i
    echo "ACL rules set for "$i
done


@muru好奇心から、なぜですか?
シャドゥール

コメント全体はリンクです。それに従って、調べてください。
ムル

このアプローチを使用したい場合は、find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
sibaz

1
使用しないでください。$(find /data -mindepth 0 -type d)行ごとに結果を返さず、結果全体をバッファします。行にスペースがある場合、$i変数に誤ったレコードが表示されます。
グノート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.