웹사이트 검색

Ubuntu에서 FTP 서버를 설치하고 구성하는 방법


FTP(파일 전송 프로토콜)는 네트워크를 통해 두 컴퓨터 간에 파일을 업로드/다운로드하는 데 사용되는 비교적 오래되고 가장 많이 사용되는 표준 네트워크 프로토콜입니다. 그러나 FTP는 암호화 없이 사용자 자격 증명(사용자 이름 및 비밀번호)과 함께 데이터를 전송하기 때문에 원래 안전하지 않습니다.

경고: FTP를 사용할 계획이라면 SSL/TLS로 FTP 연결을 구성하는 것이 좋습니다(자세한 내용은 뒤에서 다루겠습니다). 다음 기사). 그렇지 않으면 항상 SFTP와 같은 보안 FTP를 사용하는 것이 좋습니다.

권장 자료: CentOS 7에서 FTP 서버를 설치하고 보호하는 방법

이 튜토리얼에서는 FTP 서버(VSFTPD 전체 "Very Secure FTP Daemon")를 설치, 구성 및 보호하는 방법을 보여줍니다. Ubuntu는 FTP 취약점에 대한 강력한 보안을 제공합니다.

1단계: Ubuntu에 VsFTP 서버 설치

1. 먼저 시스템 패키지 소스 목록을 업데이트한 후 다음과 같이 VSFTPD 바이너리 패키지를 설치해야 합니다.

sudo apt-get update
sudo apt-get install vsftpd

2. 설치가 완료되면 서비스가 처음에 비활성화되므로 그동안 수동으로 시작해야 하며 다음 시스템 부팅 시 자동으로 시작되도록 활성화해야 합니다.

------------- On SystemD ------------- 
systemctl start vsftpd
systemctl enable vsftpd

------------- On SysVInit ------------- 
service vsftpd start
chkconfig --level 35 vsftpd on

3. 다음으로, 서버에서 UFW 방화벽을 활성화한 경우(기본적으로 활성화되어 있지 않음) 2120 포트를 열어야 합니다. FTP 데몬이 수신 대기 중인 경우 원격 시스템에서 FTP 서비스에 대한 액세스를 허용하려면 다음과 같이 새 방화벽 규칙을 추가하십시오.

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw status

2단계: Ubuntu에서 VsFTP 서버 구성 및 보안

4. 이제 FTP 서버를 설정하고 보호하기 위한 몇 가지 구성을 수행하겠습니다. 먼저 다음과 같은 원본 구성 파일 /etc/vsftpd/vsftpd.conf의 백업을 생성합니다. 그래서:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

다음으로 vsftpd 구성 파일을 열어보겠습니다.

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

다음 값을 사용하여 다음 옵션을 추가/수정합니다.

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. 이제 사용자 목록 파일 /etc/vsftpd.userlist를 기반으로 사용자에 대한 FTP 액세스를 허용/거부하도록 VSFTPD를 구성합니다.

기본적으로 userlist_file=/etc/vsftpd.userlist에 나열된 사용자는 userlist_enable=YES인 경우 userlist_deny=YES 옵션을 사용하여 로그인 액세스가 거부됩니다. .

그러나 userlist_deny=NO 옵션은 기본 설정의 의미를 왜곡하므로 사용자 이름이 userlist_file=/etc/vsftpd.userlist에 명시적으로 나열된 사용자만 허용됩니다. FTP 서버에 로그인하세요.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

중요: 사용자가 FTP 서버에 로그인하면 chrooted 감옥에 배치됩니다. 이는 FTP 세션의 홈 디렉터리 역할을 하는 로컬 루트 디렉터리입니다. 오직.

다음으로, 아래에 설명된 대로 chrooted Jail(로컬 루트) 디렉터리를 설정하는 방법에 대한 두 가지 가능한 시나리오를 살펴보겠습니다.

6. 이제 FTP 사용자를 홈 디렉터리로 제한하기 위해 다음 두 가지 옵션을 추가/수정/주석 해제해 보겠습니다.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES 옵션은 로컬 사용자가 로그인 후 기본적으로 홈 디렉토리인 chroot 감옥에 배치된다는 것을 의미합니다.

또한 VSFTPD는 보안상의 이유로 기본적으로 chroot 감옥 디렉토리에 쓰기가 허용되지 않는다는 점을 이해해야 합니다. 그러나 allow_writeable_chroot=YES 옵션을 사용하여 이 설정을 비활성화할 수 있습니다.

