chroot: 실패했습니다. 해당 파일이나 디렉터리 파일이 없습니다.

chroot: 실패했습니다. 해당 파일이나 디렉터리 파일이 없습니다.
# chroot /mnt/sys1 /bin/bash
chroot: failed to run command '/bin/bash': No such file or directory

chroot: failed with No such file or directory그러나 파일이 바로 거기에 있기 때문에 이것은 일반적인 문제가 아닙니다 .

/mnt/sys1# dir -l bin/bash
-rwxr-xr-x 1 root root 1234376 2022-03-27 14:40 bin/bash*

/mnt/sys1# dir -l 
lrwxrwxrwx   1 root root     7 2021-05-08 14:27 bin -> usr/bin/
lrwxrwxrwx   1 root root     7 2021-05-08 14:27 lib -> usr/lib/
lrwxrwxrwx   1 root root     9 2021-05-08 14:27 lib32 -> usr/lib32/
lrwxrwxrwx   1 root root     9 2021-05-08 14:27 lib64 -> usr/lib64/
lrwxrwxrwx   1 root root    10 2021-05-08 14:27 libx32 -> usr/libx32/

/mnt/sys1# dir -ld usr/lib*
drwxr-xr-x 78 root root 4096 2023-04-08 23:48 usr/lib/
drwxr-xr-x  2 root root 4096 2023-04-08 18:35 usr/lib32/
drwxr-xr-x  2 root root 4096 2023-04-08 18:35 usr/lib64/
drwxr-xr-x  4 root root 4096 2023-04-08 18:37 usr/libexec/
drwxr-xr-x  2 root root 4096 2023-04-08 18:35 usr/libx32/

/mnt/sys1# dir -l usr/bin/bash
-rwxr-xr-x 1 root root 1234376 2022-03-27 14:40 usr/bin/bash*

/mnt/sys1# file /bin/bash bin/bash
/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=31c321f9f0c1f86a379f7efaaeb75f707998f27f, for GNU/Linux 3.2.0, stripped
bin/bash:  ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=31c321f9f0c1f86a379f7efaaeb75f707998f27f, for GNU/Linux 3.2.0, stripped

/mnt/sys1# cmp /bin/bash bin/bash && echo same
same

누락될 수 있는 종속성과 달리 ldd시작하기 전에 실패합니다.

# strace -o /tmp/strace.log chroot /mnt/sys1 /bin/bash
chroot: failed to run command '/bin/bash': No such file or directory

# cat /tmp/strace.log
. . .
lstat("/mnt", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/mnt/sys1", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chroot("/mnt/sys1")                  = 0
chdir("/")                              = 0
execve("/bin/bash", ["/bin/bash"], 0x7ffee9b47ff8 /* 121 vars */) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8)                 = 8
write(2, "failed to run command '/bin/bash"..., 33) = 33
write(2, ": No such file or directory", 27) = 27
. . .

IE가 존재하지 않는다고 execve불평합니다./bin/bash하지만이것은옳은거기!

어떤 아이디어가 있나요?

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

답변1

chroot루트 사용자로만 실행할 수 있습니다 .

불행하게도 (적어도 데비안에서는) man chroot이에 대한 언급이 없습니다.공식 온라인 문서,

chroot지정된 루트 디렉터리를 사용하여 명령을 실행합니다. 많은 시스템에서는 수퍼유저만 이 작업을 수행할 수 있습니다.

관련 정보