vsftpd
一.vsftpd的原理
1.FTP的工作原理
一个基于TCP协议的服务,使用客户端+服务器模式基本工作模式,FTP客户端在与FTP服务器端进行连接时,会建立两条通道:控制通道,数据通道。控制通道主要用于连接的建立,以及命令的传送,而数据通道主要用于数据的传输。
2.FTP的两种工作模式
- 主动模式:是服务器端主动与客户端建立数据通道,而且,服务器端建立数据通道用的是20号端口
- 被动模式:是客户端主动与服务器端建立数据通道,而且,服务器建立数据通道用的是随机端口
二.vsftpd的介绍
sftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等
三.vsftpd服务的安装与配置
1.服务的安装
查询系统中是否安装vsftpd
[root@computer ~]# rpm -qa|grep vsftpd
安装vsfpd
[root@computer ~]# yum install -y vsftpd
启动vsftpd并设为自启
[root@computer ~]# systemctl start vsftpd &&systemctl enable vsftpd
查看vsftpd状态
[root@computer ~]# systemctl status vsftpd
注意:默认情况下,vsftpd安装完成后,服务器可以使用默认配置文件正常启动,但是系统有firewalld防火墙,会拒绝FTP服务的端口;因此,这时客户端是不能正常访问FTP服务器的。
2. 环境配置
关闭防火墙并关闭开机自启
[root@computer ~]# systemctl stop firewalld &&systemctl disable firewalld
临时关闭selinux
[root@computer ~]# setenforce 0
修改/etc/selinux/config 文件,将SELINUX=enforcing改为disabled
3. vsftpd服务的配置
1.vsftpd的几个配置文件
- /etc/vsftpd/vsftpd.conf vsftpd的主配置文件
- /etc/vsftpd/ftpusers 用户控制文件,默认情况下,此文件的用户禁止登陆FTP服务器
- /etc/vsftpd/user_list 用户控制文件,默认情况下,此文件的用户禁止登陆FTP
- /etc/vsftpd/vsftpd 用户身份验证的策略文件
2.匿名用户的配置
所有的客户都使用anonymous登录,不需要提供密码,针对不同的用户,不能做个性化配置,默认情况下匿名用户登录时,只能读工作目录的数据,不能上传亦不能修改工作目录的数据
进入vsftpd的服务目录
root@computer:/var/ftp/pub# cd /etc/vsftpd/
将主配置文件备份
root@computer:/etc/vsftpd# cp vsftpd.conf vsftpd.conf.bak
编辑主配置文件
root@computer:/etc/vsftpd# grep -v "^#" vsftpd.conf.bak | grep -v "^$" > vsftpd.conf
root@computer:/etc/vsftpd# vi vsftpd.conf
anonymous_enable=YES
#启用匿名用户登录
anon_upload_enable=YES
#开启匿名用户的写权限
anon_mkdir_write_enable=YES
#允许匿名用户创建目录
anon_other_write_enable=YES
#允许匿名用户修改文件
local_enable=YES
#启用本地用户登录
write_enable=YES
#开启全局写权限
local_umask=022
#本地用户上传文件默认权限反掩码
dirmessage_enable=YES
#登录后,改变目录时,提供消息提示
xferlog_enable=YES
#启用文件上传下载日志记录
connect_from_port_20=YES
#使用20号端口建立数据通道,设置主动模式的数据通道端口
#pasv_enable=NO
#关闭被动模式(开启主动模式)
xferlog_std_format=YES
#设置日志为标准格式
listen=YES
#开启IPv4的服务侦听
pam_service_name=/etc/pam.d/vsftpd
#指定用户登录身份验证策略文件
userlist_enable=YES
#启用用户控制列表ACL
tcp_wrappers=YES
注意:匿名用户登录,是要使用用户名(anonymous)登录的,但系统中,没有anonymous这个实体帐号,真实的情况是:匿名用户登录时,都被映射到“ftp”系统默认帐号上登录。vsftpd服务给匿名用户开启写权限时,工作目录的根目录/var/ftp/pub,是不允许有写权限的,只能给工作目录下的子目录有写权限
root@centos:/var/ftp# chown root:ftp /var/ftp/pub
root@centos:/var/ftp/pub# mkdir test
root@centos:/var/ftp/pub# chown ftp:ftp test
3.本地用户的配置
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
idle_session_timeout=600
#控制通道,在600秒之内没有通信流量,FTP服务器会认为连接超时,会主动断开
data_connection_timeout=120
#数据通道,在120秒之内没有通信流量,FTP服务器会认为连接超时,会主动断开
ftpd_banner=Welcome to blah FTP service.
#登录的消息标语
chroot_list_enable=YES
#开启限制用户(列表)在家目录中,它与下面一行参数是配套使用
chroot_list_file=/etc/vsftpd/chroot_list
#与上一行配套使用,说明列表文件的路径,在这个文件中的用户就会被限制在自己的家目录
listen=YES
#开启vsftpd服务的独立运行模式
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
4.虚拟用户
匿名用户:虽然不用输入密码,但大家都统一使用同一个帐号,不便于个性化的配置
本地用户:虽然可以个性化配置,但是它使用的是系统实体帐号,它的安全风险极大
虚拟用户:兼有前两者的优点,既能个性化配置,又不使用系统实体帐号
1.将本地用户加入黑名单,禁止本地用户登录
root@centos:/etc/vsftpd# vi ftpusers
在这个文件最后,增加本地用户,禁止他们登录 FTP
2.建立ftp虚拟用户账号,并生成虚拟用户的数据库
root@centos:/etc/vsftpd# vi vuser
增加如下的用户和密码,然后保存退出
susan
123456
lily
654321
将上面的文本格式用户文件转成数据库文件
root@centos:/etc/vsftpd/vuser#db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
3.创建用于映射虚拟用户的真实用户
root@centos:/etc/vsftpd# useradd ftpuser -s /sbin/nologin
4.创建虚拟账号的家目录,并设置相应的权限
root@centos:/etc/vsftpd# cd /home/ftpuser/
root@centos:/home/ftpuser# mkdir susan
root@centos:/home/ftpuser# mkdir lily
root@centos:/home/ftpuser# chown ftpuser:ftpuser * -R //给予ftpuser实体帐号,在虚拟帐号子目录上的写权限
5.使用虚拟用户数据库文件配置pam的认证模块
root@centos:/home/ftpuser# cd /etc/pam.d/
root@centos:/etc/pam.d# vi vsftpd //编辑vsftpd身份验证的PAM策略文件,把原内容全部注释,再追加如下两行内容
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
6.配置vsftpd的主配置文件,开启虚拟用户,并将虚拟用户映射到真实用户上
root@centos:/etc/pam.d# cd ../vsftpd/
root@centos:/etc/vsftpd# vi vsftpd.conf //配置主配置文件,追加如下三行
guest_enable=YES //启用虚拟用户登录
guest_username=ftpuser //将虚拟用户映射到实体用户上
user_config_dir=/etc/vsftpd/vuser_conf/ //指定虚拟用户的子配置文件目录路径
7.虚拟用户配置文件user_config_dir
root@centos:/etc/vsftpd# mkdir vuser_conf //创建虚拟用户子配置文件的存放目录
root@centos:/etc/vsftpd# cd vuser_conf/
root@centos:/etc/vsftpd/vuser_conf# vi susan //新建同名的虚拟用户子配置文件,增加如下内容并保存
local_root=/home/ftpuser/susan
write_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
root@centos:/etc/vsftpd/vuser_conf# vi lily //新建同名的虚拟用户子配置文件,增加如下内容并保存
local_root=/home/ftpuser/lily
write_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
8.重启vsftpd服务,进行测试
root@centos:/etc/vsftpd/vuser_conf# systemctl restart vsftpd
root@centos:/etc/vsftpd/vuser_conf# systemctl status vsftpd