Profile picture

파일 공유 서버 (SFTP) 구축하기

JaehyoJJAng2023년 06월 14일

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 란?

  1. 이 설정은 지정된 사용자가 로그인할 때, SSH 서버가 내부적으로 제공하는 SFTP 서버를 실행하도록 강제합니다.
  2. 외부 프로그램 대신 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>

image


Loading script...