我想知道为什么当我的 tar 文件由 root 拥有并且 chmoded 为 600 时仍然可以看到它。
我有 apache,我的服务器是 ubuntu 12.04。
对这种行为有什么解释吗?
父文件夹归 www-data 所有。
谢谢!
答案1
我不太熟悉 Apache 内部显示文件列表的方式,但我知道它在文件系统级别的工作方式。
如果您是用户 www-data 并且您将 cd 到您更改权限的目录并使用 ls 列出文件,您仍然会看到 tar 文件,即使它是 600 并且由 root 拥有。
读权限只表示您可以读取文件的内容。文件系统将文件列表保存在目录“file”内的目录中。如果您对该目录具有读权限,则可以列出此目录中的所有文件,但这并不意味着您可以读取每个文件。
如果要隐藏文件,您可以将其命名为带点的文件,例如 .myfile.tar(但 Apache 也可能显示隐藏文件),或者将其移动到其他地方。
您还可以创建一个由 root 拥有的子目录,其所属组与 www-data 属于同一组,权限为 730。3 表示可写和可执行,在目录中,它表示您可以修改其结构(创建或重命名文件),因为您可以在目录“文件”内写入,并且可以访问其子元素(这就是目录中 x 的含义)。因此,即使 www-data 用户也可以将您的 tar 文件移动到此子目录,但 Apache 无法列出其内容。而且,只要 www-data 记住了文件的名称,它甚至可以继续编辑文件!
答案2
您应该检查正在运行 apache 守护进程的用户,也许是以 root 身份运行。
答案3
为了排除故障,请尝试创建一个 Apache 不允许下载的新文件。
touch test.tgz
sudo chown root:root test.tgz
sudo chmod 600 test.tgz
如果您无法下载测试文件,则这只是某种缓存。该文件可能缓存在您的客户端计算机、服务器或两者之间的任何其他计算机上。
如果您无法使用缓存破坏器(例如example.com/countdown.tgz?test
)访问同一个文件,则其他人也不应该能够下载该文件。