我目前正在设置运行 CentOs 6 的自己的 Linux 服务器。为了测试服务器的安全性,我编写了一个 PHP 脚本,其作用类似于“导航器”。我可以向上一级目录,打开文件等等。
问题是,我的工具允许我向上直到“/”,但我对此不太满意。尽管 Apache 以“无人”身份运行,但它似乎可以访问整个服务器上的每个文件夹和文件。
我尝试像 cPanel 那样解决这个问题,但由于我没有 cPanel,我不完全知道这是如何完成的。
基本上我有这个:
/home/account/public_html /home/anotherAccount/public_html
我想让“anotherAccount”无法访问“account”的文件。实际上我会喜欢它,所以“anotherAccount”甚至无法离开它自己的目录!
是的,我知道你在想:安装suPHP/fastcgi/suExec,但我不能这样做,因为它们正在吃资源。我知道无需安装其中任何一个也是可以的!我将我的脚本上传到一些专业但不太知名的网络主机,我可以进入/使用它,但不能进入除我自己的主目录之外的主目录。 /home/ 列为空!
如何保护我的主文件夹?
答案1
如果您希望除了您自己和 root 之外没有人可以访问您的主文件夹,您必须确保其他用户在您的主目录中没有权限。像这样:
chmod o-rwx ~
这会删除其他用户对主目录的读取、写入和执行权限。
如果您还想确保拥有您的主目录的组中的任何人都无法访问它,您还必须执行以下操作:
chmod g-rwx ~
这还将删除拥有您的目录的组的组成员的所有权限。
如果您想了解更多详细信息,请查看联机帮助页man 1 chmod
和man 2 chmod
。他们应该向您解释所有细节。
顺便提一句。我害怕在我的服务器上放置一个允许任何人浏览文件的 PHP 脚本,即使它仅以 user 身份运行nobody
。
答案2
Apache 用户始终能够读取文件系统的大部分内容。根据设计和默认情况,许多位置对于所有用户都是可读的(有时是可执行的)。这本身并不是问题。
您需要确保的是 1) Apache 不会提供一组特定目录之外的文档,并且 2) PHP 不允许进入任何不包含应用程序 PHP 文件的目录。
1) 使用<Directory>
条目来限制访问并确保任何配置文件中不存在不安全的默认值。这与你的问题有点不相干,因为提供文件的是 PHP,而不是 apache。但要注意这一点仍然很重要;
2) 启用安全模式并设置 doc_root 和 open_basedir 指令以确保 PHP 仅限于特定目录树,例如open_basedir="/var/www/htdocs/<website>/";
.这些配置选项可以在很多地方设置:从系统的 php.ini 到 vhost 专用的 php.ini 文件,到传递给 php 解释器的 apache 指令等;