브라우저 쉘이 있습니다벨트PHP에서 쉘 명령을 실행하고 이를 브라우저로 반환하는 중입니다. 방금 ls
변경된 루트의 루트 디렉터리에서 실행하려는 chroot 명령을 발견했습니다. 실제로 bash -c "ls /"
이것을 실행해야 합니다. sudo를 사용하면 작동하지 않습니다):
sudo chroot ~/projects/jcubic/leash ls
하지만 오류가 발생했습니다.
chroot: failed to run command ‘ls’: No such file or directory
이 명령을 올바르게 사용하고 있습니까? 다른 루트 디렉토리에서 ls를 실행할 수 있습니까?
sudo 없이 chroot를 실행하려고 하면 다음 오류가 발생합니다.
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
답변1
chroot: failed to run command ‘ls’: No such file or directory
chroot에서 명령을 실행하려면 chroot에서 프로그램을 사용할 수 있도록 해야 합니다( /
파일 시스템에 설치된 프로그램을 사용할 수 없기 때문입니다).
가장 쉬운 방법은 /usr/bin/ls
에서 로 복사 하는 것입니다 /home/kuba/projects/jcubic/leash/usr/bin/
(종속 공유 라이브러리도 필요합니다) ldd /usr/bin/ls
.
답변2
ls
다른 루트 디렉터리에서 실행할 수 있지만 ls
명령과 해당 명령이 종속된 모든 파일은 해당 루트 디렉터리에 있어야 합니다. 명령 을 시작한 ls
다음 프로세스 내에서 루트를 변경할 수 없습니다. ls
해당 기능이 없습니다.
chroot의 전체 목적은 파일의 가시성을 특정 디렉토리 아래의 파일로 제한하는 것입니다. 명령을 실행하면 자체 프로세스의 루트 디렉터리가 변경되고(루트 디렉터리 변경은 이 작업을 수행하는 프로세스와 이후에 실행되는 모든 프로세스에만 영향을 미침) 검색 경로의 디렉터리에서 호출된 실행 파일을 실행하려고 시도 chroot ~/projects/jcubic/leash ls
합니다 . 이것이 이제 루트 디렉터리이므로 실행 파일은 .chroot
ls
~/projects/jcubic/leash
~/projects/jcubic/leash/bin
chroot에 일반 시스템을 두고 일반 명령을 사용하려면 하나 설치해야 합니다. 다음과 같은 도구부팅 방지 프로그램(Debian 시스템 설치) 또는 Docker(Chrooted 및 제한된 환경 설정)와 같은 구성 도구가 도움이 될 수 있습니다.
명령 만 필요한 경우 에도 ls
여러 ls
. 동적으로 링크된 프로그램이기 때문에 동적 로더와 이것이 의존하는 모든 동적 라이브러리가 필요합니다. 필수 동적 라이브러리를 나열하려면 실행하세요 . 예를 들어:ls
ls
ls
ldd /bin/ls
mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot . ls
또는 더 간단한 탐색 방법은 정적으로 연결된 바이너리를 얻는 것입니다.바쁜 상자(Debian 및 그 파생 제품에서 패키지로 사용 가능 busybox-static
)
cp /bin/busybox .
chroot . ./busybox ls