第七章 VSFTP服务
第一节 FTP简介与原理
FTP简介
FTP(File Transfer Protocol)中文称为“文件传输协议”。用于Internet上的控制文件的双向传输。
- “下载”文件就是从远程主机拷贝文件至自己的计算机上;
- “上传”文件就是将文件从自己的计算机中拷贝至远程主机上。
主动模式
主动模式:服务的从20端口主动向客户端发起连接
被动模式
被动模式:服务端在指定范围内某个端口被动等待客户端连接
主动模式不好实验,客户端不在管理员的控制范围之内,FTP连接有可能被客户端的防火墙中断。
端口
FTP连接端口
- 控制连接:TCP 21,用于发送FTP命令信息
- 数据连接: TCP 20,用于上传,下载数据
第二节 FTP相关文件
常见的FTP服务器程序
- WIndows:IIS,Serv-U
- Linux:wu-ftpd(淘汰),Proftpd,Vsftpd(Very Secure FTP Daemon)
安装
Vsftpd-2.2.2-11.el6.i686.rpm
相关文件
- 主配置文件
- /etc/vsftpd/vsftpd.conf
-
用户控制列表文件
- /etc/vsftpd/ftpusers(黑名单,禁止登陆用户)
-
/etc/vsftpd/user_list(通过配置文件修改成白名单,只有这个上面的用户可以登陆)
默认禁止root登陆,因为密码是明文显示,防止被抓包
FTP相关用户
-
匿名用户:
anonymous或ftp -
本地用户
使用Linux系统用户和密码 -
虚拟用户
管理员自定义的模拟用户
注意事项
- 关闭防火墙
- 关闭SElinux
第三节 配置文件详解
/etc/vsftpd/vsftpd.conf
- anonymous_enable=YES 允许匿名用户登陆
- local_enable=YES 允许本地用户登陆
- write_enable=YES 允许本地用户上传
- local_umask=022 本地用户上传的默认权限
- dirmessage_enable=YES 用户进入目录时,显示.message文件中信息
- message_file=.message 指定信息文件(登陆界面警告信息)
- xferlog_enable=YES 激活记录日志
- connect_from_port_20=YES 主动模式数据传输接口
- xferlog_std_format=YES 使用标准的ftp日志格式
- #ftpd_banner=Welcome to blah FTP service.
登陆欢迎信息 - listen=NO 允许被监听
- pam_service_name=vsftpd 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
- userlist_enable=YES 用户限制登陆
- tcp_wrappers=YES 是否使用tcp_wrappers作为主机访问控制方式
常用全局配置
- listen_address=192.168.1.1 设置监听的IP地址
- listen_port 设置监听FTP服务的端口号
- download_enable=YES 是否允许下载文件
- max_per_ip=0 限制同一IP地址的并发连接数
被动模式
- pasv_enable=YES 开启被动模式
- pasv_min_port=24500 被动模式最小端口
-
pasv_max_port=24600 被动模式最多端口
大于10000,小于65535
常用安全配置
- #accept_timeout=60 被动模式,连接超时时间
- #connect_timeout=60 主动模式,连接超时时间
- #idle_session_timeout=600 600秒没有任何操作就断开端口连接
- #data_connection_timeout=120 资料传输时,超过500秒没有完成,就断开传输
第四节 客户端使用
-
使用命令行连接
ftp IP- -help 获取帮助
- -get 下载
- -mget 下载一批文件
- -put 上传
- -mput 上传一批文件
- -exit 退出
-
不支持目录下载,不支持断点续传
-
使用Windows对话框
在文件夹路径搜索页面输入ftp://192.168.44.3/输入服务器IP
支持目录下载,不支持断点续传 -
使用第三方工具
flashFXP
只要工具支持就可以目录下载,断点续传
第五节 匿名用户访问
anonymous_enable=YES 允许匿名用户访问
#anon_upload_enable=YES 允许匿名用户上传
#anon_mkdir_write_enable=YES 允许匿名用户建立目录
#anon_umask 设置上传的默认文件权限(默认是600)
匿名用户如果想上传,先修改配置文件,还得修改服务器中/var/ftp目录中pub目录的权限,把这个目录的所有者修改为ftp用户 chown ftp /var/ftp/pub,不能直接把权限修改为777,这样有很大的安全隐患
注意事项:
- 默认上传目录:/var/ftp/pub
- 如果允许上传,需要服务权限和系统目录权限同时允许
- vsfptd服务的伪用户是ftp
第六节 本地用户访问
第一讲 本地用户基本设置
本地用户基本配置
- local_enable=YES 允许本地用户登陆
- write_enable=YES 允许本地用户上传
- local_umask=022 本地用户上传的默认权限
- local_root=/var/ftp 设置本地用户的FTP根目录(注意目录权限)
- local_max_rate=0 限制最大传输速率(字节/秒)
把用户限制在家目录
chroot_local_user=YES
#开启用户目录限制(只有此行,把所有用户都限制在用户目录中)
在CentOS 7 中用yum下载的ftp,在这一步之后会报错
需要在配置文件中加入这条语句
allow_writeable_chroot=YES ##验证在vsftpd.conf中增加该项配置,vsftpd服务无法正常启动。
给一些人畅通无阻的权限的时候,需要把下面三条配置文件全打开
- chroot_local_user=YES
- chroot_list_enable=YES
-
chroot_listl_filer=/etc/vsftpd/chroot_list
写入/etc/vsftpd/chroot_list文件中的用户可以访问任何目录,其他用户限制在用户主目录
第二讲 用户访问控制
用户控制列表文件
- /etc/vsftpd/ftpusers(黑名单,禁止登陆用户)
- /etc/vsftpd/user_list(通过修改配置文件修改白名单,只有这个上面的用户可以登陆)
访问控制
这几条配置文件没有写
- userlist_enable=YES 开启用户访问控制
- userlist_deny=YES
-
userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户不能访问ftp服务器,没有写入的用户可以访问(默认如此)
我们需要改为- userlist_enable=YES 开启用户访问控制
- userlist_deny=NO
- userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问(默认如此)
不要把限制用户主目录和用户访问限制搞混
chroot_local_user=YES 用于把用户禁锢在主目录
uselist_enable=YES 用于用户访问控制
第七节 虚拟用户访问
第一讲 配置虚拟用户访问
配置虚拟用户登陆步骤
- 添加虚拟用户口令
- 生成虚拟用户口令认证文件
- 编辑vsftpd的PAM认证文件
- 建立本地映射用户并设置宿主目录权限
- 修改配置文件
- 重启vsftpd服务,并测试
- 调整虚拟用户权限
添加虚拟用户口令
vim /etc/vsftpd/vuser.txt
cangls 用户名
123 密码
bols 用户名
123 密码
生成虚拟用户口令认证文件
yum -y install db4-utils 如果没安装口令认证命令,需要安装
或者使用wget http://rpmfind.net/linux/centos/6.10/os/i386/Packages/db4-utils-4.7.25-22.el6.i686.rpm
安装
db_load -T -t hash -f /etc/vsftpd/vuser.txt
/etc/vsftpd/vuser.db 把文本文档转变为认证的数据库
编辑vsftpd的PAM认证文件
vim /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
注释掉其他的行,加入 这两行即可
注释掉其他行,可以禁止本地用户登陆,因为本地用户登陆时的验证依然依赖这个文件
建立本地映射用户并设置宿主目录权限
- useradd -d /home/vftproot -s /sbin/nologin vuser
此用户不需要登陆,只是映射用户
用户名必须和下一步配置文件中一致 - chmod 755 /home/vftproot
修改配置文件
vim /etc/vsftpd/vsftpd.conf,加入:
- guest_enable=YES 允许虚拟用户登陆
- guest_username=vuser FTP虚拟用户对应的系统用户
- pam_service_name=vsftpd PAM认证文件(默认存在)
重启vsftpd服务,并测试
systemctl restart vsftpd.service
此时虚拟用户可以登陆,查看,下载,不能上传
默认上传文件的位置是宿主用户的家目录
权限使用的是匿名用户权限进行管理
调整虚拟用户权限
- vim /etc/vsftpd/vsftpd.conf
- anonymous_enable=NO 关闭匿名用户登陆,更加安全(不影响虚拟用户登陆)
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_other_write_enable=YES 给虚拟用户设置权限,允许所有虚拟用户上传
第二讲 为每个虚拟用户建立自己的配置文件,单独定义权限
可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录
修改配置文件
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
指定保存虚拟用户配置文件的目录
手工建立目录
mkdir /etc/vsftpd/vusers_dir
为每个虚拟用户建立配置文件
vim /etc/vsftpd/vusers_dir/cangls
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
允许此用户上传
local_root=/tmp/cangls
给cangls指定独立的上传目录
建立上传目录
mkdir /tmp/vcangls
chown vuser /tmp/vcangls/
如果不给bols指定单独的配置文件,则遵守主配置文件(/etc/vsftpd/vsftpd.conf)的权限
配置完效果如下:
- 禁止匿名用户登陆(配置文件修改)
- 禁止本地系统用户登陆(pam文件修改)
- 允许虚拟用户登陆(配置文件修改)
- cangls的上传目录是/tmp/vcangls,并且允许查看,下载,上传
- bols的上传目录是虚拟用户的默认目录/home/vftproot,只能查看,下载。但是不能上传
第八节 总结
我是阿里云忠实用户!!!,我会在里面穿插基于阿里云CentOS7 FTP服务器搭建!!!!
匿名用户很简单,下载好启动服务就可以,不过非常不安全,
需要把匿名用户登陆修改为anonymous_enable=YES 默认即可,anon_upload_enable=YES 把匿名上传权限的注释去掉,
local_root=/var/ftp/,为匿名用户默认上传位置
修改/var/ftp/pub权限。允许匿名用户写入文件
,chmod o+w /var/ftp/pub/ 或者 chown ftp /var/ftp/pub,修改所有者,不能直接把权限修改为777,这样有很大的安全隐患
接着systemctl restart vsftpd.service重启服务即可
这种模式非常不安全,最好不要使用,这里只是介绍一下!!!!
所以只讲本地用户和虚拟用户
允许本地用户登陆
-
下载好之后,先把防火墙,selinux关闭,
-
创建一个新用户 useradd test1
设置密码 passed test1
123456 -
建立一个用户登陆FTP以后的家目录 mkdir/var/ftp/test
修改文件所有者,以及权限 chown -R test:test /var/ftp/test
进入 /etc/vsftpd/vsftpd.conf文件 -
主动模式:
- 需要把匿名用户登陆修改为anonymous_enable=NO ,local_enable=YES,write_enable=yes ,#listen_ipv6=YES,关闭监听IPv6 sockets,listen=YES 开启监听IPv4 sockets,
-
现在需要控制FTP用户登陆后的范围
chroot_local_user=YES 全部用户被限制在主目录
chroot_list_enable=YES 启用可以登陆用户白名单
chroot_list_file=/etc/vsftpd/chroot_list 指定白名单用户列表文件,列表中的用户不被锁定在主目录
allow_writeable_chroot=YES 新版vsftp在vsftpd.conf中增加该项配置,如果没有vsftpd服务无法正常启动。 - local_root=/var/ftp/test 设置登录用户的默认目录
-
被动模式
-
其他和主动模式一样,只需另外加入以下语句(阿里云环境需要开启被动模式,公网共享,连接不到服务器)
pasv_enable=YES 开启被动模式
pasv_address=<阿里云实例公网IP> 阿里云实例公网IP
pasv_min_port= 设置被动模式下,建立数据传输可使用的端口范围的最小值
pasv_max_port= 设置被动模式下,建立数据传输可使用的端口范围的最大值
建议把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
-
其他和主动模式一样,只需另外加入以下语句(阿里云环境需要开启被动模式,公网共享,连接不到服务器)
-
创建白名单
vim /etc/vsftpd/chroot_list 这里没有例外用户时,也必须创建chroot_list文件,内容可为空。
必须输入:wq 保存并退出 -
重启服务
systemctl restart vsftpd.service -
阿里云服务器用户需要设置安全组
-
主动模式:
 -
