我正在尝试在我的一台 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
以正常方式。
进一步阅读
mknod
。 FreeBSD 11.0 手册。devfs
。 FreeBSD 11.0 手册。devfs.rules
。 FreeBSD 11.0 手册。- 文档:如何:监狱。 NAS4免费维基。
- 马泰奥·里奥达托。 ”监狱”。 FreeBSD 手册。
- 斯科特·罗伯(2015-03-04)。 FreeBSD 监狱。