Bash in chroot 奇怪的鍵動作
我正在嘗試建立一個只有 bash 的 chroot 環境。這是我到目前為止所擁有的:
[root@free]# tree . . ├── bin -> usr/bin/ ├── dev ├── etc │ ├── bash.bash_logout │ ├── bash.bashrc │ ├── inputrc │ └── profile ├── lib -> usr/lib/ ├── lib64 -> usr/lib64/ ├── proc ├── sys └── usr ├── bin │ └── bash ├── lib │ ├── libc.so │ ├── libc.so.6 │ ├── libdl.so │ ├── libdl.so.2 │ ├── libncursesw.so.6 │ ├── libreadline.so │ ├── libreadline.so.7 │ ├── libreadline.so.7.0 │ ├── libtinfo.so │ └── libtinfo.so.6 └── lib64 └── ld-linux-x86-64.so.2 11 directories, 16 files
ldd
列出以下內容bash
:[root@free]# ldd /bin/bash linux-vdso.so.1 (0x00007ffd388a3000) libreadline.so.7 => /usr/lib/libreadline.so.7 (0x00007fa6e0baa000) libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fa6e09a6000) libc.so.6 => /usr/lib/libc.so.6 (0x00007fa6e05ea000) libncursesw.so.6 => /usr/lib/libncursesw.so.6 (0x00007fa6e037d000) /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fa6e10d8000)
進入 chroot 環境已經可以了(
I have no name!
很好,因為我沒有複製 passwd 文件):[root@free jail]# chroot . [I have no name!@jail]#
問題 是,如果我輸入
p
e
backspace
w
d
該行將如下所示:[I have no name!@jail]#pe wd
使用 enter 執行它將執行
pwd
並列印/
箭頭鍵(左和右)也很奇怪,就像列印多個字元但不移動游標
p
d
left
w
導致pdwd
. 這不會發生在bash
chroot 之外。我怎樣才能解決這個問題?
我忘了複製圖書館或其他什麼嗎?有
libreadline
問題嗎(我已經複製了etc/inputrc
)?或者這可能是一個libncursesw
問題?
我查看了一個生成最小 chroot 的腳本,並註意到您缺少該
/usr/share/terminfo/
目錄,該目錄由 libcurses 使用並處理終端命令序列。除了可能需要的其他一些文件(/etc/resolv.conf
等)之外,這就是我想要嘗試的。
閱讀
/etc/terminfo/README
,如http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html所見,幫助我找到了 terminfo 的位置:貓 /etc/terminfo/README
此目錄用於系統本地術語資訊描述。預設情況下,ncurses 將首先搜尋 ${HOME}/.terminfo,然後是 /etc/terminfo(此目錄),然後是 /lib/terminfo,最後是 /usr/share/terminfo。
由於
/usr/share/terminfo/
是空的(但在許多網站上是一個常見的答案),在最近的發行版中,這似乎/lib/terminfo/
是個好位置。因此,將非空目錄複製到您的 chrooted 目錄,如下所示:
- /etc/terminfo/
- /lib/terminfo/
- /usr/share/terminfo/