2012-07-06 3 views
1

chroot jail 내부에서 쉘 명령을 실행하는 데 문제가 있습니다. 다음은 예입니다 :chroot jail에서 쉘 명령을 실행하는 방법

#include <stdio.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 

int main() 
{ 
    if (geteuid() == 0) // check root privileges 
    { 
     chroot("/bin"); 
     chdir("/"); 

     execl("/ls", "ls", "-l", (char *) NULL); // "/ls" should be equivalent to "/bin/ls" 
     perror(strerror(errno)); 
    } 

    else 
     printf("Permission denied\n"); 

    return 0; 
} 

문제는 exec입니다. errno에 따르면 오류는 "No such file or directory"입니다. exec ("/ bin/ls", ...)를 사용하면 같은 오류가 나타납니다.

"ls"는 chroot jail 때문에 필요한 공유 라이브러리를 사용할 수 없다고 생각합니다.

이 문제를 해결하기위한 제안이 있으십니까?

+0

OpenBSD 랩톱에서 잘 작동합니다. "ldd/bin/ls"를 실행하면 정적 실행 파일이라고 알려줍니다. 라이브러리가 필요하다는 것을 알게되면 chroot에서 찾을 수있는 방법을 만들어야합니다. – tbert

+0

/usr/bin에 있고'/ bin '에 대한 심볼릭 링크 만있는'ls'처럼 간단 할 수 있습니다. ataylor가 아래에서 말했듯이, chroot는/lib 디렉토리,/usr/lib 디렉토리,/dev에있는 일부 파일들과 함께 실제 루트 환경을 원합니다. –

답변

1

아마도 공유 라이브러리에 액세스 할 수 없다는 것에 대해 옳았습니다. chroot jail을 설정하는 것은 일반적으로 /bin, /usr/bin, /lib/usr/lib의 부분을 병렬 디렉토리 구조에 복사하는 것을 포함합니다.

더 간단한 대안은 정적으로 링크 된 실행 파일 만 사용하는 것입니다. 많은 리눅스 시스템에는 ls을 비롯한 많은 Unix 명령의 기본 기능을 제공하는 정적으로 링크 된 실행 파일 busybox이 있습니다. busybox ls -l처럼 호출하면 일반 출력 ls과 비슷한 출력을 chroot jail 외부의 추가 공유 라이브러리에 액세스 할 필요없이 제공합니다.

관련 문제