一、Vsftpd 服务器简介
目前主流的FTP服务器端软件包括: Vsftpd、ProF TPD PureFTPd、Wuftpd、Server-U FTP、FileZilla Server等软件,其中Unix/Linux 使用较为广泛的FTP服务器端软件为Vsftpd。
非常安全的FTP服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux发行版中最主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用(1000 用户)等。
Vsftpd基于GPL开源协议发布,在中小企业中得到广泛的应用,Vsftpd可以快速上手,基于Vsftpd虚拟用户方式,访问验证更加安全。Vsftpd 还可以基于MYSQL数据库做安全验证,多重安全防护。
二、Vsftpd 服务器安装配置
Vstftpd服务器端安装有两种方法,一是基于 YUM方式安装,二是基于源码编译安装,最终实现效果完全致,本文采用YUM安装Vsftpd,步骤如下:
(1)在命令行执行如下命令:
yum install vsftpd* -y
(2) 打印vsftpd安装后的配置文件路径、启动Vsftpd服务及查看进程是否启动,如下图所示:
rpm -ql vsftpdlmore
systemctl restart vsftpd.service
ps -ef lgrep vsftpd
(3)Vsftpd.conf默认配置文件详解如下:
anonymous enable=YES #开启匿名用户访问;
local_enable=YES #启用本地系统用户访问;
write_enable=YES #本地系统用户写入权限;
local_umask=022 #本地用户创建文件及目录默认权限掩码;
dirmessage_enable=YES #打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
xferlog_enable=YES #启用上传/下载日志记录;
connect_from_port_20=YES #FTP使用20端口进行数据传输:
xferlog_std_format=YES #日志文件将根据xferlog的标准格式写入:
listen=NO #Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES;
listen_ipv6=YES #启用IPV6监听;
pam_service_name=vsftpd #登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
userlist_enable=YES #vsftpd.user_list 和ftpusers 配置文件里用户禁止访问FTP;
tcp_wrappers=YES #设置vsftpd与tcp_wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hostsallow和/etc/hosts,deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。
(4) 启动Vsftpd服务后,通过Windows客户端资源管理器访问Vsftp服务器端,如下所示:
ftp://192.168.111.131/
FTP主被动模式,默认为主动模式,设置为被动模式使用端口方法如下:
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
三、Vsftpd 匿名用户配置
Vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器端路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。如需关闭FTP匿名用户访问,需修改配置文件/etc/vsftpd/vsftpd.conf,将anonymous_enable=YES修改为anonymous_enable=NO,重启Vsftpd服务即可。
如果允许匿名用户能够上传、下载删除文件,需在/etc/vsftpd/vsftpd.conf 配置文件中加入如下代码:
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #允许匿名用户其他写入权限
匿名用户完整vsftpd.conf配置文件代码如下:
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
由于默认Vsftpd匿名用户有两种:anonymous、ftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一 种即可,设置命令如下:
chown -R ftp pub/
chmod O+W pub/
如上Vsftpd.conf配置文件配置完毕,同时权限设置完,重启vsftpd服务即可,通过windows客户端访问,能够上传文件、删除文件、创建目录等操作,如下所示:
四、Vsftpd 系统用户配置
Vsftpd匿名用户设置完毕,匿名用户,任何人都可以查看FTP服务器端的文件、目录,甚至可以修改、删除,此方案如适合存放私密文件在FTP服务器端,如何保证文件或者目录专属拥有者呢,Vsftpd系统用户可以实现该需求。
实现Vsftpd系统用户方式验证,只需在Linux系统中创建多个用户即可,创建用户使用useradd,同时给用户设置密码,即可通过用户和密码登录FTP,进行文件上传、下载、删除等操作。Vsftpd 系统用户实现方法步骤如下:
(1) Linux系统中创建系统用户kin1、kin2, 分别设置密码为123456:
useradd kin1
useradd kin2
echo 123456[passwd -stdin kin1
echo 123456[passwd -stdin kin2
(2) 修改vsftpd.conf配置文件代码如下:
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
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
(3)通过Windows资源客户端验证,使用kin1、kin2用户登录FTP服务器,即可上传文件、删除文件、下载文件,kin1、kin2系统用户上传文件的家目录在/home/kin1、/home/kin2 下,如图所示:
五、Vsftpd 虚拟用户配置
如果基于Vsftpd系统用户访问FTP服务器,系统用户越多越不利于管理,而且不利于系统安全管理,鉴于此,为了能更加的安全使用VSFTPD,需使用Vsftpd虚拟用户方式。
Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录linux系统,从而让系统更加的安全可靠。
Vsftpd虚拟用户企业案例配置步骤如下:
(1)安装Vsftpd虚拟用户需用到的软件及认证模块:
yum install pam* libdb-utils libdb* -- skip-broken -y
(2)创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt, 新建虚拟用户和密码,其中kin001、kin002为虚拟用户名,123456 为密码,如果有多个用户,依次格式填写即可:
kin001
123456
kin002
123456
(3)生成Vsftpd虚拟用户数据库认证文件,设置权限700:
db load -T -t hash -f /etc/vsttpd/ftpusers.txt
/etc/vsftpd/vsftpd_login.db
chmod 700 /etc/vsftpd/vsftpd_login.db
(4) 配置PAM认证文件,/etc/pam.d/vsftpd 行首加入如下两行:
auth required pam_userdb.so db =/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
(5)所有Vsftpd虚拟用户需要映射到个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下:
useradd -s s /sbin/nologin ftpuser
(6)完整vsftpd.conf配置文件代码如下:
#global config Vsftpd 2019
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port 20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
#config virtual user FTP
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
如上Vsftpd虚拟用户配置文件参数详解:
#config virtual user FTP
pam service_name=vsftpd #虚拟用户启用pam认证
guest_enable=YES #启用虚拟用户
guest_username=ftpuser #映射虚拟用户至系统用户ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf #设置虚拟用户配置文件所在的目录
virtual_use_local_privs=YES #虚拟用户使用与本地用户相同的权限
(7) 至此,所有虚拟用户共同基于/home/ftpuser主目录实现文件上传与下载,可以在/etc/vsftpd/vsftpd_user_conf目录创建虚拟用户各自的配置文件,创建虚拟用户配置文件主目录:
mkdir -p /etc/vsftpd/vftpd_user_conf/
(8)如下分别为虚拟用户 kin001、kin002 用户创建配置文件:
vim /etc/vsftpd/vsftpd_user_conf/kin001,同时创建私有的虚拟目录,代码如下:
local_root=/home/ftpuser/kin001
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim /etc/vsftpd/vftpd_user_conf/kin002,同时创建私有的虚拟目录,代码如下:
local_root=/home/ftpuser/kin002
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
虚拟用户配置文件内容详解:
local_root=/home/ftpuser/kin002 #kin002虚拟用户配置文件路径;
write_enable=YES #允许登陆用户有写权限;
anon_world_readable_only=YES #允许匿名用户下载,然后读取文件;
anon_upload_enable=YES #允许匿名用户上传文件权限,只有在
write_enable=YES #时该参数才生效;
anon_mkdir_write_enable=YES #允许匿名用户创建目录,只有在
write_enable=YES #时该参数才生效;
anon_other_write_enable=YES #允许匿名用户其他权限,例如删除、重命名等。
(9) 创建虚拟用户各自虚拟目录:
mkdir -p /home/ftpuser/{kin001,kin002} ; chown -R ftpuser:ftpuser /home/ftpuser
重启vsftpd服务,通过windows客户端管理器登陆vsftpd服务器,测试结果如图所示: