>> Edit article
이름
제목
패스워드
: 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/lib 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!
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved