Answers:
您可以。您只需要在/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
具有非零组/其他权限,并且对手知道或可以猜测其名称,则该对手可以与这些文件进行交互。
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
通过bind mount通过另一个视图公开。
# 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