Debian 9에서 VSFTPD를 사용하여 FTP 서버를 설정하는 방법

Debian 9에서 VSFTPD를 사용하여 FTP 서버를 설정하는 방법

2022-06-01 last update

15 minutes reading ftp debian
FTP(파일 전송 프로토콜)는 원격 네트워크 간에 파일을 전송하는 데 사용되는 표준 네트워크 프로토콜입니다.보다 안전하고 빠른 데이터 전송을 위해 사용SCP
또는 SFTP
. Linux에는 사용 가능한 FTP 서버가 많이 있습니다.가장 인기 있고 광범위한 사용PureFTPd
, ProFTPD
, 및 vsftpd
.이 강좌는 Debian 9에 vsftpd (매우 안전한 Ftp 데몬) 를 설치하고 설정하는 방법을 소개합니다.vsftpd는 안정적이고 안전하며 빠른 FTP 서버입니다.사용자를 홈 디렉터리로 제한하고 SSL/TLS로 전체 전송을 암호화하기 위해 vsftpd를 설정하는 방법도 보여 드리겠습니다.

선결 조건

로그인할 때 소유해야 하는 사용자 sudo privileges
패키지를 설치할 수 있습니다.

Debian 9에 vsftpd 설치

데비안 저장소에서 vsftpd 패키지를 제공합니다.설치가 매우 간단합니다:
sudo apt updatesudo apt install vsftpd
vsftpd 서비스는 설치 과정이 끝난 후에 자동으로 시작됩니다.인쇄 서비스 상태를 검증합니다.
sudo systemctl status vsftpd
출력은 다음과 같습니다. vsftpd 서비스가 활성 상태이고 실행 중임을 나타냅니다.
● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-12-10 11:42:51 UTC; 53s ago
 Main PID: 1394 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─1394 /usr/sbin/vsftpd /etc/vsftpd.conf

vsftpd 설정

디렉터리에 있는 vsftpd.conf 파일을 수정하여 vsftpd 서버를 설정할 수 있습니다.대부분의 설정은 구성 파일에 기록됩니다.사용 가능한 모든 옵션에 대한 액세스 official vsftpd
페이지다음 부분에서, 우리는 안전 vsftpd 설치를 설정하는 데 필요한 중요한 설정을 소개할 것이다.먼저 vsftpd 프로필을 엽니다.
sudo nano /etc/vsftpd.conf

1. FTP 액세스

/etcanonymous_enable 명령을 찾고 다음 줄과 일치하는지 확인하십시오./etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
는 로컬 사용자만 FTP 서버에 접근할 수 있도록 합니다.

2. 업로드 활성화

파일 시스템 업로드 및 삭제 등 파일 시스템을 변경할 수 있도록 local_enable 설정에 대한 설명을 취소합니다.etc/vsftpd.conf
write_enable=YES

3. Chroot 감옥

