从 jail 内关闭主机

从 jail 内关闭主机

我已经在 NAS4FREE 上使用 Finch-Freebsd 创建了一个带有 ssh 的监狱,并添加了一个本地非超级用户通过 ssh 访问该监狱。

我希望能够授予此用户有限的 shell 访问权限,以关闭 jail,进而开始关闭 jail 所在的服务器

我如何授予该用户有限的 shell 命令权限来启动关机命令?

到目前为止,在尝试发起sh /etc/rc.shutdown

我得到以下输出

eval:无法打开/var/run/cron.pid:权限被拒绝停止 sshd。kill:12060:操作不允许停止 lighttpd。kill:12001:操作不允许 eval:无法打开/var/db/mysql/RemandYard.pid:权限被拒绝 pututxline:权限被拒绝终止

答案1

正如卡桑德里所说,你不能通过监狱内部的命令来做到这一点。

但是,您可以做的是创建一个单独的用户(我以后将closer在主机系统上调用该用户)。应该阻止该用户,以便它只能使用 SSH 密钥登录。

您的被监禁用户应该拥有私钥和密钥的密码。

在主机端,授予该closer账户 sudo 权限:

closer   localhost=NOPASSWD:/usr/sbin/shutdown

在主机端,将 SSH 密钥的公共部分放入/home/closer/.ssh/authorized_keys。编辑密钥,使其以

command="sudo /usr/sbin/shutdown",from="1.2.3.4" 

然后是实际的密钥,都在同一行上。(当然,要修复 IP 地址,使其与监狱相匹配。)使文件authorized_key和目录对用户不可写。

当被监禁系统上的用户现在使用该密钥通过 SSH 连接到主机时,它将立即触发关机。用户将无法使用该密钥执行任何其他操作 - 任何时候他们使用它登录时,它只会运行命令。该密钥只能从这个监狱使用,因此,如果他们以某种方式获得密钥,您不必冒险让全世界的人访问您的服务器以关闭您的服务器。

答案2

根据手册页,监狱明确禁止关机命令这里

正常的机器关机命令,例如 halt(8)、reboot(8) 和 shutdown(8),无法在 jail 内成功使用。

另外引用FreeBSD操作系统的设计与实现

在 jail 内运行的进程不得执行允许它们查看或影响其 jail 外运行的任何内容的操作。此限制主要是通过屏蔽 jail 内运行的 root 进程可用的命名系统权限集来实现的。受限权限包括:

  • 获取有关监狱外进程的信息;
  • 改变内核变量;
  • 挂载或卸载文件系统;
  • 修改物理网络接口或配置;以及
  • 重新启动系统。

因此,从设计上来说,您想要做的事情在监狱中根本不可能实现。要关闭监狱及其所在的服务器,您需要在主机系统上拥有实际的特权用户。

相关内容