因此,虽然我一直在研究锁定用户并将他们关进监狱的方法。我遇到了一个有趣的问题,但我在任何地方都没有看到答案。
怎样才能拥有监禁 root 账户的权力呢?我目前正在尝试以下操作:
Match user root ChrootDirectory /opt/somedirectory/anotherdirectory ForceCommand internal-sftp
但我在连接时总是断开连接。 - 对于这个用例,因为它是我允许的实验室环境密码认证和允许根用户登录。
据我所知,Chroot 监狱使用超级用户权限来将人们锁定在自己的小环境中。但是有什么东西可以越狱吗?或者至少把他锁定到一个特定的目录,这样他就无法通过 cd 返回?这是一个有趣的案例,我想探索和了解更多!感谢您抽出时间来回答!
TL;DR:如何将 root sftp 到特定目录。
答案1
你不能。
红帽有一篇关于此的文章(链接在这里) - 如果您正在考虑使用chroots
,我建议您阅读整篇文章。以下是文章的摘录,概述了为什么这行不通:
chroot 和 root 用户
chroot() 系统调用仅适用于 root 用户。非 root 用户无法执行 chroot() 调用。这是一件好事,因为如果您能够调用 chroot(),您就可以摆脱它。这不是 chroot() 中的错误,这只是它的工作原理。即使您想将此视为一个错误,您也必须记住 root 通常有权访问系统和所有资源。没有什么可以阻止 root 直接修改进程内存以将 chroot() 位置更改回“/”。这里要考虑的重要一点是,根据设计,chroot() 不会停止 root。这一点在本文后面将很重要。
如果这是您所说的实验室环境,只需添加一个具有简单密码的普通用户(甚至是用于无密码登录的 SSH 密钥)
答案2
事实证明,只要绝对路径上的每个目录(例如 /var/log/www)必须可由 root 读取,一切都可以正确管理。在 SSHD_Config 中,我们需要添加以下行:
Subsystem sftp internal-sftp
Match user Root
ChrootDirectory /var/log/www
ForceCommand internal-sftp
这将禁止 root 登录 ssh,只允许他连接到给定 ChrootDirectory(即监狱)中的 sftp 系统。希望有一天这可以帮助某人!