: Telnet사용자들을 자신의 디렉토리에서 벗어나지 못하도록 하고 싶은데 어떻게 해야 하
나요? :
: 상위 디렉토리로 이동하지 못하게 말입니다.
제가 전에 사용했던 방법인데요. 이거라도 아쉬운대로...
그냥 shell 을 chroot 해서 띄웠습니다.* 목적
telnet 혹은 ssh 사용자의 제한. 즉, chroot 된 디렉토리 상위로는 올라갈 수 없도록 함으로써
악의적인 성향을 갖는 사용자의 행동 제약. * 과정
1. 다음의 간단한 소스를 컴파일 하여 실행파일을 만듭니다. 이 소스는 chroot 할 디렉토리를
/crsh 로 가정한 것 입니다. [root@backup /root]# more crsh.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <error.h>
main()
{
uid_t crt_uid;
uid_t eff_uid;
crt_uid = getuid();
eff_uid = geteuid();
chdir("/crsh");
if ( setuid(0) == -1 )
perror("setuid(0) failed");
chroot("/crsh");
if ( setuid(crt_uid) == -1 )
perror("set crt_uid failed");
execl("/bin/bash","bash","-i",(char *)0);
}
2. 1에서 만든 실행 파일을 /bin 등 적당한 위치로 옯겨 놓고, setuid root 를 합니다.
3. chroot 할 디렉토리를 만들고 하위에 다음과 같은 디렉토리 구조를 만듭니다.
/bin, /etc, /lib, /usr, /usr/bin, /usr
4. 일단 shell 을 띄워야 하므로 shell과 shell 을 실행 시키기 위한 공유 라이브러리를 찾아서
적당한 위치에 설치합니다. 예) cp /bin/sh /crsh/bin ;ldd /bin/sh | awk '{print $3}' | xargs -i cp {} /crsh/li
b 5. 마찬가지로 사용자에게 허가할 기본적인 명령어와 공유 라이브러리를 찾아 복사합니
다. 6. chroot 된 shell 을 이용할 사용자를 /etc/passwd 파일에서 home 디렉토리와 기본 shell 을 /bin/
crsh 로 바꿉니다. 7. 나머지 기본적인 환경 설정을 해 줍니다. (.bashrc등 환경파일)
* 결과
로긴을 하여 pwd;id 를 하면 다음과 같은 결과를 볼 수 있습니다.
bash$ pwd;id
/
uid=508 gid=508 groups=508
따라서, 사용자는 실제로 /crsh 가 /로 인식하고 또 상위로는 접근 할 수 없습니다.
단, 이 경우 문제점은 몇몇 명령어가 작동이 안된 다는 것과 (에를 들어 /proc를 필요로 하는
경우) USER가 I have no name! 이 된다는 것입니다.--God save the queen!