我刚刚安装了 CentOS,目前正在设置用户。他们的主目录位于该区域内/home/username/
,我想让他们使用 openSSH、SFTP 等时无法进入该区域ls
或超出该区域。cd
我已经阅读了chroot
文档,但似乎无法让它工作。任何想法或帮助都将不胜感激。
答案1
一种解决方案是使用 bash 受限 shell。但是,请确保只允许从该 shell 执行安全命令。例如:如果less
允许,用户可以使用该!
命令退出受限 shell。为避免这种情况,请将LESSSECURE
环境变量设置为 1。
答案2
不允许每个用户读取其他用户文件的原因是有些用户有自己的“config.php”文件,其中包含敏感信息,而有些用户不喜欢别人能够看到他们的内容管理系统的文件结构和源代码,因此,我尝试创建一个系统,让用户可以访问其主目录作为顶级文件夹。即无法“cd /”并查看其他人的文件和系统文件夹。从评论中我猜事情没那么简单。
与问题本身的问题陈述不同,这实际上是一个合理的可解问题。下面是一解决该问题的可能性。
首先,让每个主目录仅供其所有者访问,其他人则无法访问。换句话说,模式 0700。
其次,将用户的 umask 设置为 0077。这意味着默认情况下,文件将在创建时将组和世界权限位设置为零,仅允许所有者访问。
如果特定文件必须由其他进程访问(它是一个 .php 文件,所以可能是 Web 服务器?),请赋予该进程自己的组成员身份,将主目录的组所有权设置为该组,并将模式设置为 0710。如果知道需要访问的子目录或文件的具体名称,则目录上的“执行”位允许访问,但不允许列出目录内容(即在目录中“读取”)。
用户主目录下的任何子目录(如果该子目录应可供同一进程访问)都可以具有相对宽松的世界权限位。(例如,文件 0644 和目录 0755 或 0751。)
如果需要,可以给用户一个“共享”区域,可能位于他们的主目录之外,该区域具有更宽松的权限集。也许对于每个用户,都有 /home/$USER 和 /share/$USER,其中 /share 下的目录具有 0755 权限并由相应用户拥有。可以在用户的主目录中添加指向其“共享”目录的符号链接,并告诉他们其他用户的共享文件位于 /share/$USER 中。如果您要走这条路,您可能希望改用 umask 0022,这将默认文件对非所有者是只读的。确保告知用户他们存储在 /share 下的文件可由系统上的所有用户读取。