网站搜索

如何在 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 防火墙(默认情况下未启用),则必须打开端口 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. 现在,配置VSFTPD以根据用户列表文件/etc/vsftpd.userlist允许/拒绝用户的FTP访问。

请注意,默认情况下,如果 userlist_enable=YESuserlist_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。