![将用户保留在 Web 服务器上的主目录中的最简单方法](https://linux22.com/image/610770/%E5%B0%86%E7%94%A8%E6%88%B7%E4%BF%9D%E7%95%99%E5%9C%A8%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E4%B8%BB%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%9C%80%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95.png)
我想知道在网络服务器上阻止用户浏览主文件夹以外的目录的最简单、最安全的方法是什么。
我有一个共享的 Web 服务器,其中有多个用户,他们都有一个public_html
目录。使用 PHP,他们可以轻松包含或列出其他用户的文件。
当他们尝试cd ../
进入他们的主目录或者当他们时,我怎样才能让他们认为他们已经到达服务器的根目录<?php include('../../otheruser/public_html/config.php');
?
我在考虑 chroot jail。有没有一种最简单的方法,只使用模式?Apache?PHP 配置?其他 Linux 工具?
非常感谢您的帮助。
编辑:忘了说我正在使用 CentOS 6.4 和 Debian 服务器。
编辑2:我不需要用户具有 shell 访问权限。
答案1
您可以安装和配置苏普。
suPHP 是一个 apache 模块,它以用户自己的 uid 而不是 apache 的 uid 来运行用户的脚本。由于所有脚本都以自己的 uid 运行,因此简单的文件权限会确保它们不会进入其他用户的目录以及 apache 用户可以访问的任何其他内容。
文件系统权限还会阻止他们从 shell 进入其他用户的文件夹。只需确保主目录不向其他人授予权限即可,例如 770 是好的,777 或 775 是不好的。
答案2
如果您希望用户拥有 shell 访问权限,那么您所要求的并不容易实现。请这样想:您是否希望能够运行ls
?那么您必须授予对 ls 所在的 /bin/ 的读取权限,并且他们必须能够读取 ls 所链接的 /lib 中的所有库(请参阅ldd /bin/ls
)。
您想要限制他们的访问权限的目的是什么?如果是为了防止他们查看其他用户的文件,那么请确保其他用户的主目录没有允许他们读取的权限。如果原因是您对用户完全不信任,那么首先不要给他们 shell 访问权限。如果您可以限制他们使用 sftp,那么很容易将他们 chroot 到他们的主目录。