在CentOS 7上安装vsftpd
vsftpd包在默认的CentOS存储库中可用。要安装它,请执行以下命令:
yum install vsftpd
安装软件包后,启动vsftpd守护程序并使其在开机时自动启动:
systemctl start vsftpd
systemctl enable vsftpd
您可以通过打印其状态来验证vsftpd服务是否正在运行:
systemctl status vsftpd
输出将如下所示,显示vsftpd服务处于活动状态并正在运行:
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
Main PID: 29612 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
修改配置文件
配置vsftpd服务需要编辑/etc/vsftpd/vsftpd.conf
配置文件。
vi/vim /etc/vsftpd/vsftpd.conf
1.FTP访问
我们将只允许本地用户访问FTP服务器,找到anonymous_enable
和local_enable
指令并验证您的配置是否与下面的行匹配:
anonymous_enable=NO ##关闭匿名用户访问
local_enable=YES ##允许本地用户访问
2.启用上传
设置write_enable
以允许对文件系统进行更改,例如上载和删除文件。
write_enable=YES ##控制是否允许FTP用户上传文件或创建目录。
3.限制其主目录
通过取消注释chroot
指令,防止FTP用户访问其主目录之外的任何文件。
chroot_local_user=YES
具体来说,当chroot_local_user=YES
时,表示将本地用户限制在其主目录内,防止他们通过FTP访问服务器上的其他目录或系统文件。这提高了服务器的安全性,因为即使用户有FTP访问权限,他们也无法越过其主目录并访问系统的其他部分。
默认情况下,当chroot被启用时,如果用户锁定的目录是可写的,vsftpd将拒绝上传文件。这是为了防止安全漏洞。
使用下面的方法之一来允许在启用chroot时上传。
方式1:
- 允许上传的推荐方法是保持chroot启用并配置FTP目录。在本教程中,我们将在用户主页中创建一个ftp
目录,该目录将用作chroot,以及一个可写的uploads
目录用于上传文件。
user_sub_token=$USER
local_root=/home/$USER/ftp
##user_sub_token=$USER和local_root=/home/$USER/ftp
是用于设置用户虚拟化和指定用户根目录的选项。
1.user_sub_token=$USER
:当设置为$USER
时,表示使用用户名作为子目录的占位符。这个选项与虚拟用户相关,允许在用户的主目录中创建一个名为用户的子目录。例如,如果用户名为john
,则会在/home/john
中创建一个名为john
的子目录。这有助于区分不同用户的文件和目录,并使文件组织更加清晰。
2.local_root=/home/$USER/ftp
:这个选项指定了用户的根目录路径。在上面的示例中,用户的根目录将被设置为/home/$USER/ftp
,其中$USER
表示用户的实际用户名。这样设置的好处是,每个用户都有自己的独立根目录,可以在其中上传、下载和管理文件,而不会影响其他用户的操作。
方法2:
- 另一种选择是在vsftpd配置文件中添加以下指令。如果必须授予用户对其主目录的可写访问权限,请使用此选项。
allow_writeable_chroot=YES
在vsftpd配置文件中,allow_writeable_chroot=YES
选项用于控制是否允许在chroot环境(受限环境)中对目录和文件进行写操作。
具体来说,当allow_writeable_chroot=YES
时,它允许用户在chroot环境中对目录和文件进行写操作,即使用户被限制在其主目录中(chroot jail)也可以进行写操作。
这个选项的作用是允许FTP用户在其主目录中创建、编辑和删除文件,即使他们在chroot环境中。通常情况下,chroot环境会限制用户的操作权限,但通过设置allow_writeable_chroot=YES
,您可以允许用户在受限环境中进行写操作,从而提供更多的灵活性和功能性。
4.被动FTP连接
vsftpd可以使用任何端口进行被动FTP连接。我们将指定端口的最小和最大范围,然后在防火墙中打开该范围。
在配置文件中添加以下行:
pasv_min_port=30000 ##被动连接的最小端口
pasv_max_port=31000 ##被动连接的最大端口
5.限制用户登录
要只允许某些用户登录到FTP服务器,请在userlist_enable=YES
行后添加以下行:
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
启用此选项时,您需要通过将用户名添加到/etc/vsftpd/user_list
文件(每行一个用户)来显式指定哪些用户能够登录。
在vsftpd配置文件中,userlist_file=/etc/vsftpd/user_list
和userlist_deny=NO
这两个选项用于控制用户访问FTP服务器的权限。
1.userlist_file=/etc/vsftpd/user_list
:该选项指定了一个文件路径,用于存储允许或禁止访问FTP服务器的用户列表。在这种情况下,指定的文件为/etc/vsftpd/user_list
,该文件中列出的用户将被允许或禁止访问FTP服务器。如果您想限制用户列表,可以通过编辑user_list
文件添加或移除相应的用户。
2.userlist_deny=NO
:当userlist_deny
设置为NO
时,意味着根据userlist_file
文件中的用户列表允许访问FTP服务器。换句话说,列在user_list
文件中的用户将被允许访问FTP服务器,而不受限制。如果将userlist_deny
设置为YES
,则userlist_file
文件中列出的用户将被禁止访问FTP服务器。
6.使用SSL/TLS保护传输
(根据需要选做)
为了使用SSL/TLS加密FTP传输,您需要拥有SSL证书并配置FTP服务器以使用它。
您可以使用由受信任的证书颁发机构签名的现有SSL证书,也可以创建自签名证书。
如果你有一个域或子域指向FTP服务器 SSL证书。
在本教程中,我们将生成一个自签名SSL证书 使用openssl
命令。
以下命令将创建一个2048位私钥和有效期为10年的自签名证书。私钥和证书将保存在同一个文件中:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
#openssl: OpenSSL是一个用于加密和解密数据的工具集。在这里,我们使用OpenSSL来生成SSL证书。
#req: req是OpenSSL中的一个子命令,用于处理证书请求和生成证书。
#-x509: 这个选项指示req生成自签名的X.509证书。
#-nodes: 这个选项表示不为私钥文件设置密码。
#-days 3650: 指定证书的有效期为3650天(约为10年)。
#-newkey rsa:2048: 使用RSA算法生成一个2048位的新私钥和公钥。
#-keyout /etc/vsftpd/vsftpd.pem: 指定生成的私钥存储的路径和文件名为/etc/vsftpd/vsftpd.pem。
#-out /etc/vsftpd/vsftpd.pem: 指定生成的X.509证书存储的路径和文件名为/etc/vsftpd/vsftpd.pem。
创建SSL证书后,打开vsftpd配置文件:
vi/vim /etc/vsftpd/vsftpd.conf
找到rsa_cert_file
和rsa_private_key_file
指令,将它们的值更改为pam
文件路径,并将ssl_enable
指令设置为YES
:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
在vsftpd(Very Secure Ftp Daemon)的配置文件中,rsa_cert_file=/etc/vsftpd/vsftpd.pem
、rsa_private_key_file=/etc/vsftpd/vsftpd.pem
和ssl_enable=YES
这三个选项用于配置FTP服务器启用SSL/TLS加密连接和指定SSL证书及私钥的位置。以下是各部分的含义解释:
1.rsa_cert_file=/etc/vsftpd/vsftpd.pem:此选项指定了用于SSL/TLS连接的SSL证书的路径。在这里,/etc/vsftpd/vsftpd.pem表示SSL证书的存储位置。vsftpd将使用指定路径下的证书来加密与客户端之间的连接。
2.rsa_private_key_file=/etc/vsftpd/vsftpd.pem:这个选项指定了SSL/TLS连接所需的私钥文件的路径。在这里,私钥文件的路径也是/etc/vsftpd/vsftpd.pem。私钥文件用于解密客户端发来的加密数据,确保数据在传输过程中的安全性。
3.ssl_enable=YES:这个选项用于启用FTP服务器的SSL/TLS加密功能。当ssl_enable=YES时,表示服务器启用SSL/TLS加密连接,从而提供更安全的数据传输。客户端和服务器之间的通信将通过SSL/TLS进行加密,防止数据被窃取或篡改。
如果没有另外指定,FTP服务器将只使用TLS进行安全连接。
完成编辑后,vsftpd配置文件(不包括注释)应该如下所示:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
7.重新启动vsftpd服务
systemctl restart vsftpd
8.打开防火墙
如果您正在运行防火墙 您需要允许FTP流量。
要打开端口21
(FTP命令端口)、端口20
(FTP数据端口)和端口30000-31000
(被动端口范围),请发出以下命令:
firewall-cmd --permanent --add-port=20-21/tcp
firewall-cmd --permanent --add-port=30000-31000/tcp
这只是一个简单的防火墙配置,根据需要自行添加
使防火墙生效
firewall-cmd --reload
产看防火墙配置是否生效
firewall-cmd --list-all
9.创建FTP用户
为了测试我们的FTP服务器,我们将创建一个新用户。
- 如果你已经有一个用户,你想授予FTP访问跳过第一步。
- 如果您在配置文件中设置了
allow_writeable_chroot=YES
,请跳过第3步。
1.创建一个名为newftpuser
的新用户:
adduser newftpuser
下一步,您需要设置用户密码 :
passwd newftpuser
或者
echo "密码" |passwd --stdin newftpuser
2.将用户添加到允许的FTP用户列表:
echo "newftpuser" | tee -a /etc/vsftpd/user_list
3.创建FTP目录树并设置正确的权限 :
mkdir -p /home/newftpuser/ftp/upload
chmod 550 /home/newftpuser/ftp
chmod 750 /home/newftpuser/ftp/upload
chown -R newftpuser: /home/newftpuser/ftp
前所述,用户将能够将其文件上传到ftp/upload
目录。
此时,您的FTP服务器功能齐全,您应该能够使用任何可以配置为使用TLS加密的FTP客户端(如FileZilla)连接到服务器 .
10.禁用Shell访问
默认情况下,在创建用户时,如果没有显式指定,用户将具有对服务器的SSH访问权限。
要禁用shell访问,我们将创建一个新的shell,它将简单地打印一条消息,告诉用户他们的帐户仅限于FTP访问。
运行以下命令创建/bin/ftponly
shell并使其可执行:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | tee -a /bin/ftponly
chmod a+x /bin/ftponly
将新shell追加到/etc/shells
文件中的有效shell列表中:
echo "/bin/ftponly" | sudo tee -a /etc/shells
将用户shell更改为/bin/ftponly
:
sudo usermod newftpuser -s /bin/ftponly
使用相同的命令更改您希望给予仅FTP访问权限的其他用户的shell。
做到这你就有了一个完整的FTP服务器了。