似乎我让 PHP 应用程序运行的唯一方法是授予每个文件 0777 权限。这对于 Web 服务器环境安全吗?
即威尔任何人可以编辑我的文件吗?
答案1
如果某个可执行文件受到攻击,以非 root 用户身份运行守护进程(即 Web 服务器)可以为您提供一层保护。(请注意,“分叉”服务器(例如)apache
有一个以 root 身份运行的进程和不以 root 身份运行的工作子进程。这是必需的,以便apache
可以绑定到特权(<1024)端口号。)
apache
例如,如果您的 Web 服务器是,并且以 的身份运行www-data:www-data
,那么发现并利用漏洞的人只能拥有与www-data
用户或www-data
组相同的权限。它还只能访问www-data
用户拥有的文件、组拥有的文件www-data
或世界可读/可写/可执行的文件。
拥有 PHP 脚本可修改(即写入权限)www-data
意味着通过 HTTP 守护程序进入的攻击者可以用他/她想要的任何代码替换该脚本。www-data
除非 PHP 脚本编写不当或不适合在 Web 服务器环境中运行(这种情况很少见),否则 PHP 脚本不需要修改。
你可能想要某些目录如果应用程序保存数据或以其他方式使用文件系统,则可以修改。我通常将它们符号链接到主文件系统之外的某个位置。即便如此,为了完全安全,您也不希望www-data:www-data
能够将新文件写入 HTTP 守护程序将从中调用 PHP 的任何内容。 apache
,通过使用配置文件中的.htaccess
文件和<Directory>
节,可以配置为不在某些目录中执行 PHP - 如果您想真正全面地了解它。
答案2
是的。任何人都可以编辑您的文件。这就是最后一个“7”的含义。
在不了解您的应用程序的情况下,我猜您可能想要的是那些应该通过应用程序读取/写入的文件的权限 775,并确保将组设置为 apache 用户。即便如此,请注意,如果该框上的某些东西受到损害,人们可能仍然可以读取和写入这些文件 - 没有简单的方法可以解决这个问题。(您可以通过多种方式解决问题,但没有一种是简单的)。
答案3
这个问题在堆。
您需要查看 suexec。如果您不知道自己在做什么,设置起来会很麻烦,但它可以通过让 apache 以用户身份访问文件来帮助隔离漏洞。