我正在尝试设置一个仅包含 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
问题?
答案1
我看了一下生成最小 chroot 的脚本并注意到您缺少/usr/share/terminfo/
libcurses 使用的目录并处理终端命令序列。除了可能需要的一些其他文件(/etc/resolv.conf
等)之外,这就是我要尝试的内容。
答案2
阅读/etc/terminfo/README
,如上所示http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html,帮助我找出 terminfo 的位置:
猫 /etc/terminfo/README
该目录用于系统本地 terminfo 描述。默认情况下,ncurses 将首先搜索 ${HOME}/.terminfo,然后是 /etc/terminfo(此目录),然后是 /lib/terminfo,最后是 /usr/share/terminfo。
由于/usr/share/terminfo/
是空的(但在许多网站上都是常见的答案),在最近的发行版上,这似乎/lib/terminfo/
是一个很好的位置。
因此,将非空目录复制到您的 chroot 目录,如下所示:
- /etc/terminfo/
- /lib/terminfo/
- /usr/share/terminfo/