我运行了具有数百个主目录的多个系统(自定义网络托管设置,第三方可以控制某些帐户)。
目前,任何用户都可以通过 SSH 登录(或通过脚本)执行“ls /home”并查看服务器上的所有帐户。当然,他们无法利用这些信息做任何事情,“ls /home/user”会失败,但我想知道“ls /home”如何只显示当前用户的文件夹。
我过去曾见过几次漏洞利用尝试(客户端使用不安全的代码/密码错误 - 另一个话题),攻击者在一个帐户中创建一个文件夹,然后创建一个符号链接数组,查看其他主文件夹并尝试猜测敏感文件位置,并希望某个地方的权限较弱。通过隐藏“ls /home”,这会让他们感到沮丧,我认为他们通常不会尝试太多其他技术。
只是一个额外的安全网,理想情况下不需要走 chroot 或 jail 的路。它主要是为了在有人获得访问权限时破坏自动脚本。权限是安全的,因此用户只能在自己的主文件夹中进行读/写访问。
答案1
目前,任何用户都可以通过 SSH 登录(或通过脚本)执行“ls /home”并查看服务器上的所有帐户。当然,他们无法利用这些信息做任何事情,“ls /home/user”会失败,但我想知道“ls /home”如何只显示当前用户的文件夹。
使用 从 /home 删除“读取”权限chmod go-r
。
(但是,请确保保留“执行”权限,因为需要它来让用户自己访问他们的主目录。也就是说,必须rwx --x --x
至少有 /home。)
如果您仍然提供完全交互式 SSH 访问权限,那么这没什么用。以某种方式限制您的用户只能使用 SFTP 和 Git 会更有用。
通过隐藏“ls /home”,这会让他们感到沮丧,我认为他们通常不会尝试太多其他技巧
他们只需读取 /etc/passwd 即可获取用户列表。
我过去曾见过几次漏洞利用尝试(客户端使用不安全的代码/密码错误 - 另一个话题),攻击者在一个帐户中创建一个文件夹,然后创建一个符号链接数组,查看其他主文件夹并尝试猜测敏感文件位置,并希望某个地方的权限较弱。通过隐藏“ls /home”,这会让他们感到沮丧,我认为他们通常不会尝试太多其他技术。
通过不让所有 web 应用程序在同一个“www-data”帐户下运行来解决实际问题 - 如果每个 web 应用程序都有自己的 UID(例如,在该 UID 下有自己的 php-fpm 池),那么您将能够强制网站目录不可公开访问,无论是否通过符号链接。
(我实际上不知道如何使用常规网络服务器来处理静态文件。)
答案2
这是一场艰苦的战斗。一般的解决方案是使用 chroot jails 和/或自定义 shell。不过这样做确实有局限性。
恕我直言,允许 shell 访问会引发大量安全隐患,我想知道您是否低估了 shell 访问的风险。