サーバーに700の権限を持つ個人用フォルダ/ a / bがあります。私は他の人が/a/bの内容をリストしたくありません。 /aの所有者はrootです。
これで、すべてのユーザーに/a/b/cディレクトリに対する完全な権限を付与する必要があります。
/a/b/cの権限を777に変更しましたが、他の人はまだアクセスできません。
答え1
あなたはできます。ディレクトリに実行可能ビットを設定するだけです/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
この警告を回避できます。
答え2
これらの権限では目標を達成できません。ディレクトリにアクセスするには、c
他のすべてのユーザーがディレクトリを参照できるようにする必要があります。b
これは、ディレクトリに実行権限を付与することによって行われます。モード 711 に設定すると、/a/b
ディレクトリのナビゲーションは許可されますが、読み取りと書き込みは拒否され、目的の結果が得られます。しかし、他のユーザーはできないことに注意してください。リストにあるファイル/a/b
、名前が推測され、ファイルに十分なオープン権限がある場合、アクセスファイルである可能性が高いです。
答え3
ユーザーがアクセスできない場合は、/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 …