由于不支持 /dev/null 操作,chrooted jail 中的 ssh 不起作用

use*_*530 4 freebsd chroot jails devices

我正在尝试在我的一台 NAS 服务器上设置 ssh-chroot jail。该系统运行在 NAS4Free(基于 nanobsd)上。用户应该只能运行一个命令,这是一个 bash 脚本,它打开 ssh 到另一台服务器并在那里执行一个命令。

要设置 chroot,我的 sshd 配置中有这个。

Match User op
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)

该脚本中有这一行:

ssh -i /.ssh/id_rsa backup@$externalresource -t "/mnt/storage/backup/run_project.sh '$1' '$2'"
Run Code Online (Sandbox Code Playgroud)

我可以使用 ssh 登录到该 chroot,但是当我运行脚本时,尝试在其中执行 ssh 命令时会出现以下错误。

Couldn't open /dev/null: Operation not supported
Run Code Online (Sandbox Code Playgroud)

同样的情况,当我尝试在 chroot 中运行 ssh plain

[I have no name!@nas /]$ ssh
Couldn't open /dev/null: Operation not supported
Run Code Online (Sandbox Code Playgroud)

/dev/null 看起来像这样:

$ ls -la dev/
total 8
drwx--x--x  2 root  staff    512 Nov 29 18:16 .
drwxr-xr-x  8 root  staff    512 Nov 29 18:06 ..
crw-rw-rw-  1 root  staff   0x18 Nov 29 18:16 null
Run Code Online (Sandbox Code Playgroud)

如果没有 666 权限,我当然会收到 /dev/null 权限被拒绝错误。

我创建了 dev/null 使用

mknod dev/null c 2 2
Run Code Online (Sandbox Code Playgroud)

我试图找到一个解释为什么 /dev/null 返回操作不被允许,但没有找到任何有帮助的东西。

有人可以解释一下如何解决这个问题吗?

Jde*_*eBP 6

我创建了 dev/null 使用

mknod 开发/空 c 2 2

你的知识已经过时了。事情不再以这种方式工作,现在 NAS4Free 基于 FreeBSD 10 和 11 之类的。(无论如何,这些设备编号也不是空设备。)阅读mknod手册。您仍然可以运行mknod以在实际磁盘或 RAM 文件系统中创建设备节点,但您创建的节点几乎完全没有用。如您所见,内核不允许您使用它们打开设备。

这就是为什么在监狱中——实际的监狱,操作系统附带的监狱,而不是可以设置的简单的 chroot 环境sshd_config——通过devfs在监狱中安装一个实例来获取设备文件。这也是为什么 jails 有旋钮来控制是否devfs可以挂载以及什么 devfs 规则集适用于它。

如果您想/dev/null在更改后的根环境中使用mount_nullfs,则必须使用使实际/dev树在更改后的根中可见。如果您使用真正的监狱,只需将其配置为在/dev.

如果您确实使用了真正的 jail,当然可以将其设置为sshd 在 jail 内运行,监听 jail 的 IP 地址并以正常方式在 jail 中 启用作为服务/etc/rc.conf

进一步阅读