SFTP
FTP(File Transfer Protocol)는 TCP/IP 계층을 통해 파일을 전송하는 프로토콜이다.
FTP의 경우에는 보안이 취약하기 때문에 거의 사용되지 않고,
보안에 조금 더 강점이 있는 SFTP를 자주 사용한다.
설치 (Ubuntu)
1. Open SSH server 설치
SFTP의 경우 SSH 기반의 FTP 이기 때문에, 접속하려는 서버에 SSH가 설치가 되어있어야 한다.
또한 SFTP 접속 설정 또한 SSH 설정 파일에서 가능하다.
보통 SSH나 SFTP를 사용할 때에는 설치 후 기본 포트를 사용을 하는데
보안상 알려진 포트를 그대로 사용하는 것은 위험하기 때문에 기본 포트를 사내 규정에 맞게 변경하는 것을 추천한다.
먼저 설치 전 레포지토리를 업데이트 해주자.
sudo apt-get update -y
업데이트 후 아래 명령어로 Open SSH Server
를 설치하자
sudo apt-get install -y openssh-server
설치가 완료되면 SSH 서버가 자동으로 실행된다.
# ssh 상태 확인
systemctl status sshd.service
SFTP 전용 사용자 그룹 생성
SFTP 사용자들을 관리하기 위한 그룹을 생성해주자.
sudo groupadd sftpusers
사용자 추가 및 그룹 할당
SFTP 접속을 허용할 사용자를 생성해주고, 해당 사용자를 방금 만든 sftpusers
그룹에 할당하자.
사용자 홈 디렉토리는 chroot
환경을 위해 /home/sftpusers/username
으로 설정한다.
sudo useradd -m -d /home/sftpusers/username -g sftpusers -s /usr/sbin/nologin username
사용자의 비밀번호를 설정해주자.
sudo passwd username
▸ 디렉토리 및 권한 설정
SFTP 사용자가 접근할 디렉토리를 생성하고 적절한 권한을 설정하자.
sudo mkdir -p /home/sftpusers/username/uploads
sudo chown root:root /home/sftpusers/username
sudo chmod 755 /home/sftpusers/username
sudo chown username:sftpusers /home/sftpusers/username/uploads
SSH 포트 변경
보안을 위해서 SSH 접속 포트를 변경하고 싶다면 아래 파일의 내용을 다음과 같이 변경해주자.
sudo sed -i 's/#Port 22/Port 10022' /etc/ssh/sshd_config.d/*.conf
기본 포트 번호인 22를 주석 처리(#
)하고 원하는 포트 번호를 입력해주면 된다.
변경 내용을 적용하기 위해 ssh
데몬을 재시작 해주자.
sudo systemctl restart sshd.service
그리고 만약 포트를 변경하였다면 /etc/ssh/sshd_config
파일에서 아래 부분을 변경한 포트 번호로 변경해주어야 한다.
...
Match LocalPort <변경한 포트 번호로 수정>
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
SFTP 설정 변경
먼저 기본 SFTP 서브 시스템으로 내부 SFTP 서버를 사용하도록 지정하자.
vi /etc/ssh/sshd_config
...
Subsystem sftp internal-sftp
...
이는 ForceCommand internal-sftp
설정과 비슷한 역할을 하지만, 시스템 전체에 적용된다.
ForceCommand internal-sftp
란?
- 이 설정은 지정된 사용자가 로그인할 때, SSH 서버가 내부적으로 제공하는 SFTP 서버를 실행하도록 강제합니다.
- 외부 프로그램 대신 SSH 서버 내장 기능을 사용하므로 설정이 더 간단하고 보안 유지에 도움이 됩니다.
그리고 /etc/ssh/sshd_config
파일을 맨 마지막에 SFTP 관련 설정을 추가하자.
sudo vi /etc/ssh/sshd_config
파일의 끝에 다음 설정을 추가
# SFTP 설정
Match Group sftpusers
ChrootDirectory /home/sftpusers/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
변경된 사항 적용을 위해 SSH 서비스 재시작
sudo systemctl restart ssh
방화벽 설정
방화벽을 사용하는 경우 SFTP
포트 또는 바뀐 포트 번호를 다음과 같이 추가해주자.
# UFW
sudo ufw allow <바뀐 포트 번호>/tcp
# Firewalld
sudo firewall-cmd --permanent --zone=public --add-port=<바뀐 포트 번호>/tcp
sudo firewall-cmd --reload
테스트
클라이언트에서 SFTP로 접속해보자.
sftp username@<SFTP_SERVER_IP_OR_DOMAIN>