如何在 Ubuntu 中安装和配置 FTP 服务器
FTP(文件传输协议)是一种相对较旧且最常用的标准网络协议,用于通过网络在两台计算机之间上传/下载文件。然而,FTP本质上是不安全的,因为它与用户凭据(用户名和密码)一起传输数据而没有加密。
警告:如果您计划使用 FTP,请考虑使用 SSL/TLS 配置 FTP 连接(将在下一篇文章)。否则,最好使用安全 FTP(例如 SFTP)。
建议阅读: 如何在 CentOS 7 中安装和保护 FTP 服务器
在本教程中,我们将展示如何安装、配置和保护 FTP 服务器(VSFTPD 完整的“非常安全的 FTP 守护进程”) 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. 现在,配置VSFTPD以根据用户列表文件/etc/vsftpd.userlist允许/拒绝用户的FTP访问。
请注意,默认情况下,如果 userlist_enable=YES
,userlist_file=/etc/vsftpd.userlist 中列出的用户将被拒绝使用 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 监狱(本地根)目录的两种可能情况,如下所述。
6. 此时,让我们添加/修改/取消注释以下两个选项,以将 FTP 用户限制在其主目录中。
chroot_local_user=YES
allow_writeable_chroot=YES
选项chroot_local_user=YES
重要的是意味着本地用户将被放置在chroot监狱中,即登录后默认的主目录。
我们还必须了解,出于安全原因,默认情况下 VSFTPD 不允许 chroot Jail 目录可写,但是,我们可以使用选项 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
可能非常危险,可能会产生安全隐患,特别是当用户具有上传权限时,或者更重要的是,shell 访问。仅当您确切知道自己在做什么时才使用它。
我们应该注意,这些安全隐患并不是 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。