.

[Linux] Set up chrooted SFTP server

by 담배맛구마

테스트 목적으로 구축할일이 있었는데 생각보다 똥글이 많아서 기록한다.

 

구축환경은 Amazon Linux 2 on AWS EC2이다. 이미 SFTP 관련 서비스는 구축이 완료되어 있어 설정만 해주면 된다.

 

 

요구되는 사항을 정리해봤다.

1. 사용자마다 개별적인 SFTP 서비스 환경 제공을 위해 Chroot라고 대충 얼버무려 표현하는 기능을 활용했다. 

AWS Transfer Family에서는 Scope-down policy라고도 표현한다. 딱히.. 정해진 표현은 없는 것 같다.

2. 사용자마다 개별적인 SSH key pair를 이용해서 로그인을 하도록 만들었다.

 

 

Edit sshd_config

기존의 Subsystem 구문을 주석처리하고, 파일 하단에 다음과 같이 작성한다. sftp_users 그룹은 /data/ 디렉토리를 root로 서비스 하겠다는 의미이다. 수정하고나서 서비스 재시작은 필요하다.

# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Match Group sftp_users
  ChrootDirectory /data/
  ForceCommand internal-sftp

 

 

Create group, users and Set it up

sftps_users 그룹을 생성하고 서비스 계정을 생성한다. 그리고 그 계정이 사용할 디렉토리를 생성한다.

sudo groupadd sftp_users
sudo useradd -g sftp_users -s /sbin/nologin {USERNAME}

sudo mkdir /data
sudo mkdir /data/{USERNAME}
sudo chmod -R 755 /data
sudo chown -R {USERNAME}:sftp_users /data/{USERNAME}

개별적인 SSH Key pair를 사용하기 사용자 홈디렉토리에 관련 설정을 추가한다.

sudo mkdir -p /home/{USERNAME}/.ssh
sudo touch /home/{USERNAME}/.ssh/authorized_keys
sudo chown -R {USERNAME}:sftp_users /home/{USERNAME}/.ssh

sudo ssh-keygen -P "" -f {KEYNAME} -C {USERNAME}
sudo sh -c "cat {KEYNAME}.pub >> /home/{USERNAME}/.ssh/authorized_keys"

 

 

구축이 끝나면 SFTP 로그인 시에, Root 디렉토리로 /data/가 제공되고, 다른 계정의 디렉토리 정도는 보이나 퍼미션에 의해 계정이름의 디렉토리에서만 작업만 가능하다.

 

원래 목적은 계정의 홈 디렉토리를 /data/{USERNAME}으로 했었는데, 그러면 ~/.ssh/authorized_keys를 sshd가 리드를 하지 못한다. 해당 디렉토리에 대한 퍼미션에 대한 문제인데, chrootDirectory에서 요구하는 퍼미션 상태가 있어서 그러하다. 그래서 홈 디렉토리는 건들지는 않았다. sshd_config에서 authroized_keys의 위치를 수정할 수 있던것 같은데 그걸로 해결될 것 같은데 여기서 손절한다.

반응형

블로그의 정보

정윤상이다.

담배맛구마

활동하기