FTP 사용자가 홈 디렉토리 이외의 파일에 액세스하지 못하도록 하려면 write_enable 설정에 대한 설명을 취소하십시오.etc/vsftpd.기본적으로 사용자가 잠긴 디렉터리가 쓸 수 있다면,chroot를 사용할 때, vsftpd는 보안 빈틈을 방지하기 위해 파일을 업로드하는 것을 거부합니다.chroot를 사용할 때 다음 방법 중 하나를 사용하여 업로드를 허용합니다.
  • 방법 1. -업로드를 허용하는 방법은 chroot를 사용하고 FTP 디렉터리를 설정하는 것입니다.이 강좌에서 사용자 홈페이지에 chroot 디렉터리를 만들 것입니다. 이 디렉터리는chroot와 파일을 업로드하는 데 사용할 수 있는 쓰기 가능한 ftp 디렉터리/etc/vsftpd.형태
    chroot_local_user=YES
    
  • 방법 2. -또 다른 옵션은 vsftpd 프로필에 다음 명령을 추가하는 것입니다.사용자에게 홈 디렉토리에 대한 쓰기 가능 액세스 권한을 부여해야 하는 경우 이 옵션을 사용합니다/etc/vsftpd.ff
    user_sub_token=$USER
    local_root=/home/$USER/ftp
  • 4. 수동 FTP 연결

    vsftpd는 모든 포트를 사용하여 수동 FTP 연결을 할 수 있습니다.우리는 포트의 최소와 최대 범위를 지정한 후에 방화벽에서 이 범위를 열 것이다.프로필에 다음 줄을 추가합니다: (adsbygoogle = window.adsbygoogle | | []).푸시 ({})/etc/vsftpd.ff
    allow_writeable_chroot=YES

    5. 사용자 로그인 제한

    는 일부 사용자만 FTP 서버에 로그인할 수 있도록 합니다. 파일 끝에 다음 줄을 추가하십시오./etc/vsftpd.ff
    pasv_min_port=30000
    pasv_max_port=31000
    
    에서 이 옵션을 사용하면 uploads 파일에 사용자 이름을 추가하여 (줄마다 사용자) 로그인할 수 있는 사용자를 명확하게 지정해야 합니다.

    6. SSL/TLS를 사용하여 전송 보호

    FTP 전송을 SSL/TLS로 암호화하려면 SSL 인증서를 가지고 FTP 서버를 구성해야 합니다.신뢰할 수 있는 인증서 발급 기관에서 서명한 기존 SSL 인증서를 사용하거나 자체 서명 인증서를 만들 수 있습니다.FTP 서버의 IP 주소를 가리키는 도메인 또는 하위 도메인이 있으면 무료로 쉽게 생성할 수 있습니다 Let’s Encrypt
    SSL 인증서.이 강좌에서 우리는 생성할 것이다self-signed SSL certificate/etc/vsftpd.user_list 명령을 사용합니다.다음 명령은 유효기간이 10년인 2048비트 개인 키와 자체 서명 인증서를 만들 것입니다.개인 키와 인증서는 같은 파일에 저장됩니다.
    userlist_enable=YES
    userlist_file=/etc/vsftpd.user_list
    userlist_deny=NO
    
    SSL 인증서를 만든 후 vsftpd 프로필을 엽니다.
    sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
    opensslrsa_cert_file 명령을 찾으면 그 값을 rsa_private_key_file 파일 경로로 변경하고 pam 명령을 ssl_enable:/etc/vsftpd로 설정합니다.conf
    sudo nano /etc/vsftpd.conf
    가 별도로 지정되지 않으면 FTP 서버는 TLS로만 안전하게 연결됩니다.

    vsftpd 서비스 다시 시작

    편집이 완료되면 vsftpd 프로필(주석 포함)은 다음과 같이 해야 합니다./etc/vsftpd.ff
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    rsa_private_key_file=/etc/ssl/private/vsftpd.pem
    ssl_enable=YES
    
    파일을 저장하고 vsftpd 서비스를 다시 시작하여 변경 사항을 적용합니다.
    listen=NO
    listen_ipv6=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    dirmessage_enable=YES
    use_localtime=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd/empty
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    ssl_enable=YES
    user_sub_token=$USER
    local_root=/home/$USER/ftp
    pasv_min_port=30000
    pasv_max_port=31000
    userlist_enable=YES
    userlist_file=/etc/vsftpd.user_list
    userlist_deny=NO
    

    방화벽을 열다

    실행 중인 경우 UFW firewall
    FTP 통신을 허용해야 합니다.포트YES(FTP 명령 포트), 포트21(FTP 데이터 포트) 및20(패시브 포트 범위)를 열려면다음 명령을 실행합니다.
    sudo systemctl restart vsftpd
    잠금을 피하기 위해 포트를 엽니다. 30000-31000:
    sudo ufw allow 20:21/tcpsudo ufw allow 30000:31000/tcp
    UFW를 비활성화하고 다시 활성화하여 UFW 규칙을 다시 로드합니다.
    sudo ufw allow OpenSSH
    변경 사항을 확인하기 위해 실행하십시오.
    sudo ufw disablesudo ufw enable
    sudo ufw status

    FTP 사용자 만들기

    FTP 서버를 테스트하기 위해 새 사용자를 만듭니다.
  • FTP 액세스 권한을 부여할 사용자가 이미 있으면 첫 번째 단계를 건너뜁니다.
  • 구성 파일에 22 이 설정되어 있으면 3단계를 건너뜁니다.
  • allow_writeable_chroot=YES라는 새 사용자 만들기:
    Status: active
    
    To                         Action      From
    --                         ------      ----
    20:21/tcp                  ALLOW       Anywhere
    30000:31000/tcp            ALLOW       Anywhere
    OpenSSH                    ALLOW       Anywhere
    20:21/tcp (v6)             ALLOW       Anywhere (v6)
    30000:31000/tcp (v6)       ALLOW       Anywhere (v6)
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    
  • 허용된 FTP 사용자 목록에 사용자 추가:
    sudo adduser newftpuser
  • FTP 디렉터리 트리를 만들고 올바른 permissions
    :
    echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
    앞에서 설명한 바와 같이 사용자는 파일을 newftpuser 디렉터리에 업로드할 수 있습니다.
  • 이제 FTP 서버는 TLS 암호화로 구성된 모든 FTP 클라이언트를 사용하여 서버에 연결할 수 있는 기능을 갖추고 있습니다(예: FileZilla.
    .

    셸 액세스 비활성화

    기본적으로 사용자를 만들 때 명시적으로 지정되지 않으면 서버에 대한 SSH 액세스 권한이 있습니다.셸 액세스를 사용하지 않으려면, 새 셸을 만들 것입니다. 이 셸은 FTP 액세스에만 한정된 계정을 알려 주는 메시지를 출력할 수 있습니다.ftp/upload 셸을 만들고 실행할 수 있도록 합니다.
    sudo mkdir -p /home/newftpuser/ftp/uploadsudo chmod 550 /home/newftpuser/ftpsudo chmod 750 /home/newftpuser/ftp/uploadsudo chown -R newftpuser: /home/newftpuser/ftp
    새 셸을 /bin/ftponly 파일에 첨부하는 유효한 셸 목록:
    echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponlysudo chmod a+x /bin/ftponly
    사용자 셸을 /etc/shells로 변경합니다.
    echo "/bin/ftponly" | sudo tee -a /etc/shells
    같은 명령을 사용하여 FTP 액세스 권한만 부여한 모든 사용자의 셸을 변경합니다.

    결론

    이 강좌에서 Debian 9 시스템에 안전하고 빠른 FTP 서버를 설치하고 설정하는 방법을 배웠습니다.질문이나 피드백이 있으면 언제든지 의견을 발표하십시오.