次のディレクトリ構造があるとします。
a
b1
c1
c2
b2
c3
c4
setfaclを使用してユーザーにc1に直接アクセスする権限を与えたいと思います。次のようにできます。
setfacl -m u:frank:rX a/b1/c1
ただし、これはaとb1に自動的にアクセスできるわけではありません。
-R オプションは c1 の子 (存在する場合) に ACL を適用するため、この問題を解決します。
答え1
ACLを適用するディレクトリのリストを指定する必要があります。これは、再帰操作モードがあるかどうかに関係なく、ファイルメタデータ(たとえば、、、、などchown
)chmod
を変更できるすべてのコマンドに対してchattr
同じです。必要 すべてのパスコンポーネントがシンボリックリンクではないことを確認します。setfattr
touch
だから:
setfacl -m u:frank:rX a a/b1 a/b1/c1
または、cshに似た中括弧拡張をサポートするシェルで:
setfacl -m u:frank:rX a{,/b1{,/c1}}
シェルがある場合は、次zsh
の関数を定義できます。
upward() until [[ $argv[-1] = . ]] { "$@"; argv[-1]=$argv[-1]:h; }
それから:
$ upward echo setfacl -m u:frank:rX a/b1/c1
setfacl -m u:frank:rX a/b1/c1
setfacl -m u:frank:rX a/b1
setfacl -m u:frank:rX a
(echo
実際の実行を削除してくださいsetfacl
)。
または、次のいずれかを定義できます。
ancestry() until [[ $REPLY = . ]] { reply+=($REPLY); REPLY=$REPLY:h; }
glob修飾子として使用される関数:
$ echo setfacl -m u:frank:rX a/b1/c1(+ancestry)
setfacl -m u:frank:rX a a/b1 a/b1/c1
またはd
eptho
シーケンスの場合:
$ echo setfacl -m u:frank:rX a/b1/c1(od+ancestry)
setfacl -m u:frank:rX a/b1/c1 a/b1 a
いずれにせよ、ペアに検索アクセスを許可すると、ディレクトリアクセスが制限されていfrank
ない場合(上記のアクセスは制限されているため)、そのペアのアクセスを開くことができることa
に注意してください。a/b2