进一步阅读

进一步阅读

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

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

Match User op
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no

该脚本中有这一行:

ssh -i /.ssh/id_rsa backup@$externalresource -t "/mnt/storage/backup/run_project.sh '$1' '$2'"

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

Couldn't open /dev/null: Operation not supported

当我尝试在 chroot 中运行 ssh plain 时,也会发生同样的情况

[I have no name!@nas /]$ ssh
Couldn't open /dev/null: Operation not supported

/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

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

我使用创建了 dev/null

mknod dev/null c 2 2

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

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

答案1

我使用创建了 dev/null

mknod dev/null c 2 2

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

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

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

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

进一步阅读

相关内容