Linux

Bash in chroot 奇怪的鍵動作

  • December 15, 2020

我正在嘗試建立一個只有 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. 這不會發生在bashchroot 之外。

我怎樣才能解決這個問題?

我忘了複製圖書館或其他什麼嗎?有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/

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