sFTP란 ssh File Transfer Protocol의 약자로, ssh 포트를 통해 파일을 주고 받을 수 있는 규약이다. FTP의 보안이 강화된 버전이라고 볼 수 있다.

원격으로 파일을 전송할 때, 간단히 scp로도 전송할 수 있다. 하지만 전송해야 할 파일이 많거나, 용량이 크거나, 서버 간 다른 플랫폼을 사용하고 있다면 전송이 어려울 수 있다.

scp -p [port] [file_path] [user_name]@[ip_address]:[target_path]

나는 Windows에서 Ubuntu 서버로 file을 옮기는 작업을 주로 하기 때문에, sFTP를 setup하고 FileZila를 이용해서 전송을 한다.

이미 터미널을 통해 ssh접속을 사용중이라면, 몇 가지 설정만 해주면 sFTP 접속이 가능하다.

sftp group 생성 및 sftp 접속용 user 생성

sudo addgroup —-system sftp_users
sudo adduser -s /sbin/nologin username
sudo passwd username
sudo usermod -G sftp_users username

sftp 접속 시 보여질 root directory 생성, sftp user directory 생성, 권한 설정

sudo mkdir -p /home/sftp_users/username
sudo chown root:sftp_users /home/sftp_users
sudo chown username:sftp_users /home/sftp_users/username

sshd config 설정 변경

# ssh config file 편집 열기
sudo vim /etc/ssh/sshd_config

Subsystem sftp /usr/lib/openssh/sftp-server
# 위 line을 찾아 아래 내용으로 수정
Subsystem sftp internal-sftp

# 파일 밑에 아래 라인들 추가
Match Group sftp_users
    ForceCommand internal-sftp
    ChrootDirectory /home/sftp_users
    X11Forwarding no
    AllowTcpForwarding no

수정된 config file을 저장하고 설정 reload

sudo service ssh reload

주의할 점은 directory 권한이다. 대부분의 접속 문제가 여기서 발생하는 것 같다. sftp의 root가 되는 directory는 root권한으로만 쓰기가 가능해야 하며, sftp group은 읽기가 가능해야 한다. user directory는 접속한 user로 쓰기가 가능해야 접속 시 문제 없이 파일 전송을 할 수 있다.

By rammie

안녕하세요! 취미로 개발하는 직장인입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다