웹 서버에서 특히 SSH 사용자 세션을 특정 디렉토리로 제한하는 몇 가지 이유가 있지만 가장 명백한 이유는 시스템 보안입니다. SSH 사용자를 잠그기 위해 chroot 메커니즘을 사용할 수 있습니다.
유닉스 계열 시스템(예: 리눅스)에서 루트 변경(chroot)은 특정 사용자 작업을 리눅스 시스템의 나머지 부분과 분리하는 수단입니다. 현재 실행 중인 사용자 프로세스와 그 자식(또는 부모) 프로세스(자식(부모) 프로세스)에 대해 새 루트 디렉토리를 사용하여 chroot jail이라고 불리는 새 루트 디렉토리를 사용하여 루트 디렉토리의 표시를 변경합니다.
이 튜토리얼에서는 리눅스에서 SSH 사용자 액세스를 특정 디렉토리로 제한하는 방법을 보여드리겠습니다. 모든 명령을 루트로 실행하고 서버에 일반 사용자로 로그인한 경우 sudo 명령을 사용하십시오.
목차
1. 아래의 mkdir 명령어 을 사용하여 chroot jail을 생성하세요:
1. 다음과 같은 mkdir 명령어를 사용하여 chroot 감옥을 생성하세요:
# mkdir -p /home/test
2. 다음으로, sshd_config 매뉴얼 페이지에 따라 필요한 파일들을 확인하세요. ChrootDirectory
옵션은 인증 후 처토탈을 적용할 경로명을 지정합니다. 이 디렉토리는 사용자 세션을 지원하기 위해 필요한 파일과 디렉토리를 포함해야 합니다.
대화형 세션의 경우 적어도 쉘, 일반적으로 sh
, 그리고 null, zero, stdin, stdout, stderr, tty 장치와 같은 기본 /dev
노드가 필요합니다:
# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

3. 이제 mknod 명령어를 사용하여 /dev
파일들을 다음과 같이 생성하세요. 아래 명령에서 -m
플래그는 파일 사용 권한 비트를 지정하며, c
는 문자 파일을 의미하고 두 숫자는 파일이 가리키는 메이저와 마이너 번호입니다.
# mkdir -p /home/test/dev/ # cd /home/test/dev/ # mknod -m 666 null c 1 3 # mknod -m 666 tty c 5 0 # mknod -m 666 zero c 1 5 # mknod -m 666 random c 1 8

4. 그런 다음, chroot 감옥에 적절한 권한을 설정하세요. chroot 감옥과 그 하위 디렉토리 및 하위 파일은 root 사용자 소유여야 하며, 일반 사용자나 그룹에서 쓰기 가능하게 해서는 안 됩니다:
# chown root:root /home/test # chmod 0755 /home/test # ls -ld /home/test

2단계: SSH Chroot Jail용 대화형 쉘 설정
5. 먼저 bin
디렉토리를 생성한 후 cp 명령어를 사용하여 /bin/bash
파일들을 bin
디렉토리로 복사하세요. 다음과 같습니다:
# mkdir -p /home/test/bin # cp -v /bin/bash /home/test/bin/

6. 이제 공유 libs
에 필요한 bash를 확인하고, 다음과 같이 lib
디렉토리로 복사하세요:
# ldd /bin/bash # mkdir -p /home/test/lib64 # cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/

Step 3: SSH 사용자 생성 및 구성
7. 이제 useradd 명령어를 사용하여 SSH 사용자를 생성하고 보안 비밀번호를 설정하세요:
# useradd tecmint # passwd tecmint
8. chroot jail 일반 구성 디렉토리인 /home/test/etc
를 생성하고, 다음과 같이 업데이트된 계정 파일(/etc/passwd 및 /etc/group)을 이 디렉토리로 복사하세요:
# mkdir /home/test/etc # cp -vf /etc/{passwd,group} /home/test/etc/

/home/test/etc
directory.Step 4: SSH를 Chroot Jail 사용하도록 구성
9. 이제 sshd_config
파일을 열고,
# vi /etc/ssh/sshd_config
파일에 아래 줄을 추가하거나 수정하세요.
#define username to apply chroot jail to Match User tecmint #specify chroot jail ChrootDirectory /home/test

파일을 저장하고 종료한 후 SSHD 서비스를 다시 시작하세요:
# systemctl restart sshd OR # service sshd restart
Step 5: Chroot Jail로 SSH 테스트
10. 이 시점에서 chroot jail 설정이 예상대로 작동하는지 테스트해보십시오:
# ssh [email protected] -bash-4.1$ ls -bash-4.1$ date -bash-4.1$ uname

위의 스크린샷에서 볼 수 있듯이 SSH 사용자는 chroot jail에 갇혀있으며, 외부 명령어 (ls, date, uname 등)을 실행할 수 없습니다.
사용자는 아래와 같이 bash와 그 내장 명령어 (pwd, history, echo 등)만 실행할 수 있습니다:
# ssh [email protected] -bash-4.1$ pwd -bash-4.1$ echo "Tecmint - Fastest Growing Linux Site" -bash-4.1$ history

6단계. SSH 사용자의 홈 디렉토리 생성 및 리눅스 명령어 추가
11. 이전 단계에서 사용자가 루트 디렉토리에 갇혀있음을 알 수 있습니다. SSH 사용자에 대한 홈 디렉토리를 다음과 같이 생성할 수 있습니다(이후 사용자들에 대해서도 동일하게 진행):
# mkdir -p /home/test/home/tecmint # chown -R tecmint:tecmint /home/test/home/tecmint # chmod -R 0700 /home/test/home/tecmint

12. 다음으로, ls, date, mkdir와 같은 몇 가지 사용자 명령어를 bin
디렉토리에 설치하세요:
# cp -v /bin/ls /home/test/bin/ # cp -v /bin/date /home/test/bin/ # cp -v /bin/mkdir /home/test/bin/

13. 다음으로, 위의 명령어들의 공유 라이브러리를 확인하고 chroot jail 라이브러리 디렉토리로 이동하세요:
# ldd /bin/ls # cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/

7단계. Chroot Jail을 사용한 SFTP 테스트
14. sftp를 사용하여 방금 설치한 명령어들이 작동하는지 최종 테스트 해보세요.
/etc/ssh/sshd_config
파일에 아래 줄을 추가하세요:
#Enable sftp to chrooted jail ForceCommand internal-sftp
파일을 저장하고 종료한 후 SSHD 서비스를 다시 시작하세요:
# systemctl restart sshd OR # service sshd restart
15. 이제 SSH를 사용하여 테스트하면 다음과 같은 오류가 발생합니다:
# ssh [email protected]

다음과 같이 SFTP를 사용해보세요:
# sftp [email protected]

지금까지 이 글에서는 리눅스에서 SSH 사용자를 특정 디렉토리(chroot 감금 구역)에 제한하는 방법을 보여드렸습니다. 이 가이드에 대한 여러분의 생각을 아래 댓글 섹션에서 제공해 주세요.
Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/