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 방화벽을 활성화한 경우(기본적으로 활성화되어 있지 않음) 21 및 20 포트를 열어야 합니다. 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를 지켜봐 주시기 바랍니다.