파일을 저장하고 닫습니다. 그런 다음 위의 변경 사항을 적용하려면 VSFTPD 서비스를 다시 시작해야 합니다.

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

3단계: Ubuntu에서 VsFTP 서버 테스트

7. 이제 다음과 같이 useradd 명령으로 FTP 사용자를 생성하여 FTP 서버를 테스트하겠습니다.

sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
sudo passwd aaronkilik

그런 다음 아래와 같이 echo 명령과 tee 명령을 사용하여 /etc/vsftpd.userlist 파일에 사용자 aaronkilik을 명시적으로 나열해야 합니다.

echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

8. 이제 위의 구성이 필요에 따라 작동하는지 테스트할 시간입니다. 익명 로그인 테스트부터 시작하겠습니다. 아래 출력에서 FTP 서버에서는 익명 로그인이 허용되지 않음을 분명히 알 수 있습니다.

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. 다음으로 /etc/vsftpd.userlist 파일에 나열되지 않은 사용자에게 로그인 권한이 부여되는지 테스트해 보겠습니다. 이는 다음 출력에서는 사실이 아닙니다. :

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. 이제 /etc/vsftpd.userlist 파일에 나열된 사용자가 실제로 다음과 같은 홈 디렉터리에 배치되었는지 확인하기 위한 최종 테스트를 수행합니다. 로그인. 그리고 이는 아래 출력에서 사실입니다.

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

경고: allow_writeable_chroot=YES 옵션을 설정하는 것은 매우 위험할 수 있으며 특히 사용자에게 업로드 권한이 있는 경우 보안에 영향을 미칠 수 있습니다. 더욱이 쉘 액세스입니다. 자신이 하고 있는 일을 정확히 알고 있는 경우에만 사용하십시오.

이러한 보안 관련 사항은 VSFTPD에만 국한된 것이 아니며 로컬 사용자를 chroot 감옥에 넣도록 제안하는 다른 모든 FTP 데몬에도 영향을 미칠 수 있습니다.

이러한 이유로 아래 섹션에서는 사용자에 대해 쓰기 불가능한 다른 로컬 루트 디렉터리를 설정하는 보다 안전한 방법을 설명합니다.

4단계: Ubuntu에서 FTP 사용자 홈 디렉터리 구성

11. 이제 VSFTPD 구성 파일을 한 번 더 엽니다.

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

아래와 같이 # 문자를 사용하여 안전하지 않은 옵션을 주석 처리합니다.

#allow_writeable_chroot=YES

다음으로, 사용자에 대한 대체 로컬 루트 디렉터리(aaronkilik, 귀하의 디렉터리는 동일하지 않을 수 있음)를 만들고 이 디렉터리에 대한 다른 모든 사용자의 쓰기 권한을 비활성화하여 필요한 권한을 설정합니다.

sudo mkdir /home/aaronkilik/ftp
sudo chown nobody:nogroup /home/aaronkilik/ftp
sudo chmod a-w /home/aaronkilik/ftp

12. 그런 다음 사용자가 파일을 저장할 적절한 권한이 있는 로컬 루트 아래에 디렉터리를 만듭니다.

sudo mkdir /home/aaronkilik/ftp/files
sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
sudo chmod -R 0770 /home/aaronkilik/ftp/files/

그런 다음 VSFTPD 구성 파일에서 아래 옵션을 해당 값으로 추가/수정합니다.

user_sub_token=$USER          # inserts the username in the local root directory 
local_root=/home/$USER/ftp    # defines any users local root directory

파일을 저장하고 닫습니다. 그리고 최근 설정으로 VSFTPD 서비스를 다시 시작합니다.

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

13. 이제 최종 확인을 수행하여 사용자의 로컬 루트 디렉터리가 홈 디렉터리에 생성한 FTP 디렉터리인지 확인하겠습니다.

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

그게 다야! 아래 의견 양식을 통해 이 가이드에 대한 의견을 공유하거나 해당 주제와 관련된 중요한 정보를 제공해 주시기 바랍니다.

마지막으로, Ubuntu 16.04/16.10에서 SSL/TLS 연결을 사용하여 FTP 서버를 보호하는 방법을 설명하는 다음 기사를 놓치지 마십시오. 그때까지는 항상 TecMint를 지켜봐 주시기 바랍니다.