被动模式:

其中这里第二个安全组的端口范围是刚才文件中设置的
-
主动模式:
-
限制用户登陆需要用到黑名单
/etc/vsftpd/ftpusers
里面加入登陆的用户名 -
如果需要开启用户访问控制
首先写入
userlist_enable=YES 开启用户访问控制
接着在下面写入以下语句
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问(默认如此)
总结:- userlist_enable 是控制userlist_deny文件能否生效的开工,如果是YES,就可以生效,如果为NO,无论userlist_deny怎么调都没有作用。
- 当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入
- 而当为userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入)
- 另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
-
虚拟用户:
-
1.添加虚拟用户口令
vim /etc/vsftpd/vuser.txt
用户名一行,密码一行
保存退出 -
2.生成虚拟用户口令认证文件
- yum -y install db4-utils 如果没安装口令认证命令,需要安装
或者
wget http://rpmfind.net/linux/centos/6.10/os/i386/Packages/db4-utils-4.7.25-22.el6.i686.rpm
安装
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db 把文本文档转变为认证的数据库 - 编辑vsftpd的PAM认证文件
vim /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser /lib64/security/pam_userdb.so
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
注释掉其他的行,加入这两行即可
- yum -y install db4-utils 如果没安装口令认证命令,需要安装
-
3.建立本地映射用户并设置宿主目录权限
useradd -d /home/vftproot -s /sbin/nologin vuser
此用户不需要登陆,只是映射用户
用户名必须和下一步配置文件中一致
chmod 755 /home/vftproot -
4.修改配置文件
vim /etc/vsftpd/vsftpd.conf,加入:
guest_enable=YES 开始虚拟用户
guest_username=vuser FTP虚拟用户对应的系统用户
pam_service_name=vsftpd PAM认证文件(默认存在) -
5.重启vsftpd服务,并测试
-
6.调整虚拟用户权限
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO 关闭匿名用户登陆,更加安全(不影响虚拟用户登陆)
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES 给虚拟用户设置权限,允许所有虚拟用户上传 -
7.可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录
修改配置文件
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
指定保存虚拟用户配置文件的目录
手工建立目录
mkdir /etc/vsftpd/vusers_dir
为每个虚拟用户建立配置文件
vim /etc/vsftpd/vusers_dir/cangls
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
允许此用户上传
local_root=/tmp/vcangls
给cangls指定独立的上传目录
建立上传目录
mkdir /tmp/vcangls
chown vuser /tmp/vcangls/
-
OK 这个服务器就搭建好啦!!!!大家辛苦了!