을 사용해야합니다 chroot
. 이 chroot
명령은 모든 하위 프로세스가 보는 루트 디렉토리를 변경합니다. 작동 방식을 보여주는 예를 들어 보겠습니다.
이것은 그 자리에 쓰여졌습니다. 나는 현재 유닉스 머신 앞에 있지 않다. 이 예에서,라는 디렉토리 거기에 dir
세 개의 파일 : a
, b
, c
,와 ls
. 처음 세 개는 일반 파일입니다. chroot에있는 동안 파일을 나열 할 수 있도록 ls
실제 ls
바이너리에 대한 하드 링크 입니다.
에 chroot
들어가 겠습니다 dir
. (아마도 루트 디렉토리의 일부 디렉토리를 잊어 버렸을 것입니다.)
쉘 출력 형식의 설정은 다음과 같습니다.
$ pwd
/home/alex/test
$ l
dir
$ ls dir
a b c ls
$ ./ls dir # does the same thing
a b c ls
$ ls /
bin boot dev etc home mnt media proc sbin sys usr var
이제에 chroot
들어가 겠습니다 dir
. /bin/bash
처리하는 것을 인수이 선택하는 새로운 루트 디렉토리에 실행해야합니다. 기본값은 /bin/sh
입니다.
$ chroot /bin/bash dir
$ # this prompt is now from a subprocess running in the new root directory
$ PATH=/ ls
a b c ls
$ pwd
/
이제 우리는 chroot
:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
이것이 chroot
명령의 작동 방식을 보여주기를 바랍니다 . 기본적으로 문제를 해결하기 위해해야 할 일은 chroot
로그인 할 때마다 해당 사용자로 명령 을 실행하는 것입니다. 아마도 시작 스크립트에 넣었습니까?
파일에 대한 하드 링크 chroot
는 다른 방법으로 파일에 액세스 할 수없는 경우에도 내부에서 계속 작동 합니다 (하드 링크가 경로가 아니라 inode를 가리 키기 때문에 작동합니다). 따라서 사용자가 mysql
명령 에 액세스 할 수 있도록하려면 다음을 실행하십시오.
ln /usr/bin/mysql /path/to/chroot/target