SFTP 설치 · 4 min read · Sep 24, 2025

리눅스 서버에 SFTP 설치 및 사용 방법

SFTP 또는 SSH 파일 전송 프로토콜은 두 대 이상의 컴퓨터 간에 데이터를 안전하게 전송하는 방법입니다. 이는 SSH 프로토콜 위에서 실행되는 FTP로, 보안을 활용하고 인증을 완전히 지원합니다.

오늘날, 레거시 FTP 또는 FTP/S 프로토콜 대신 SFTP를 사용하는 것이 권장됩니다. SFTP는 기본적으로 안전합니다. 왜냐하면 SSH가 그렇게 작동하기 때문입니다. 보안 관점에서 SFTP는 비밀번호 스니핑 및 중간자 공격(MiTM)으로부터 보호합니다.

SSH와 마찬가지로 SFTP는 암호화 및 암호 해시 함수를 사용하여 데이터 무결성을 보호합니다. 또한 비밀번호 및 키 기반 인증을 포함한 여러 가지 안전한 인증 방법을 지원합니다. 또한 SSH 프로토콜과 동일한 포트에서 실행되기 때문에 서버의 외부 네트워크에 대한 열린 포트를 줄입니다.

전제 조건

이 가이드에서는 리눅스 시스템에서 SFTP 서버를 설정하는 방법을 배웁니다. 또한 sftp 클라이언트의 기본 명령어도 배웁니다.

아래는 구현을 위한 현재 환경입니다:

  • 리눅스 서버 - Debian, Ubuntu, CentOS, Fedora, Rocky 또는 기타 리눅스 배포판을 사용할 수 있습니다.
  • 리눅스 시스템에 OpenSSH 패키지가 설치되어 있는지 확인하십시오.
  • SFTP 클라이언트 - 선호하는 sftp 명령줄 또는 GUI 클라이언트.

OpenSSH 패키지 확인

SFTP 서버를 설정하려면 리눅스 시스템에 OpenSSH 패키지가 설치되어 있어야 합니다. 거의 모든 리눅스 배포판 서버에는 기본적으로 OpenSSH 패키지가 설치되어 있습니다. 그러나 시스템에 OpenSSH 패키지가 없는 경우 공식 저장소에서 설치할 수 있습니다.

  1. 리눅스 시스템에 OpenSSH 패키지가 설치되어 있는지 확인하려면 다음 명령어를 사용하십시오.

Debian 또는 Ubuntu 서버의 경우 아래의 dpkg 명령어를 사용할 수 있습니다.

dpkg -l | grep ssh

아래는 우리의 Debian 시스템에서의 출력입니다.

ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 클라이언트 측 라이브러리  
ii  openssh-client                1:8.4p1-5                      amd64        안전한 원격 머신에 대한 접근을 위한 안전한 쉘(SSH) 클라이언트  
ii  openssh-server                1:8.4p1-5                      amd64        안전한 원격 머신으로부터의 접근을 위한 안전한 쉘(SSH) 서버  
ii  openssh-sftp-server           1:8.4p1-5                      amd64        원격 머신으로부터의 SFTP 접근을 위한 안전한 쉘(SSH) sftp 서버 모듈

첫 번째 열 ‘ ii ‘는 패키지가 설치되었음을 의미합니다. 패키지 ‘ openssh-sftp-server ‘는 Debian/Ubuntu 시스템에 설치되어 있습니다.

RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux 사용자는 아래의 rpm 명령어를 사용할 수 있습니다.

rpm -qa | grep ssh

그룹 및 사용자 생성

이 단계에서는 SFTP 서버를 위한 새 그룹과 사용자를 생성합니다. 이 그룹 내의 사용자들은 SFTP 서버에 접근할 수 있습니다. 보안상의 이유로 SFTP 사용자는 SSH 서비스에 접근할 수 없으며, SFTP 서버에만 접근할 수 있습니다.

  1. 다음 명령어를 실행하여 새 그룹 ‘ sftpgroup ‘을 생성합니다.
sudo groupadd sftpgroup
  1. 다음 명령어를 사용하여 새 사용자 ‘ sftpuser ‘를 생성합니다.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser

상세 옵션:

  • -G: 사용자를 ‘ sftpgroup ‘에 자동으로 추가합니다.
  • -d: 새 사용자의 홈 디렉토리를 지정합니다.
  • -s: 새 사용자의 기본값을 ‘ /sbin/nologin ‘으로 설정하여 사용자가 SSH 서버에 접근할 수 없도록 합니다.
  1. 다음으로, 아래의 명령어를 사용하여 사용자 ‘ sftpuser ‘의 비밀번호를 생성합니다.
passwd sftpuser

강력한 비밀번호를 입력하고 반복한 후, ‘ Enter ‘를 눌러 확인합니다.

사용자 및 그룹 추가 sftpserver

더 많은 사용자를 추가하려면 2번3번 단계를 반복하고, 가장 중요한 것은 모든 SFTP 사용자가 SSH를 통한 셸 접근 없이 ‘ sftpgroup ‘ 그룹에 있어야 한다는 것입니다.

Chroot 감옥 디렉토리 설정

새 그룹과 사용자를 생성한 후, SFTP 사용자를 위한 chroot 디렉토리를 생성하고 구성해야 합니다.

  1. 사용자 ‘sftpuser’의 새 홈 디렉토리는 ‘/srv/sftpuser’에 위치합니다. 아래의 명령어를 실행하여 생성합니다.
