回答:
あなたはできる。/a/b
ディレクトリに実行可能ビットを設定するだけです。それで何かを見ることができb
なくなりますが、に直接行けばあなたはまだ何でもできますa/b/c
。
% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
this.txt
他のユーザーはのコンテンツを一覧表示できません/a/b
が、ファイルの名前を推測した場合、そのディレクトリ内のファイルにアクセスできることに注意してください。
% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory
b
この警告を回避するため、ディレクトリ内の他のすべてのファイル/ディレクトリに対する適切な許可(グループ/ワールドなし)を維持するようにしてください。
b
リンクするために読む必要があるのでc
a/b
が0以外のグループ/その他のアクセス許可を持ち、攻撃者が名前を知っているか推測できる場合、攻撃者はそれらのファイルと対話できます。
b
を作成する前にこれを保護するためにすべてのパーマにパーマを設定するc
必要があり、b
パーマが所有者のみに対して安全であることを保証するために他のアイテムが入力される場合は注意が必要です。
ユーザーがアクセスできない場合、ユーザーはの/a/b
下のどのファイルにもアクセスできません/a/b/c
。/a/b/c
ディレクトリトラバーサルはで停止するため、の権限は関係ありません/a/b
。
ディレクトリ/a/b
がリストに表示されないようにするだけで、ユーザー/a/b
がファイル名を推測した場合にファイルにアクセスしても問題ない場合は、/a/b
実行可能にすることはできますが、読み取りはできません。ディレクトリーでは、読み取り許可はディレクトリーの内容のリストのみを制御し、実行許可はそのディレクトリーのエントリーへのアクセスを制御します。
# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
… contents of /a/b/c …
を/a/b
除いて他のユーザーがファイルにアクセスできないようにする場合は、バインドマウントを使用して、別のビューで/a/b/c
公開できます。/a/b/c
# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
… contents of /a/b/c …
chmod +x /a/b