我可以在私有目录下创建公共目录吗?

我可以在私有目录下创建公共目录吗?

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

相关内容