我来自一个编程背景,因为我们的系统pipe理员的紧急情况,已经投入到pipe理Linux服务器的工作中。 让我们的PHP文件拥有的可靠或安全,但Apache明显运行在Fedora 8作为Apache?
Apache有权读取,在小的情况下,例如上传目录,通过chmod 777为该上传文件夹写入权限。
我们正在运行mod_security,但想知道是否有一些更好的做法。 在系统pipe理员正在休养的时候,我会在接下来的2-3周里独自一人。
什么组拥有PHP文件? 你提到的777表明它是'轮'或'adm'或者其他特权组,所以Apache可以看到任何文件的唯一方法就是该文件是世界可读的。 或者在上传文件夹的情况下是世界可写的。
这几乎肯定不是一件好事 – 尽pipe严重程度取决于服务器上运行的所有内容(基于Web和以其他方式),是否有任何PHP脚本包含明文凭证等。
另一方面,如果这些文件由Apache运行的gid所拥有,那么你的状态就会好一些。 你可以理论上在DocumentRoot上做一个chmod -R o-rwx来移除所有“世界”特权,而且一切都很可能是很好和安全的,你的网页仍然可以工作。
但是接下来是setuid位的问题。 我并不确定是否开启了setuid的根目录的PHP脚本,实际上可以被用于恶意目的,但我不希望在我的web服务器上有一个脚本。
即使setuid不是一个问题,根本所有权仍然不适合我。
如果你运行PHP的方式就像Apache的用户那样运行(例如debian系统上的“www-data”,CentOS + cPanel共享主机上没有“…”),那么文件的所有者并不是真的从通过Apache-PHP调用PoV的问题,因此脚本将始终作为Apache用户而不是拥有该文件的用户运行。
如果您将PHP作为模块运行,那么这种情况几乎肯定会发生。
如果您将PHPconfiguration为以特定用户身份运行脚本(通过suphp,suexec或类似的方式运行脚本 – 如果您通过CGI或FastCGI方法运行PHP,则可能会这样做),然后拥有特权用户所拥有的脚本文件是非常糟糕的理念。
至于“777”权限,这应该被避免,特别是如果你不是服务器上的唯一用户。 我将确保该目录由用户拥有,Apache将运行PHP并使用“700”(或者在该用户也在使用并使用770的组中)。 为了更大的偏执狂,如果你的脚本总是知道他们想要的文件名,并且不需要读取目录列表,那么也不允许在目录上执行许可。
也从来没有脚本世界可写。 默认的suPHP设置实际上通过拒绝运行带有世界可写权限的脚本(或者在目录中)实际上保护了你。
作为一般规则,我避免在开发中使用限制较less的权限,而不是在现有的公开可用的环境中使用。 这样可以避免在促进代码生存时不小心让许可证过于宽松,并且避免在代码承担比实际环境允许的更宽容的访问的情况下引入错误。
777权限通常被认为是PHP脚本的一个坏主意。 如果这些文件是由root用户拥有的,那么你可能希望它们至less被apache组所拥有,所以如果这不是你想要的,它们不必是世界可读的。 这样你可以缩小到770的权限。 (对于脚本来说,拥有root的脚本似乎也有点奇怪。)
将来,您可能还需要在目录上设置sticky位,以确保添加到该目录的新文件通过以下命令自动被chgrp'd更改为任何拥有该目录的组:
chmod 2775 / path / to /目录
这样,你可以(例如)设置你服务于Apache的目录的组所有者,新增的内容将自动在Apache组中,因此可以读取,而不需要授予世界可读的权限(假设适当的umask)。