웹사이트 검색

Linux 서버에서 SFTP를 설치하고 사용하는 방법


이 페이지에서

  1. 전제 조건
  2. OpenSSH 패키지 확인\n
  3. 그룹 및 사용자 만들기
  4. Chroot 감옥 디렉토리 설정
  5. SSH 서버에서 SFTP 활성화\n
  6. SFTP 서버에 액세스
  7. 결론

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

요즘에는 레거시 구형 FTP 또는 FTP/S 프로토콜 대신 SFTP를 사용하는 것이 좋습니다. SFTP는 SSH가 작동하는 방식이기 때문에 기본적으로 안전합니다. 보안 관점에서 SFTP는 또한 암호 스니핑 및 중간자 공격(MiTM)으로부터 사용자를 보호합니다.

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

전제 조건

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

구현을 위한 현재 환경은 다음과 같습니다.

  • Linux 서버 - Debian, Ubuntu, CentOS, Fedora, Rocky 또는 기타 Linux 배포판을 사용할 수 있습니다.\n
  • Linux 시스템에서 OpenSSH 패키지를 사용할 수 있는지 확인합니다.\n
  • SFTP 클라이언트 - 원하는 대로 sftp 명령줄 또는 GUI 클라이언트.\n

OpenSSH 패키지 확인

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

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

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

dpkg -l | grep ssh

아래는 Debian 시스템의 출력입니다.

ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 client-side library
ii  openssh-client                1:8.4p1-5                      amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                1:8.4p1-5                      amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server           1:8.4p1-5                      amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines

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

RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux 사용자의 경우 아래와 같이 rpm 명령을 사용할 수 있습니다.

rpm -qa | grep ssh

그룹 및 사용자 생성

이 단계에서는 SFTP 서버에 대한 새 그룹 및 사용자를 생성합니다. 이 그룹 내의 사용자는 SFTP 서버에 액세스할 수 있습니다. 보안상의 이유로 SFTP 사용자는 SSH 서비스에 액세스할 수 없습니다. SFTP 사용자는 SFTP 서버에만 액세스합니다.

1. 다음 명령을 실행하여 새 그룹 sftpgroup을 만듭니다.

sudo groupadd sftpgroup

2. 다음 명령을 사용하여 새 사용자 sftpuser를 만듭니다.

sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser

세부 옵션:

  • -G : 사용자를 sftpgroup에 자동으로 추가합니다.\n
  • -d : 새 사용자의 홈 디렉토리를 지정합니다.\n
  • -s : 새 사용자의 기본값을 /sbin/nologin으로 설정합니다. 이는 사용자가 SSH 서버에 액세스 할 수 없음을 의미합니다.\n

3. 다음으로 아래 명령을 사용하여 사용자 sftpuser의 암호를 만듭니다.

passwd sftpuser

강력한 암호를 입력하고 반복한 다음 Enter를 눌러 확인합니다.

더 많은 사용자를 추가하려면 단계 번호 2 및 3을 반복하십시오. 가장 중요한 것은 모든 SFTP 사용자가 SSH를 통한 셸 액세스 권한이 없는 그룹 sftpgroup에 속해야 한다는 것입니다.

Chroot 감옥 디렉토리 설정

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

1. 사용자 sftpuser의 경우 새 홈 디렉토리는 /srv/sftpuser에 있습니다. 아래 명령을 실행하여 생성합니다.

mkdir -p /srv/sftpuser

2. 사용자 sftpuser에 대한 chroot를 설정하려면 디렉토리의 소유권을 사용자 root로 변경해야 하지만 쓰기 권한 없이 읽고 실행할 수 있는 그룹은 유지해야 합니다.

다음 명령을 사용하여 디렉터리의 소유권을 사용자 루트로 변경합니다.

sudo chown root /srv/sftpuser

그룹에 읽기 및 실행 권한을 부여하되 쓰기 권한은 부여하지 마십시오.

sudo chmod g+rx /srv/sftpuser

3. 다음으로 /srv/sftpuser 디렉토리 내에 새 데이터 디렉토리를 생성하고 해당 data 디렉토리의 소유권을 사용자 sftpuser로 변경합니다.

mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

지금까지 SFTP 사용자 디렉터리에 대한 자세한 구성은 아래에 나와 있습니다.

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

SSH 서버에서 SFTP 활성화

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

1. nano 또는 vim을 사용하여 ssh 구성 /etc/ssh/sshd_config을 편집합니다.

sudo nano /etc/ssh/sshd_config

2. 독립 실행형 sftp-server 기능을 비활성화하려면 다음 구성을 설명하십시오.

#Subsystem      sftp    /usr/lib/openssh/sftp-server

3. 다음 구성을 줄 맨 아래에 붙여넣습니다.

Subsystem sftp internal-sftp

Match Group sftpgroup
     ChrootDirectory %h
     X11Forwarding no
     AllowTCPForwarding no
     ForceCommand internal-sftp

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

자세한 구성:

  • 하위 프로세스 sftp-server를 사용하는 대신 internal-sftp를 사용했습니다.\n
  • 그룹 sftpgroup에 대해 활성화된 SFTP 서버입니다.\n

4. 새 구성을 적용하려면 아래 명령을 사용하여 ssh 서비스를 다시 시작하십시오.

sudo systemctl restart sshd

SFTP 서버는 준비되고 액세스 가능하며 SSH 서비스와 동일한 포트에서 실행됩니다.

SFTP 서버에 액세스

클라이언트 측에서는 대부분의 Linux 배포판에 기본적으로 설치되는 sftp 명령줄을 사용합니다. 그러나 FileZilla, Cyberduck 등과 같은 다른 명령줄 클라이언트 또는 GUI FTP 클라이언트를 사용할 수도 있습니다.

1. SFTP 서버에 접속하기 위해 아래와 같이 sftp 명령어를 실행합니다.

sftp 

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

sftp -P PORT 

sftpuser의 암호를 입력하십시오.

2. SFTP 서버에 연결되면 다음 명령을 실행합니다.

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

pwd
ls

3. / 디렉토리의 SFTP 서버에 로컬 파일을 업로드합니다. chroot 디렉토리이기 때문에 권한 거부가 됩니다.

put /path/to/file/on/local /

4. SFTP 서버의 /data/ 디렉토리에 로컬 파일을 업로드합니다. 구성이 올바르면 파일이 /data/ 디렉토리에 업로드됩니다.

put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

5. 이제 다음 명령을 사용하여 /data 디렉토리에서 사용 가능한 파일을 확인합니다.

ls /data/

그러면 SFTP 서버에 업로드된 파일이 표시됩니다.

결론

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