Freebsd

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

  • November 30, 2016

我正在嘗試在我的一台 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 返回操作不允許但沒有找到任何幫助。

有人可以解釋如何解決這個問題嗎?

我使用創建了 dev/null

mknod 開發/空 c 2 2

你的知識已經過時了。現在 NAS4Free 是基於 FreeBSD 10 和 11 之類的,事情不再以這種方式工作了。(無論如何,這些設備編號也不是空設備。)閱讀mknod手冊。您仍然可以執行mknod以在實際的磁碟或 RAM 文件系統中創建設備節點,但您創建的節點幾乎完全沒用。如您所見,核心不允許您使用它們打開設備。

這就是為什麼在監獄中——實際的監獄,作業系統附帶的監獄,而不是可以設​​置的簡單 chroot 環境sshd_config——通過在監獄中安裝devfs實例來獲取設備文件。這也是為什麼監獄有旋鈕來控制是否devfs可以掛載以及適用於它的 devfs 規則集。

如果您想/dev/null在更改後的根環境中使用,則必須使用mount_nullfs使實際/dev樹在更改後的根中可見。如果您使用真正的 jail,只需將其配置為在/dev.

如果您確實使用真正的監獄,您當然可以將其設置為sshd 在監獄中執行,偵聽監獄的 IP 地址並以正常方式在監獄 中啟用服務。/etc/rc.conf

進一步閱讀

引用自:https://unix.stackexchange.com/questions/327119