[Linux] CentOS SFTP 서버 설정하기 - chroot로 디렉토리 제한 및 SSH와 포트 분리까지

SFTP는 보안 프로토콜을 사용하는 FTP서버이며, 원격 터미널 접속 프로토콜인 SSH와 동일하게 SSH 데몬하에서 동작한다.

여기서는

1) SFTP 접속을 위한 User 생성 및 접속 테스트

2) SSH 데몬 내 SFTP 서버용 포트 추가

3) SSH(22) 과 SFTP 서버용 포트 분리

4) Chroot를 활용한 홈 디렉토리 이동 제한

를 정리할 예정이다.

 

해당 문서를 정리에는 아래 Zetawiki 사이트가 큰 도움이 되었다.

https://zetawiki.com/wiki/SFTP%EB%A7%8C_%EB%90%98%EB%8A%94_%EA%B3%84%EC%A0%95_%EC%83%9D%EC%84%B1

 

1) SFTP 접속을 위한 User 생성 및 접속 테스트

 

  1. User생성

    SFTP용 User 생성 시 shell 관련 option에서 /sbin/nologin 을 설정하여

    쉘 권한은 제외하고 SFTP 및 FTP 접속 권한만 제공한다. 

    여기서 user는 test 라는 이름으로 진행한다.

    이후 passwd 명령어로 해당 유저에 패스워드를 할당한다.

     

  2. SSH 및 SFTP 접속 테스트

    1. (SSH)앞단에 Shell 관련 설정을 /sbin/nologin으로 지정했기 때문에 SSH 접속 시 아래와 같은 메시지가 발생한다.

    2. (SFTP) sftp 명령어(sftp test@localhost)를 통해 아래와 같이 SFTP 접속이 가능하다.

      현재는 chroot 설정이 되어 있지 않아, test 계정임에도 불구하고 외부 디렉토리 이동이 자유롭게 가능하다.

      이는 보안정책상 지양해야하며 chroot를 통해 디렉토리 이동에 제한 설정이 필요하다.

       

2) SSH 데몬 내 SFTP 서버용 포트 추가

SFTP 서버는 SSH 데몬을 통해 내 실행되기 때문에 Default로 SSH와 동일하게 22번 포트를 사용하여 서비스 된다.

SFTP 포트는 /etc/ssh/sshd_config 설정 변경을 통해 분리 가능하다.

 

여기서는 Server2(192.168.124.200)를 Client로 7777라는 Port를 SFTP로 사용예정이다.

  1. sshd_config 설정

    SFTP 서버를 위한 추가 포트 설정은 sshd_config 내 Port 값 추가를 통해 지원 가능하다.

Port 

Specifies the port number that sshd(8) listens on. The default is 22. Multiple options of this type are permitted.

위와 같이 설정 후 systemctl restart sshd 로 데몬을 재기동하면 아래와 같이 7777 포트로 SSH 접속이 가능하다.

 

3) SSH(22) 과 SFTP 서버용 포트 분리

현재 SSH 및 SFTP 데몬은 22 및 7777을 통해 제공되고 있다.

외부 클라이언트에 SFTP서버를 제공하며 방화벽 정책을 허용해줄 시 7777 그대로를 Open하면 해당 포트를 통한 외부의 터미널 접속이 가능해진다.

보안상의 위험을 사전 방지하고자 7777 포트는 SFTP 접속만 가능하도록 설정할 수 있다.

sshd_config 내 Match 룰설정을 통해 SFTP전용 포트 설정이 가능하며

SFTP 클라이언트 유저들이 서버를 마음대로 이동하지 못하도록 홈디렉토리 제어가 가능하다.

 

  1. SFTP 전용 데몬 포트 설정

    Match rule 내 ForceCommand 설정을 통해 가능하다.

    ForceCommand Specifying a command of internal-sftp will force the use of an in-process SFTP server that requires no support files when used with ChrootDirectory. The default is none.

     

    위와 같이 설정 시 SSH를 통해 접속을 시도하면 This service allows sftp connections only. 메시지가 출력되며 접속이 실패한다.

4) Chroot를 활용한 홈 디렉토리 이동 제한

위에서 봤던것과 같이 test 계정을 통해 sftp 접속 시 root나 외부 계정의 파일 현황을 그대로 조회할 수 있다.

SFTP 서버 운용상 보안의 Risk가 있기 때문에 test 계정이 SFTP 접속 시에는 test 홈 디렉토리 이외에는 이동하지 못하게 제어가 필요하다.

홈 디렉토리 설정은 sshd_config 내 Match의 chroot를 통해 설정 가능하다.

/etc/ssh/sshd_config 파일 내 아래와 같이 설정 시

/home/test 디렉토리는 SFTP를 접속 시 / 디렉토리와 동일 계위가 된다.

위와 같이 설정 후 데몬 재기동 시 

-> systemctl restart sshd

외부에서 SFTP 접속을 시도하면 Connection closed가 발생한다.

이를 해결하기 위해서는 SFTP의 홈 디렉토리로 설정한 /home/test 폴더의 소유권자를

root로 변경이 필요하다.

-> chown root:root /home/test

추가로 test 계정에서 접속 시 디렉토리 조회 권한을 갖기 위해 755 권한 설정을 수행한다.

 

변경 후에는 접속이 가능하다.

[root@server2 ~]# sftp -P 7777 192.168.124.100 root@192.168.124.100's password: Connected to 192.168.124.100. sftp>

 

이후 SFTP 업로드 및 다운로드로 운용 예정인 폴더 대상으로

test 그룹 설정 후 chmod 775로 쓰기 권한을 설정하여 운용 하면된다.

다른 카테고리의 글 목록

Linux 카테고리의 포스트를 톺아봅니다