System_Security

[Security]chroot

Galahaad 2023. 1. 27. 17:26

chroot(change root)

chroot는 '어느 지정된 디렉토리'를 루트(/) 디렉토리로 만들어주는 명령어로,

서버 시스템에 FTP, NFS .. 등의 서비스를 설정한 뒤 클라이언트들이 외부로 공개되어 있는

FTP 서버의 오픈 디렉토리로 접속하여 cd, ls 등의 커맨드를 사용하여 오픈된 디렉토리의

상위 디렉토리로 이동 및 탐색하는 것을 방지하기 위해 사용하는 중요한 설정이다.

 

요악하면 '어느 지정된 디렉토리'를 가상의 최상위(/) 디렉토리로 만들어서

원격지 시스템의 다른 경로로 유입 및 탐색을 방지해주는 역할을 하는 보안 설정이다.

 

* 해당 실습에서 사용된 네트워크 대역 : 192.168.100.0/24

** 해당 실습에서 사용된 가상 머신 : CentOS(.150), Ubuntu(.130)

*** 실습 편의를 위해 FTP 접속을 위한 유저 및 그룹을 새롭게 생성하여 진행 하였음

 

● 임의로 생성한 ftp 디렉토리 chroot 설정

sftp [FTP ServerUser]@[FTP Server IP]

 

sftp> [command]

 

sftp [FTP Server User]@[FTP Server IP OR Domain_name]
# FTP 서버로의 원격 접속을 요청
# SFTP는 FTP와는 다르게 SSH(TLS/SSL)와 동일한 방식의 인증절차를 거치게 된다.

--- FTP 접속 후 ---
pwd, ls, cd ...
# 해당하는 명령어들을 활용하여 원격지의 공유 디렉토리 뿐만 아니라
# 그 외의 디렉토리에 대한 탐색, pull, get이 가능한 부분을 확인할 수 있다.

--- 원격지에 접속한 상태 ---
!ls, !pwd, !mkdir ...
# 일반적으로 사용되는 명령어 앞에 '!'을 추가하여 사용 시
# 원격지가 아닌 나(Local) 시스템에 대한 명령어를 수행할 수 있다.

 

useradd [UserName] -d /ftp -s /sbin/nologin -> passwd [UserName]

FTP 서버 접속을 위한 새로운 사용자 'tester'의 홈 디렉토리(/ftp)로그인 쉘(/sbin/nologin) 설정을 지정하여 유저를 새롭게 생성

 

 

새로운 그룹 생성 및 유저를 해당 그룹에 추가

groupadd [GroupName]
usermod -G [GroupName] -a [UserName]
# 새로운 그룹을 추가한 뒤 새롭게 생성된 사용자를 해당 그룹에 추가한다.

groups [UserName]
# 해당 사용자가 소속되어 있는 그룹을 확인할 수 있는 명령어

 

 

cp -arp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

[/etc/ssh/sshd_config]
131 # override default of no subsystems
132 # Subsystem	sftp /usr/libexec/openssh/sftp-server <- 기존설정 주석처리
133 Subsystem	sftp internal-sftp
134 Match Group	[GroupName]
135 ChrootDirectory /secure/%u
136 ForceCommand internal-sftp

# [GroupName]에 소속 되어있는 [UserName] 사용자가 sftp로 접속했을 때
# /secure 디렉토리가 최상위(/) 디렉토리가 되어 상위 디렉토리로 이동을 불가하게 설정해줌

mkdir -p /secure/[UserName]/ftp
chown [UserName]:[GroupName]
ls -l /secure/[UserName]/ftp
# FTP 작업을 진행할 디렉토리를 새롭게 생성해준 뒤, 일반유저 작업이 가능하게끔 소유권을 수정
# 마지막으로 해당 디렉토리의 설정 값을 보기 위해 ls -l 명령어로 확인

systemctl restart sshd OR systemctl restart ssh
# 새롭게 설정된 파일들의 적용을 위해 서비스 재시작

** sshd_config 파일 수정을 위해 기본 설정 값이 저장되어 있는 파일은 사전에 백업

sftp [FTP ServerUser]@[FTP Server IP]

FTP 서버에 접속하여 'cd / && ls' 명령어를 실행했을 때, 

chroot 설정이 안된 상태와는 달리 '/secure' 디렉토리가 최상위 디렉토리로 설정되어

일반적으로 '/' 디렉토리에서 볼 수 있는 파일들이 보이지 않는 것을 확인

 

'/ftp' 상위의 '/secure' 디렉토리에 새로운 파일 및 디렉토리 생성을 실행하여도

'Permission Denied'가 발생되는 것을 볼 수 있다.

 

다시 '/ftp' 디렉토리로 진입하여 디렉토리 생성을 완료한 후

 

 

cd /secure/tester/ftp

FTP 서버 로컬에 접속하여 해당 디렉토리 확인 시 문제없이 파일이 생성되어 있는 것을 확인할 수 있다.