我在服务器上有一个权限为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 …