FTP是文件传输协议的缩写,用于计算机网络中的计算机和服务器之间传输文件。
本文提供了如何在Ubuntu 18.04上使用SSL/TLS配置安全vsftpd服务器,并且使用终端和GUI工具连接到服务器的详细步骤。
安装VSFTPD服务器
在Linux上有几个FTP服务器,我们要安装vsftp ,要在Ubuntu 18.04上执行这个操作,请在终端中键入以下命令:sudo apt install vsftpd
一旦安装了vsftpd,它的默认配置文件位于/etc/vsftpd.conf中,为了对该文件进行更改,并且测试自定义配置,我们首先创建该文件的备份。sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
然后,我们使用以下命令创建vsftpd.conf文件:sudo vim /etc/vsftpd.conf
并将以下行添加到vsftpd.conf文件listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
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
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
注意,这些是最常用的配置,你可以根据需要自由更改它们。
Ubuntu 18.04启用了ufw(简单的防火墙),你可以使用以下命令检查ufw是否运行:sudo service ufw status
如果它正在运行,则必须允许传入的流量进入FTP端口(主动连接为20,21,被动连接为10000-10100)。要执行这个操作,运行:sudo ufw allow from any to any port 20,21,10000:11000 proto tcp
如果成功,输出将与下面的结果类似:Rules updated
Rules updated (v6)
完成所有这些步骤后,需要使用以下命令重新启动vsftpd服务器:sudo service vsftpd restart
创建连接到FTP服务器的用户
一旦vsftp服务器根据我们的需要安装和配置好,我们需要创建用户(例如,ftpsuer )连接到ftp服务器,要执行这个操作,你可以运行:sudo useradd -m ftpuser
使用以下命令为新创建的用户创建密码:sudo passwd ftpuser
提示你输入新的UNIX密码,并且重新键入以便应用更改,成功的输出如下所示:passwd: password updated successfully
准备FTP用户目录
要确保FTP连接安全,需要执行的最重要的操作之一就是将用户限制在它主目录中,以便让他们根本无法访问其他目录。要执行这个操作,你可以运行:sudo mkdir /home/ftpuser/ftpsudo chown nobody:nogroup /home/ftpuser/ftpsudo chmod a-w /home/ftpuser/ftp
然后在vsftpd配置文件/etc/vsftpd.conf中添加/更改以下行user_sub_token=$USER
local_root=/home/$USER/ftp
在完成这些步骤之后,我们需要创建另外,/home/ftpuser/ftp 并将其所有权分配给用户sudo mkdir /home/ftpuser/ftp/filessudo chown ftpuser:ftpuser/home/ftpuser/ftp/files
为了测试我们在连接到FTP服务器后,能够在用户目录中查看文件,我们将在该目录中创建测试文件,要执行这个操作,你可以运行:echo"test file for vsftpd" | sudo tee /home/ftpuser/ftp/files/test.txt
为了允许或拒绝特定用户访问vsftpd,我们可以使用userlist文件,并且在vsftpd配置文件中添加适当的记录,要执行这个操作,可以运行以下命令:userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
如果userlist_deny设置为NO,则只有添加到文件中的用户才能访问FTP服务器;如果设置为YES,则文件中列出的用户将无权访问FTP服务器,其他用户将有访问权限,使用下面的命令将用户名添加到上述文件:echo"ftpuser" | sudo tee -a /etc/vsftpd.userlist
为VSFTPD配置SSL
由于通过FTP传输的数据(连凭据)没有加密,我们可以启用tls/ssl来为我们的FTP服务器提供另一个级别的安全,要使用openssl创建证书,请运行以下命令:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
其中-days 365用于添加一年的证书,并且为-out添加相同的值,-keyout参数以在同一文件中定位私钥和证书。 你将被提示添加所有必要的信息以创建证书,如下面所示,Generating a 2048 bit RSA private key
.................+++
..............................................................................................+++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:SY
Locality Name (eg, city) []:Sydney
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ubuntu
Email Address []:[email protected]
创建证书后,我们需要将它添加到vsftpd配置文件,并且启用SSL ,为此,请将以下行添加到上述文件中:rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pemssl_enable=YES
之后,我们需要拒绝通过SSL的匿名连接,并要求SSL进行数据传输和登录。要这样做,请将以下行添加到/etc/vsftpd.conf文件:allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
添加上述行后,我们将配置服务器以便使用TLS,这是SSL的首选继承者,为此,请在同一文件中添加以下行:
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
完成所有步骤后,我们的vsftpd配置文件将如下所示:listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
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
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
在vsftpd文件配置更改后,我们需要通过以下命令重新启动服务:sudo service vsftpd restart
你还可以将vsftpd配置为对sftp使用letencrypt证书,但是要确保你有一个要验证的域名。你可以在vsftpd配置中添加路径变量,其中ssl证书和私有存储是密钥存储的。
rsa_cert_file=/ssl/letsencrypt/ftpdomain.com/chain-bundle.pem
rsa_private_key_file=/ssl/letsencrypt/ftpdomain.com/private-key.pem
连接到FTP服务器
有两种方法可以连接到ftp服务器:使用终端将FTP客户端与GUI
使用终端连接
要通过命令行连接到ftp服务器,请在终端中键入以下命令:ftp ubuntu
其中ubuntu是安装了ftp服务器的机器的主机名,
连接后,将提示你输入用于连接到ftp服务器的用户名和密码:Connected to ubuntu.
220 (vsFTPd 3.0.3)
Name (ubuntu:ubuntu): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
键入ls以检查在测试文件之前创建的是:ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1001 1001 4096 May 21 13:39 files
226 Directory send OK.
使用FTP客户端与GUI连接
我们将使用Filezilla连接到Linux上安装的FTP服务器。要执行这个操作,请打开计算机上的Filezilla客户端,输入FTP服务器IP地址ftpuser凭据以进行连接,然后按connect 按钮,如下图所示,将提示你将证书添加到信任,之后你将能够连接到FTP服务器。
连接之后,我们可以看到前面创建的test.txt 。
正如你从该文章中学到的那样,安装vsftpd服务器,并且连接到它非常容易,只需几个步骤即可完成。