SW/리눅스

Linux : Ubuntu 20.04 : VSFTPD 로 FTP Server 설정 방법, 예제, 명령어

얇은생각 2023. 1. 17. 07:30
반응형

이 문서에서는 장치 간에 파일을 공유하는 데 사용하는 Ubuntu 20.04에서 FTP 서버를 설치하고 구성하는 방법을 설명합니다.

FTP(파일 전송 프로토콜)는 원격 네트워크 간에 파일을 전송하거나 원격 네트워크로부터 파일을 전송하는 데 사용되는 표준 네트워크 프로토콜입니다. Linux에서 사용할 수 있는 여러 오픈 소스 FTP 서버가 있습니다. 가장 많이 알려지고 널리 사용되는 것은 Pure입니다.FTPd, ProFTPD 및 vsftpd입니다. 안정적이고 안전하며 빠른 FTP 서버인 vsftpd(Very Secure Ftp Daemon)를 설치할 예정입니다. 또한 사용자를 홈 디렉토리로 제한하고 SSL/TLS로 전체 전송을 암호화하도록 서버를 구성하는 방법도 보여줍니다.

FTP가 매우 널리 사용되는 프로토콜이지만 보다 안전하고 빠른 데이터 전송을 위해 SCP 또는 SFTP를 사용해야 합니다.

 

 

Linux : Ubuntu 20.04 : VSFTPD 로 FTP Server 설정 방법, 예제, 명령어

 

 

Ubuntu 20.04에 vsftpd를 설치

vsftpd 패키지는 Ubuntu 저장소에서 사용할 수 있습니다. 설치하려면 다음 명령을 실행하십시오.

sudo apt update
sudo apt install vsftpd

 

 

설치 프로세스가 완료되면 FTP 서비스가 자동으로 시작됩니다. 이를 확인하려면 서비스 상태를 인쇄하십시오.

출력에 vsftpd 서비스가 활성화되어 실행 중임을 표시해야 합니다.

sudo systemctl status vsftpd

# ● vsftpd.service - vsftpd FTP server
#      Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
#      Active: active (running) since Tue 2021-03-02 15:17:22 UTC; 3s ago
# ...

 

 

 

vsftpd를 구성

vsftpd 서버 구성은 /etc/vsftpd.conf 파일에 저장됩니다.

대부분의 서버 설정은 파일 내에 잘 설명되어 있습니다. 사용 가능한 모든 옵션은 vsftpd 설명서 페이지를 참조하십시오.

다음 섹션에서는 보안 vsftpd 설치를 구성하는 데 필요한 몇 가지 중요한 설정에 대해 살펴보겠습니다.

먼저 vsftpd 구성 파일을 엽니다.

sudo nano /etc/vsftpd.conf

 

 

1. FTP에 액세스합니다.

로컬 사용자에게만 FTP 서버에 대한 액세스를 허용합니다. anonymous_enable 및 local_enable 지시어를 검색하고 구성이 아래 줄과 일치하는지 확인합니다.

# /etc/vsftpd.conf

anonymous_enable=NO
local_enable=YES

 

 

2. 업로드를 활성화합니다.

write_enable 지시어를 찾아서 주석을 해제하여 파일 업로드 및 제거와 같은 파일 시스템 변경을 허용합니다.

# /etc/vsftpd.conf

write_enable=YES

 

 

3. Chroot jail

로컬 FTP 사용자가 홈 디렉토리 외부의 파일에 액세스하지 못하도록 하려면 chroot_local_user로 시작하는 lne의 주석을 해제합니다.

# /etc/vsftpd.conf

chroot_local_user=YES

 

 

기본적으로 보안상의 이유로 chroot를 사용하도록 설정한 경우 사용자가 잠긴 디렉토리가 쓰기 가능한 경우 vsftpd는 파일 업로드를 거부합니다.

chroot를 사용할 때 업로드를 허용하려면 다음 솔루션 중 하나를 사용하십시오.

방법 1. - chroot 기능을 사용하도록 설정하고 FTP 디렉터리를 구성하는 것이 좋습니다. 이 예에서는 사용자 홈 내부에 파일을 업로드하기 위한 chroot 및 쓰기 가능한 업로드 디렉토리 역할을 하는 ftp 디렉토리를 생성합니다.

# /etc/vsftpd.conf

user_sub_token=$USER
local_root=/home/$USER/ftp

 

 

방법 2. - 또 다른 옵션은 allow_writeable_chroot 지시어를 사용하도록 설정하는 것입니다.

# /etc/vsftpd.conf

allow_writeable_chroot=YES

 

 

홈 디렉토리에 대한 쓰기 가능 권한을 사용자에게 부여해야 하는 경우에만 이 옵션을 사용하십시오.

 

 

4. 패시브 FTP 연결입니다.

기본적으로 vsftpd는 활성 모드를 사용합니다. 수동 모드를 사용하려면 포트의 최소 및 최대 범위를 설정합니다.

# /etc/vsftpd.conf

pasv_min_port=30000
pasv_max_port=31000

 

 

