/bin/sh 또는 /usr/bin/cowsay와 같은 항목을 참조할 때 대신 ~/fake/bin/sh를 실행하도록 스크립트를 실행할 수 있는 방법이 있습니까?
이 효과는 실행되는 다른 스크립트와 실행되는 스크립트에 대해 계속 유효해야 합니다.
답변1
스크립트가 협조적이라면, 즉 의도적으로 당신과 싸우려는 것이 아니라면 다음을 사용할 수 있습니다.chroot디렉토리 트리의 하위 트리에서 실행하십시오. chroot에서 실행되는 프로그램은 자신이 있는 트리 외부의 파일에 직접 액세스할 수 없지만 프로세스에 신호 보내기, 소켓을 통한 통신, 네트워크 액세스 등을 포함하여 다른 방식으로 외부 세계와 상호 작용할 수 있습니다.
chroot ~/fake myscript
하위 트리에는 ~/fake
스크립트에 필요한 모든 것 ~/fake/bin/sh
, ~/fake/lib/ld-linux.so.2
및 /또는 Linux에서 작업하기 위한 ~/fake/lib/libc.so.6
시스템의 동적 로더 및 표준 라이브러리 등이 포함되어야 합니다. 기호 링크 순회 자체가 chroot 제약 조건을 따르기 때문에 기호 링크가 아닌 실제 파일이어야 합니다./proc
ps
바인드 마운트필요한 모든 파일을 복사하지 않고도 chroot 트리를 구축하는 데 도움이 될 수 있습니다.
Chroot에는 루트 권한이 필요합니다. 실행하려는 모든 프로그램이 동적으로 링크되어 있는 경우 다음을 사용할 수 있습니다.fakechroot
보다 가벼운 방법으로 chroot를 사용하십시오. Fakechroot는 시스템 호출을 가로채서 작동합니다.라이브러리 사전 로드이므로 권한이 필요하지 않습니다. fakechroot를 사용하면 일반적으로 chroot 외부를 가리키는 심볼릭 링크를 따르므로 심볼릭 링크 포리스트를 구축하여 하위 트리에서 콘텐츠를 사용할 수 있습니다.
스크립트가 협조하지 않으면 적절한 격리 도구가 필요합니다.컨테이너또는 가상 머신.
답변2
심볼릭 링크를 사용해 보세요:
sudo ln -sf ~/fake/bin/sh /usr/bin/cowsay
참고: -f
(강제)로 인해 원본 파일이 /usr/bin/cowsay
심볼릭 링크로 대체될 수 있습니다.
실행 파일의 명령문 ~/fake/bin/sh
이나 실행 파일에 의해 호출된 외부 프로그램이 기호 링크 자체에서 작동하는지 아니면 기호 링크가 가리키는 파일에서 작동하는지 여부는 프로그램마다, 명령문마다 다릅니다.