프로젝트에서 SFTP 서버의 필요성이 제기되어 EC2에 SFTP 서버를 구축하고자 한다.
SFTP 서버를 생성하여 별도의 SFTP 소프트웨어 설치 없이 SSH를 이용해 SFTP를 구성할 것이다.
특정 지역 센터에서는 키 페어 방식으로 붙고, 특정 사용자들에게는 패스워드 방식으로 로그인 인증을 진행하려고 한다.
1. EC2 인스턴스 생성 및 SSH 설정
2. 보안그룹 설정
SFTP는 기본적으로 22번 포트를 사용하므로, 보안 그룹에서 포트 22에 대한 인바운드 규칙을 허용해준다.
3. 인증 방식 설정
로그인 패스워드 인증 방식
- SFTP 사용자 계정 생성
$ sudo user add sftpuser
$ sudo passed sftpuser
키 페어 인증 방식
- 클라이언트 측에서 공개 키 생성하고 SFTP 서버에 등록한다.
$ ssh-keygen -t rsa -b 2048
위의 명령어로 생성된 키 파일 중 id_rsa.pub이 공개 키이다. - SFTP 서버의 authorized_keys 파일에 클라이언트에서 생성한 공개 키(id_rsa.pub)를 추가한다.
$ sudo mkdir -p /home/sftpuser/.ssh
$ sudo touch /home/sftpuser/.ssh/authorized_keys
$ sudo chmod 700 /home/sftpuser/.ssh
$ sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
$ echo "클라이언트 공개 키 내용" | sudo tee -a /home/sftpuser/.ssh/authorized_keys
4. 디렉터리 소유자 설정
$ sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh
5. SSH 서비스 재시작
SSH 서비스를 재시작합니다.
$ sudo systemctl restart sshd
6. SFTP 전용 디렉터리 생성
기본적으로 홈 디렉터리에 대한 접근 권한을 제한하고 파일을 전송할 디렉터리를 생성한다.
$ sudo mkdir -p /home/sftpuser/uploads
$ sudo chown root: /home/sftpuser
$ sudo chmod 755 /home/sftpuser
$ sudo chown sftpuser:sftpuser /home/sftpuser/uploads
* chown root: => 홈 디렉터리에 대한 접근 권한을 제한하기 위해서 소유자를 root로 변경하는 것이다.
7. SSH 설정 파일 수정
/etc/ssh/sshd_config 파일을 수정하여, SFTP 전용 설정을 추가한다.
파일 하단에 다음 설정을 추가하여 SFTP 전용 세션을 구성한다.
$ sudo vi /etc/ssh/sshd_config
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
ChrootDirectory 설정은 사용자를 특정 디렉토리에만 접근할 수 있도록 제한하며, ForceCommand internal-sftp는 사용자가 SFTP 기능만 사용하게 만듭니다.
8. SSH 서비스 재시작
설정 파일을 저장한 후 SSH 서비스를 재시작하여 변경 사항을 적용합니다.
$ sudo systemctl restart sshd
9. 파일 및 디렉터리 권한 설정
디렉터리 및 파일의 권한을 SFTP 사용자 전용으로 설정해준다.
SFTP 클라이언트 연결 확인
최종적으로 SFTP 클라이언트 (ex: FileZilla, WinSCP 등)를 사용하여 sftpuser 계정으로 서버에 접속하여 파일 전송이 가능한지 테스트 한다.
'AWS > Project' 카테고리의 다른 글
EC2에서 SFTP 서버 구축하기 (2) - ssh, sftp 모두 사용 (0) | 2024.11.01 |
---|---|
EC2에서 redis-cli를 통해 ElastiCache 접속 (1) | 2024.10.30 |
AWS SSM 을 활용한 Private EC2 접근 (1) | 2024.07.28 |
Stress Tool을 활용한 부하테스트 (0) | 2024.07.16 |
여러 Account 및 VPC에서 하나의 CodePipeline 공유 (1) | 2024.07.13 |