/bin 綁定到另一個位置時 telnet 拒絕連接
我正在研究路由器,它的韌體按預期是只讀的。他們使用的busybox是原始工具的精簡版,因此我無法使用所有必需的工具。這個路由器還有一個 USB 埠,所以我認為將 /bin 綁定到 USB 棒會給我想要的東西。於是使用以下命令進行綁定,
cp -r /bin /mnt/<device-id>/ mount --rbind /mnt/<device-id>/bin /bin
然後我用它的 repo 中的完整版本替換了busybox。我為 misp 使用了最新的預建構二進製文件。
好吧,正如我預期的那樣,busybox 現在擁有所有組件,但是我無法從另一台設備遠端登錄,如果我失去了我擁有的遠端登錄連接,我將無法重新連接並獲取
$ telnet 192.168.1.1 login: escape char: Connection closed by foreign host.
那麼busybox也有無法解綁的問題。當我嘗試解除安裝它時,它很忙。這是意料之中的,因為我基本上將它用作 bash。
$ umount /bin umount: /bin: device is busy.
我沒有線索。我希望有一個人可以幫助我。
我已經弄清楚我遇到的問題。首先,正如我提到的,我無法使用 telnet 重新連接。這似乎是因為有一個父程序控制busybox和telnet命令。當我嘗試在前台創建另一個 telnetd 程序時,出現以下錯誤。
$ telnetd -F telnetd: bind: Address already in use
我所做的是首先檢查使用埠 23 的程序,該埠是 telnetd 的預設埠:
$ netstat -lntup | grep 23 tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 2697/agent tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 362/pc
因此將文件夾綁定
/bin
到另一個位置會混淆該pc
過程。因此,它無法創建 telnetd 會話並佔用埠 23。因為此過程僅在啟動時對大多數配置負責。只有當韌體更新過程開始時,我才看到這個程序 ID 被殺死。儘管如此,我還是終止了該程序並重新啟動了 telnetd。$ kill -9 362 $ telnetd
現在它可以工作了,但它是一個醜陋的更新檔,所以我使用了不同的方法。當然可以在另一個埠上執行 telnetd,但我決定根本不綁定 /bin 文件夾。
我決定在路徑之前添加安裝位置。所以我執行的每個busybox命令都在安裝位置找到。因為第一次在 PATH 中找到將執行的命令。所以,在路徑中有多個busybox並沒有什麼壞處。假設我有新的busybox
/mnt/<device-id>/bin
:$ for i in `./busybox --list`; do ln -s busybox $i; done $ PATH=/mnt/<device-id>/bin:$PATH
現在所有新的busybox 命令都按預期工作。不再需要綁定,不再殺死系統程序。
作為旁注,我確實在我的問題文章中提到,我無法
umount
/bin
文件夾。顯然原因和我想的完全一樣。使用另一個busybox 實例實際上解除了/bin
文件夾的綁定。