리눅스 서버에서 SFTP(Secure FTP)를 설정하면 기본적으로 사용자들은 자신의 홈 디렉토리(~
)뿐만 아니라 상위 디렉토리(/home
, /etc
등)로 이동하며 시스템의 여러 파일을 구경할 수 있습니다.
이는 웹 호스팅이나 파일 공유 목적의 서버 운영 시 심각한 보안 취약점이 될 수 있습니다.
이번 포스팅에서는 SSH의 chroot
기능을 이용하여 사용자의 활동 영역을 자신의 홈 디렉토리 안으로만 제한하는 방법을 소개합니다. 이를 통해 사용자는 마치 자신의 홈 디렉토리가 서버의 최상위 루트 디렉토리인 것처럼 느끼게 되어, 시스템의 다른 영역으로 접근하는 것이 원천적으로 차단됩니다.
chroot
는 "Change Root"의 줄임말로, 특정 사용자에 대해 루트 디렉토리(/
)를 다른 경로로 변경하는 기능입니다.
예를 들어 siteadmin
사용자의 홈 디렉토리를 /home/siteadmin
으로 chroot 설정하면, 이 사용자가 SFTP로 접속했을 때 시스템은 /home/siteadmin
을 최상위 디렉토리(/
)로 인식시킵니다. 따라서 사용자가 상위 폴더로 이동(cd ..
)을 시도해도 더 이상 올라갈 곳이 없는, 완벽하게 격리된 환경이 만들어집니다.
이는 불필요한 시스템 정보 노출을 막고, 사용자의 실수나 악의적인 행동으로부터 서버를 안전하게 보호하는 필수적인 보안 설정입니다.
가장 먼저, chroot 정책을 적용하기 위한 그룹을 만들고 SSH 서버 설정을 변경하는 최초 1회 작업이 필요합니다.
chroot를 적용할 사용자들을 관리할 전용 그룹(sftp_users
)을 생성합니다.
sudo groupadd sftp_users
SFTP 접속을 처리하는 SSH 서버의 설정 파일을 수정합니다.
sudo vi /etc/ssh/sshd_config
파일의 가장 마지막 줄에 아래 내용을 추가합니다.
# SFTP chroot 설정을 위한 그룹 매칭
Match Group sftp_users
# chroot 디렉토리를 사용자의 홈 디렉토리로 지정
ChrootDirectory %h
# SFTP만 강제로 실행하고 쉘 접속은 차단
ForceCommand internal-sftp
# 기타 보안 설정
AllowTcpForwarding no
X11Forwarding no
수정한 설정을 시스템에 반영하기 위해 SSH 서비스를 재시작합니다.
sudo systemctl restart sshd
이것으로 모든 사용자를 맞이할 준비가 끝났습니다.
초기 설정이 완료된 후, 새로운 SFTP 사용자가 필요할 때마다 아래 절차를 반복하면 됩니다. 여기서는 siteadmin
계정을 추가하는 예시입니다.
홈 디렉토리를 만들고(-m
), sftp_users
그룹에 소속시키며(-G
), 쉘 접속을 막은(-s
) 상태로 새 계정을 생성합니다.
sudo useradd -m -G sftp_users -s /sbin/nologin siteadmin
생성한 계정의 비밀번호를 설정합니다.
sudo passwd siteadmin
chroot의 엄격한 보안 규칙을 만족시키기 위해 디렉토리 소유권을 조정합니다. 규칙은 **"chroot 대상 디렉토리의 소유자는 반드시 root여야 한다"**는 것입니다.
홈 디렉토리(~/
)의 소유자를 root
로 변경합니다.
sudo chown root:root /home/siteadmin
사용자가 실제 파일을 업로드할 하위 디렉토리(예: public_html
)를 생성합니다.
sudo mkdir /home/siteadmin/public_html
생성한 public_html
디렉토리의 소유자를 다시 원래 사용자인 siteadmin
으로 지정합니다.
sudo chown siteadmin:siteadmin /home/siteadmin/public_html
(권장) 권한 확인 아래 명령어로 설정이 올바르게 되었는지 확인할 수 있습니다.
ls -ld /home/siteadmin /home/siteadmin/public_html
결과는 아래와 같이 siteadmin
은 root
가, public_html
은 siteadmin
이 소유해야 합니다.
drwxr-xr-x. 3 root root 4096 6월 10 17:10 /home/siteadmin
drwxr-xr-x. 2 siteadmin siteadmin 4096 6월 10 17:10 /home/siteadmin/public_html
이제 끝입니다! SSH 서비스를 재시작할 필요 없이 바로 SFTP 클라이언트로 siteadmin
계정 접속을 테스트해 보세요. 사용자는 완벽하게 자신의 홈 디렉토리 안에 격리되어 있을 것입니다.