패시브 FTP 연결에는 아무 포트나 사용할 수 있습니다. 수동 모드가 활성화된 경우 FTP 클라이언트는 선택한 범위의 임의 포트에 있는 서버에 대한 연결을 엽니다.

 

 

5. 사용자 로그인을 제한합니다.

특정 사용자만 로그인할 수 있도록 vsftpd를 구성할 수 있습니다. 이렇게 하려면 파일 끝에 다음 줄을 추가하십시오.

# /etc/vsftpd.conf

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

 

 

이 옵션을 사용하면 /etc/vsftpd.user_list 파일에 사용자 이름을 추가하여 로그인할 수 있는 사용자를 명시적으로 지정해야 합니다(한 줄에 한 명의 사용자).

 

 

6. SSL/TLS로 전송을 보호합니다.

SSL/TLS로 FTP 전송을 암호화하려면 SSL 인증서를 가지고 있고 이를 사용하도록 FTP 서버를 구성해야 합니다.

신뢰할 수 있는 인증 기관에서 서명한 기존 SSL 인증서를 사용하거나 자체 서명된 인증서를 생성할 수 있습니다.

FTP 서버의 IP 주소를 가리키는 도메인 또는 하위 도메인이 있는 경우, SSL 암호화 허용 인증서를 빠르게 생성할 수 있습니다.

2048비트 개인 키와 10년간 유효한 자체 서명 SSL 인증서를 생성합니다.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

 

 

개인 키와 인증서가 모두 동일한 파일에 저장됩니다.

SSL 인증서가 생성되면 vsftpd 구성 파일을 엽니다.

sudo nano /etc/vsftpd.conf

 

 

rsa_cert_file 및 rsa_private_key_file 디렉티브를 찾고 해당 값을 pam 파일 경로로 변경하고 ssl_enable 디렉티브를 YES로 설정합니다.

# /etc/vsftpd.conf

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES

 

 

달리 지정하지 않으면 FTP 서버는 TLS만 사용하여 보안 연결을 만듭니다.

 

 

 

vsftpd 서비스를 다시 시작

편집을 마치면 vsftpd 구성 파일(주석 제외)은 다음과 같이 표시됩니다.

# /etc/vsftpd.conf

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/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
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

 

 

파일을 저장하고 vsftpd 서비스를 다시 시작하여 변경 내용을 적용합니다.

sudo systemctl restart vsftpd

 

 

 

방화벽 열기

UFW 방화벽을 실행하는 경우 FTP 트래픽을 허용해야 합니다.

포트 21(FTP 명령 포트), 포트 20(FTP 데이터 포트) 및 30000-31000(수동 포트 범위)을 열려면 다음 명령을 실행합니다.

sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

 

 

잠기지 않으려면 포트 22가 열려 있어야 합니다.

sudo ufw allow OpenSSH

 

 

UFW를 비활성화했다가 다시 활성화하여 UFW 규칙을 다시 로드합니다.

sudo ufw disable
sudo ufw enable

 

 

변경 내용이 실행되는지 확인하려면 다음을 수행합니다.

sudo ufw status

# 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 사용자 생성

FTP 서버를 테스트하기 위해 새 사용자를 만듭니다.

FTP 액세스를 부여할 사용자가 이미 있는 경우 첫 번째 단계를 건너뜁니다.

allow_writeable_chroot=을 설정한 경우입니다.구성 파일에서 예, 세 번째 단계를 건너뜁니다.

newftpuser라는 새 사용자를 생성합니다.

sudo adduser newftpuser

 

 

사용자를 허용된 FTP 사용자 목록에 추가합니다.

echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

 

 

FTP 디렉터리 트리를 생성하고 올바른 권한을 설정하십시오.

sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp

 

 

이전 섹션에서 설명한 대로 사용자는 파일을 ftp/upload 디렉토리에 업로드할 수 있습니다.

이제 FTP 서버가 완전히 작동합니다. FileZilla와 같이 TLS 암호화를 사용하도록 구성할 수 있는 FTP 클라이언트를 사용하여 서버에 연결할 수 있어야 합니다.

 

 

 

셸 액세스를 사용하지 않도록 설정

기본적으로 사용자를 작성할 때 명시적으로 지정하지 않은 경우 사용자는 서버에 대한 SSH 액세스 권한을 가집니다. 셸 액세스를 금지하려면 사용자에게 계정이 FTP 액세스로만 제한되었음을 알리는 메시지를 인쇄하는 새 셸을 만듭니다.

다음 명령을 실행하여 /bin/ftponly 파일을 생성하고 실행할 수 있도록 합니다.

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
sudo chmod a+x /bin/ftponly

 

 

/etc/shells 파일의 유효한 셸 목록에 새 셸을 추가합니다.

echo "/bin/ftponly" | sudo tee -a /etc/shells

 

 

사용자 셸을 /bin/ftponly로 변경합니다.

sudo usermod newftpuser -s /bin/ftponly

 

 

동일한 명령을 사용하여 FTP 액세스만 허용하려는 모든 사용자의 셸을 변경할 수 있습니다.

반응형