.htaccess 和 Linux 权限

.htaccess 和 Linux 权限

我有一些继承的 php 代码,我正尝试保护它们。但是,从文件上传目录中删除执行权限会引发权限错误。下面是简要概述:

apache 指向 /root/www/(系统上唯一的用户是 root)

图像上传通过 /root/www/admin/files 的符号链接保存到 /files (我不知道为什么文件要保存到 /)

权限:

drwxrwxrwx  8 root     root      4096 2011-04-06 16:51 root  (root home directory)
drwxr-xr-x  8 www-data www-data     4096 2011-04-01 19:34 www   (folder in /root/)
lrwxrwxrwx  1 root     root        21 2011-03-04 20:32 files -> /files/  (symlink)

 drw-------  4 www-data www-data 61440 2011-04-06 16:12 files   (folder in root directory)
-rwxrwx---  1 www-data www-data      81 2011-04-06 15:56 .htaccess (file in /files/)

Apache 错误日志摘录:

[Wed Apr 06 16:58:24 2011] [crit] [client 1.2.3.4] (13)Permission denied: 
/root/www/admin/files/.htaccess pcfg_openfile: unable to check htaccess file,
ensure it is readable, referer: http://example.com



我想将 /files/ 的权限从 700 更改为 600。我不明白为什么只有在设置执行权限时 .htaccess 才是可读的。

答案1

我怀疑您在这里的困惑源于对类 Unix 文件权限的常见误解,具体来说:在目录中,“执行”并不意味着“执行”。

我怀疑您是在试图确保上传到上传目录的文件无法执行,对吗?这是常识。但是,您的方法存在缺陷:在目录中,“执行”位并不意味着“允许执行此处的文件”,而是“允许用户遍历此目录”。换句话说,删除用户/组/世界的目录上的执行位会剥夺相关用户访问其中任何文件或目录的能力——这正是 Apache 现在抱怨它无法做到的。

您需要将上传目录保持为“可执行”。您需要的是 umask,以确保上传的文件不可执行。(实际上,这也不是必需的,因为默认情况下文件在 *nix 上不可执行。)

答案2

由于 .htaccess 位于 /files 中,如果当前用户没有 /files 的执行权限,则无法访问它。请以普通用户身份尝试一下:创建一个新目录,将文件放入其中,然后删除该目录的执行位。您应该无法访问其中的文件。

想要删除该特定执行位背后的原因是什么?我认为这并没有什么安全优势,但如果我遗漏了什么,请告诉我。

答案3

虽然主要问题已经解决,但另一个解决上传文件无法执行问题的可能方法是使用 noexec 挂载 /files。不过,这需要一个新的分区。

相关内容