리눅스 서버에 파일을 업로드하거나 다운로드할 때 많은 분들이 FileZilla나 WinSCP 같은 FTP 프로그램을 떠올립니다. 하지만 보안이 중요한 환경이라면 SFTP가 훨씬 좋은 선택입니다. SFTP는 기존 FTP와 거의 동일한 기능을 제공하면서, SSH 프로토콜 기반의 강력한 암호화 계층을 더해 데이터를 안전하게 보호해 줍니다. 이 글에서는 리눅스 시스템에 SFTP 서버를 직접 구축하는 방법을 단계별로 자세히 소개합니다.
SFTP란 무엇인가?
SFTP(Secure File Transfer Protocol)는 클라이언트와 서버 간에 파일을 전송하기 위한 네트워크 프로토콜입니다. FTP(File Transfer Protocol)와 달리 SFTP는 SSH(Secure Shell) 프로토콜을 활용해 전송되는 모든 데이터를 암호화합니다. SFTP는 1990년대 SSH 프로토콜을 개발한 컴퓨터 과학자 타투 일로넨(Tatu Ylönen)과 사미 레티넨(Sami Lehtinen)이 함께 만들었으며, 현재의 표준 버전은 IETF(Internet Engineering Task Force)가 관리하고 있습니다.
이름만 보면 단순한 파일 전송 프로토콜처럼 보이지만, 사실 SFTP는 원격 파일 시스템 프로토콜에 가깝습니다. 클라이언트에서 서버로 파일을 전송할 때 데이터는 목적지로 전송되기 전에 먼저 암호화됩니다. 따라서 중간에서 데이터를 가로채는 '중간자 공격(man-in-the-middle)'이 발생하더라도 제3자가 내용을 쉽게 해독할 수 없습니다.
SSH 및 OpenSSH 서버 설치
SFTP 서버 구축은 SSH와 OpenSSH 서버 설치부터 시작합니다.
대부분의 리눅스 배포판에는 SSH가 기본적으로 설치되어 있지만, 만약 시스템에 없다면 APT(Advanced Packaging Tool)의 apt 명령어로 간단히 설치할 수 있습니다:
sudo apt install ssh
설치 후에는 -V 옵션을 붙인 ssh 명령어로 버전을 확인할 수 있습니다:
ssh -V
Debian이나 Ubuntu 계열이라면 다음 명령어로 OpenSSH 서버를 설치하세요:
sudo apt install openssh-server
Arch Linux에서는 pacman 명령어를 사용합니다:
sudo pacman -S openssh
SFTP용 사용자, 그룹, 디렉터리 생성
리눅스에서는 서비스마다 별도의 사용자, 그룹, 디렉터리를 사용하는 것이 보안상 권장됩니다.
먼저 groupadd 명령어로 SFTP 사용자들을 위한 그룹을 만듭니다:
sudo groupadd sftp_group
다음으로 useradd 명령어에 -g 옵션을 붙여 새 사용자를 생성하고 방금 만든 그룹에 추가합니다:
sudo useradd -g sftp_group sftp_user
사용자 생성 후에는 passwd 명령어로 비밀번호를 지정합니다:
sudo passwd sftp_user
새 사용자의 기본 디렉터리를 생성합니다:
sudo mkdir -p /data/sftp_user/uploaded_files
chown 명령어로 디렉터리에 필요한 소유권을 부여합니다:
sudo chown -R root:sftp_group /data/sftp_user
sudo chown -R sftp_user:sftp_group /data/sftp_user/uploaded_files
SSH 서버 설정
다음 단계는 SFTP 서버가 사용할 SSH 서버를 구성하는 것입니다.
/etc/ssh/ 경로에 있는 sshd_config 파일을 편집하여, 해당 사용자가 서버에 접속할 때 SSH 셸 대신 SFTP 셸을 사용하도록 설정합니다.
많은 리눅스 배포판에 기본 포함된 Nano 에디터로 손쉽게 파일을 수정할 수 있습니다:
sudo nano /etc/ssh/sshd_config
파일 맨 아래로 이동해 다음 내용을 추가합니다:
Match Group sftp_group
ChrootDirectory /data/%u
ForceCommand internal-sftp
설정을 적용하려면 SSH 서비스를 재시작합니다:
sudo systemctl restart sshd
(선택 사항) SFTP 포트 변경
기본 포트인 22번 대신 다른 포트를 사용하고 싶다면 sshd_config 파일을 다시 한 번 수정해야 합니다.
Nano 에디터로 파일을 열고:
sudo nano /etc/ssh/sshd_config
주석 처리된 기본 포트 설정을 찾습니다:
#Port 22
줄 맨 앞의 해시(#) 기호를 제거하고 원하는 포트 번호를 입력합니다. 여기서는 예시로 1111로 변경했습니다:
Port 1111
파일을 저장한 뒤,
서버를 재시작하면 됩니다:
sudo systemctl restart sshd
서버 접속 및 사용 방법
서버 설치와 설정이 완료되었다면 바로 사용할 수 있습니다. SSH가 제공하는 암호화 세션 안에서 파일을 자유롭게 업로드하고 다운로드할 수 있습니다.
접속 전에 도움말을 한번 살펴보는 것도 좋습니다:
sftp -h
다음 형식으로 사용자 이름과 서버 IP(또는 호스트명)를 입력해 로그인합니다:
sftp USER@HOST
기본값인 22번이 아닌 다른 포트를 사용한다면 -P 옵션으로 포트를 지정할 수 있습니다:
sftp USER@HOST -P <PORT>
로그인에 성공하면 SFTP 셸이 실행됩니다. help 명령어를 입력하면 사용 가능한 명령어 목록을 확인할 수 있습니다.
파일 다운로드
파일을 다운로드하려면 get 명령어를 사용합니다:
get /path/to/file/on/server
예시:
get /bin/ls
이렇게 하면 파일이 현재 로컬 디렉터리(서버에 로그인하기 전에 있던 디렉터리)로 다운로드됩니다. 특정 로컬 폴더에 저장하고 싶다면 경로를 함께 지정하세요:
get /path/to/file/on/server /path/to/local/folder
디렉터리를 통째로 복사하려면 재귀(recursive)를 의미하는 -r 옵션을 추가합니다:
get -r /bin /home/username/Desktop/bin
주의할 점: 새로 생성될 로컬 디렉터리의 이름까지 반드시 지정해야 합니다. 위 예시처럼 "/home/username/Desktop/bin"을 붙여 주세요. 만약 get -r /bin /home/username/Desktop처럼 입력하면 파일들이 바탕화면에 그대로 흩어져 복사됩니다. 디렉터리 자체가 아니라 그 안의 파일들이 복사된다는 점을 기억하세요.
파일 업로드
업로드도 다운로드와 같은 원리로 작동합니다. 유일한 차이점은 경로 순서가 반대라는 것, 즉 로컬 파일/디렉터리를 먼저 쓰고 원격 경로를 나중에 지정한다는 점입니다.
put 명령어로 파일을 서버에 업로드합니다:
put /path/to/local/content /path/to/remote/location
디렉터리를 재귀적으로 업로드할 때도 앞서 설명한 규칙이 동일하게 적용됩니다. 디렉터리 자체가 아니라 그 안의 파일들이 복사되므로, 파일을 담을 새 디렉터리 이름을 지정해 주세요:
put -r /home/username/Desktop/bin bin
이 명령은 원격 서버에 "bin"이라는 새 디렉터리를 만들고 파일들을 업로드합니다.
전송 재개 및 공백이 포함된 경로 처리
대용량 파일 전송 중 연결이 끊겼다면 reput과 reget 명령어로 이어서 전송할 수 있습니다. 단, 소스와 목적지가 정확히 일치하도록 이전에 사용했던 것과 동일한 경로를 사용해야 합니다:
reget /path/to/file/on/server /path/to/local/file
reput /path/to/local/file /path/to/file/on/server
디렉터리 전송을 재개할 때는 -r 옵션을 추가하면 됩니다:
reput -r /home/username/Desktop/bin bin
파일 경로에 공백이 있다면 큰따옴표로 감싸주세요:
put "/home/username/My Documents/Files"
그 외 유용한 명령어
ls 명령어로 파일과 디렉터리 목록을 확인할 수 있습니다:
ls -l
chmod 명령어로 파일 권한도 변경할 수 있습니다:
chmod <PERMISSION> <FILE>
새 디렉터리는 mkdir 명령어로 생성합니다:
mkdir <DIRECTORY_NAME>
자주 묻는 질문(FAQ)
1. SFTP 클라이언트를 따로 설치해야 하나요?
대부분의 경우 그럴 필요가 없습니다. 리눅스 시스템에는 터미널 기반 SFTP 클라이언트가 기본으로 설치되어 있는 경우가 많습니다.
2. 공개키 인증을 사용할 수 있나요?
네, 비밀번호 대신 공개키 인증 방식을 사용할 수 있습니다. 설정 과정도 비교적 간단하며, 서버 보안을 한층 더 강화해 줍니다.
3. SSH 서버와 동시에 운영할 수 있나요?
네, 가능합니다. 다만 SFTP 서버가 SSH 서버와 같은 포트를 사용하지 않도록 포트 설정을 반드시 확인해야 합니다.