개발노트
목록

리눅스 SFTP 보안 강화: 사용자를 홈 디렉토리에 가두는 chroot 설정 완벽 가이드

눅스SFTP chroot설정 SFTP보안 사용자권한 sshd_config
Server 2025.06.10 17 회 읽음
Server 3일 전 17



리눅스 서버에서 SFTP(Secure FTP)를 설정하면 기본적으로 사용자들은 자신의 홈 디렉토리(~)뿐만 아니라 상위 디렉토리(/home, /etc 등)로 이동하며 시스템의 여러 파일을 구경할 수 있습니다.

이는 웹 호스팅이나 파일 공유 목적의 서버 운영 시 심각한 보안 취약점이 될 수 있습니다.

이번 포스팅에서는 SSH의 chroot 기능을 이용하여 사용자의 활동 영역을 자신의 홈 디렉토리 안으로만 제한하는 방법을 소개합니다. 이를 통해 사용자는 마치 자신의 홈 디렉토리가 서버의 최상위 루트 디렉토리인 것처럼 느끼게 되어, 시스템의 다른 영역으로 접근하는 것이 원천적으로 차단됩니다.



1. chroot 설정이란? (상위 폴더 접속 차단 원리)

chroot는 "Change Root"의 줄임말로, 특정 사용자에 대해 루트 디렉토리(/)를 다른 경로로 변경하는 기능입니다.

예를 들어 siteadmin 사용자의 홈 디렉토리를 /home/siteadmin으로 chroot 설정하면, 이 사용자가 SFTP로 접속했을 때 시스템은 /home/siteadmin을 최상위 디렉토리(/)로 인식시킵니다. 따라서 사용자가 상위 폴더로 이동(cd ..)을 시도해도 더 이상 올라갈 곳이 없는, 완벽하게 격리된 환경이 만들어집니다.

이는 불필요한 시스템 정보 노출을 막고, 사용자의 실수나 악의적인 행동으로부터 서버를 안전하게 보호하는 필수적인 보안 설정입니다.



2. 초기 설정: SFTP chroot 환경 구축하기

가장 먼저, chroot 정책을 적용하기 위한 그룹을 만들고 SSH 서버 설정을 변경하는 최초 1회 작업이 필요합니다.


1단계: SFTP 전용 그룹 생성

chroot를 적용할 사용자들을 관리할 전용 그룹(sftp_users)을 생성합니다.

sudo groupadd sftp_users


2단계: SSH 서버 설정 파일 수정

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


3단계: SSH 서비스 재시작

수정한 설정을 시스템에 반영하기 위해 SSH 서비스를 재시작합니다.

sudo systemctl restart sshd

이것으로 모든 사용자를 맞이할 준비가 끝났습니다.



3. 계정 추가: chroot 적용된 새 사용자 생성하기

초기 설정이 완료된 후, 새로운 SFTP 사용자가 필요할 때마다 아래 절차를 반복하면 됩니다. 여기서는 siteadmin 계정을 추가하는 예시입니다.


1단계: 계정 생성

홈 디렉토리를 만들고(-m), sftp_users 그룹에 소속시키며(-G), 쉘 접속을 막은(-s) 상태로 새 계정을 생성합니다.

sudo useradd -m -G sftp_users -s /sbin/nologin siteadmin


2단계: 비밀번호 설정

생성한 계정의 비밀번호를 설정합니다.

sudo passwd siteadmin


3단계: 홈 디렉토리 구조 및 권한 설정 (가장 중요!)

chroot의 엄격한 보안 규칙을 만족시키기 위해 디렉토리 소유권을 조정합니다. 규칙은 **"chroot 대상 디렉토리의 소유자는 반드시 root여야 한다"**는 것입니다.

  1. 홈 디렉토리(~/)의 소유자를 root로 변경합니다.

    sudo chown root:root /home/siteadmin
    
  2. 사용자가 실제 파일을 업로드할 하위 디렉토리(예: public_html)를 생성합니다.

    sudo mkdir /home/siteadmin/public_html
    
  3. 생성한 public_html 디렉토리의 소유자를 다시 원래 사용자인 siteadmin으로 지정합니다.

    sudo chown siteadmin:siteadmin /home/siteadmin/public_html
    
  4. (권장) 권한 확인 아래 명령어로 설정이 올바르게 되었는지 확인할 수 있습니다.

    ls -ld /home/siteadmin /home/siteadmin/public_html
    

    결과는 아래와 같이 siteadminroot가, public_htmlsiteadmin이 소유해야 합니다.

    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 계정 접속을 테스트해 보세요. 사용자는 완벽하게 자신의 홈 디렉토리 안에 격리되어 있을 것입니다.

목록