mkdir -p /srv/sftpuser
  1. 사용자 ‘ sftpuser ‘를 위한 chroot를 설정하려면, 디렉토리의 소유권을 루트 사용자로 변경해야 하지만, 그룹은 쓰기 접근 없이 읽기 및 실행 권한을 유지해야 합니다.

아래의 명령어를 사용하여 디렉토리의 소유권을 사용자 ‘root’로 변경합니다.

sudo chown root /srv/sftpuser

그룹에 읽기 및 실행 권한을 부여하되, 쓰기 권한은 부여하지 않습니다.

sudo chmod g+rx /srv/sftpuser
  1. 다음으로, ‘ /srv/sftpuser ‘ 디렉토리 내에 새 ‘data’ 디렉토리를 생성하고, 해당 ‘ data ‘ 디렉토리의 소유권을 사용자 ‘ sftpuser ‘로 변경합니다.
mkdir -p /srv/sftpuser/data  
chown sftpuser:sftpuser /srv/sftpuser/data

sftpuser를 위한 chroot 디렉토리 감옥 설정

지금까지 SFTP 사용자 디렉토리에 대한 세부 구성은 다음과 같습니다.

  • 디렉토리 ‘ /srv/sftpuser ‘는 기본 홈 디렉토리입니다.
  • 사용자 ‘ sftpuser ‘는 디렉토리 ‘ /srv/sftpuser ‘에 쓸 수 없지만, 해당 디렉토리 내에서 읽을 수 있습니다.
  • 사용자 ‘ sftpuser ‘는 SFTP 서버의 ‘ /srv/sftpuser/data ‘ 디렉토리에 파일을 업로드할 수 있습니다.

SSH 서버에서 SFTP 활성화

OpenSSH에서 SFTP 서버를 활성화하려면 SSH 구성 ‘/etc/ssh/sshd_config’를 편집해야 합니다.

  1. nano 또는 vim을 사용하여 ssh 구성을 ‘ /etc/ssh/sshd_config ‘에서 편집합니다.
sudo nano /etc/ssh/sshd_config
  1. 독립형 ‘ sftp-server ‘ 기능을 비활성화하기 위해 다음 구성을 주석 처리합니다.
#Subsystem      sftp    /usr/lib/openssh/sftp-server
  1. 다음 구성을 줄의 맨 아래에 붙여넣습니다.
Subsystem sftp internal-sftp  
  
Match Group sftpgroup  
     ChrootDirectory %h  
     X11Forwarding no  
     AllowTCPForwarding no  
     ForceCommand internal-sftp

구성을 저장하고 종료합니다.

상세 구성:

  • sftp-server ‘의 하위 프로세스 대신 ‘ internal-sftp ‘를 사용합니다.
  • sftpgroup ‘ 그룹에 대해 SFTP 서버가 활성화됩니다.
  1. 새로운 구성을 적용하려면 아래의 명령어를 사용하여 ssh 서비스를 재시작합니다.
sudo systemctl restart sshd

SFTP 서버가 준비되었으며 접근 가능하며, SSH 서비스와 동일한 포트에서 실행되고 있습니다.

SFTP 서버에 접근

클라이언트 측에서는 대부분의 리눅스 배포판에 기본적으로 설치된 sftp 명령줄을 사용할 것입니다. 그러나 다른 명령줄 클라이언트나 FileZilla, Cyberduck 등의 GUI FTP 클라이언트를 사용할 수도 있습니다.

  1. SFTP 서버에 연결하려면 아래와 같이 sftp 명령어를 실행합니다.
sftp ftpuser@SERVER-IP

SFTP 및/또는 SSH 서버가 사용자 정의 포트에서 실행 중인 경우 아래와 같이 sftp 명령어를 사용할 수 있습니다.

sftp -P PORT ftpuser@SERVER-IP

‘sftpuser’의 비밀번호를 입력합니다.

  1. SFTP 서버에 연결되면 다음 명령어를 실행합니다.

현재 작업 디렉토리의 경로를 표시하고 모든 사용 가능한 파일 및 디렉토리를 나열합니다.

pwd  
ls

sftp 명령어로 sftpserver에 연결

  1. 로컬 파일을 SFTP 서버의 디렉토리 ‘/ ‘에 업로드하면 ‘ permission denied ‘라는 결과가 나타납니다. 이는 chroot 디렉토리이기 때문입니다.
put /path/to/file/on/local /
  1. 로컬 파일을 SFTP 서버의 ‘ /data/ ‘ 디렉토리에 업로드합니다. 구성이 올바르면 파일이 ‘ /data/ ‘ 디렉토리에 업로드됩니다.
put /path/to/file1/on/local1 /data/  
put /path/to/file2/on/local /data/

sftpserver에 대한 읽기 및 쓰기 확인

  1. 이제 다음 명령어를 사용하여 ‘ /data ‘ 디렉토리의 사용 가능한 파일을 확인합니다.
ls /data/

그리고 SFTP 서버에 업로드된 파일을 볼 수 있습니다.

결론

축하합니다! 리눅스 시스템에서 SFTP 서버를 성공적으로 구성했습니다. 이 유형의 구성은 OpenSSH가 설치된 대부분의 리눅스 시스템에 적용할 수 있습니다. 또한 SFTP 사용자를 위한 chroot 디렉토리를 설정하는 방법과 기본 sftp 클라이언트 명령어를 배웠습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.