chroot의 Bash에서 이상한 키 입력

chroot의 Bash에서 이상한 키 입력

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 wchroot 외부에서는 pdwd이런 일이 발생하지 않습니다 .bash

이 문제를 어떻게 해결할 수 있나요?

내가 도서관 같은 것을 복사하는 것을 잊었나요? 질문 이 있으신가요 ? 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

이 디렉토리는 시스템 로컬 용어 정보 설명에 사용됩니다. 기본적으로 ncurses는 ${HOME}/.terminfo를 먼저 검색한 다음 /etc/terminfo(이 디렉터리), /lib/terminfo, 마지막으로 /usr/share/terminfo를 검색합니다.

비어 있기 때문에 (그러나 많은 사이트에서 일반적인 답변임) 이곳은 /usr/share/terminfo/최근 릴리스에 있는 /lib/terminfo/좋은 장소인 것 같습니다.

따라서 비어 있지 않은 디렉토리를 다음과 같이 chroot 디렉토리에 복사하십시오.

  • /etc/terminfo/
  • /lib/terminfo/
  • /usr/share/terminfo/

관련 정보