一、VSFTP实验部署:匿名用户验证实验:

### --- 注:先关闭服务器和客户机上的防火墙和SElinux
### --- 匿名用户验证实验:
~~~ 匿名用户权限控制

anonymous_enable=yes // 启用匿名用户
anon_umask=022 // 匿名用户所上传文件的权限掩码
anon_root=/var/ftp // 匿名用户的FTP根目录
anon_upload_enable=YES // 允许上传文件
anon_mkdir_write_enable=YES // 允许创建目录
anon_other_write_enable=YES // 开发其他写入权限(删除、覆盖、重命名)
anon_max_rate=0 // 限制最大传输速率(0为不限速,单位:bytes/秒)
### --- 实验需要与流程:
### --- 注意:在客户端登录后,默认情况下是可以下载的,但不能上传
### --- 实验可以上传

~~~ a、anon_upload_enable=YES
~~~ b、在/var/ftp/下创建上传目录
~~~ c、修改上传目录的权限或所有者,让匿名用户有写入权限
### --- 实验创建目录和文件其他操作

anon_mkdir_write_enable=YES // 允许创建目录
anon_other_write_enable=YES // 删除文件,文件改名,文件覆盖
### --- 用户进入某个文件夹时,弹出相应的说明:

~~~ a、在对应目录下创建.message文件,并写入相应的内容
~~~ b、确认dirmessage_enable=YES是否启用
~~~ c、尝试切换目录好看效果(同义词登录仅提示一次)
### --- 实现上传的文件可下载

~~~ 默认情况下开放上传权限后,上传的文件是无法被下载的,
~~~ 因为文件的其它人位置没有r权限设置anon_umask=022,
~~~ 可以让上传的文件其他人位置拥有r权限,然后才能被其他人下载

二、本地用户验证实验:

### --- 本地用户权限控制

local_enable=YES // 是否启用本地系统用户
local_umask=022 // 本地用户所上传文件的权限掩码
local_root=/var/ftp // 设置本地用户的FTP根目录
chroot_local_user=YES // 是否将用户禁锢在主目录
local_max_rate=0 // 限制最大传输速率
ftpd_banner=Welcome to blah FTP service // 用户登录时显示的欢迎信息
userlist_enable=YES & userlist_deny=YES // 禁止/etc/vsftpd/user_list 文件中出现的用户名登录FTP
userlist_enable=YES & userlist_deny=NO // 仅允许/etc/vsftpd/user_list文件中出现的用户登录FTP
//配置文件:ftpusers // 禁止/etc/vsftpd/ftpusers文件中出现的用户名登录FTP权限比user_list更高,即时生效
### --- 实验需求与流程:
### --- 服务端需要创建用户并设置密码(所创建的用户,不需要登录操作系统,仅用来登录VSFTP)

useradd -s /sbin/nologin username
### --- 将所有用户禁锢在自己的家目录下
~~~ 注:默认没有禁锢用户时,客户端登录后可以随意切换目录,查看文件所在位置和文件名

chroot_local_user=YES
### --- 开启用户家目录限制,限制所有用户不能随便切换目录
### --- 将部分用户禁锢在自己的家目录下

chroot_list_enable=YES
~~~ 开启白名单功能,允许白名单中的用户随意切换目录
chroot_list_file=/etc/vsftpd/chroot_list
~~~ 白名单文件所在位置(需自己创建)
### --- 配置文件:/etc/vsftpd/sftpusers

~~~ 所有写入此文件内的用户名都不允许登录ftp,立刻生效。
### --- 修改被动模式数据传输使用端口

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=35000

三、虚拟用户验证实验:

### --- 建立FTP的虚拟用户的用户数据库文件(在/etc/vsftpd)
vim vsftpd user
~~~ 注:该文件名可以随时定义,文件内容格式,奇数行用户,偶数行密码

db_load —T -t hash -f vsftpd.user vsftpd.db
~~~ 将用户密码的存放文本转化为数据库类型,并使用hash加密

chmod 600 vsftpd.db
~~~ 修改文件权限为600,保证其安全性
### --- 创建FTP虚拟用户的映射用户,并制定其用户家目录
~~~ 创建virtual用户作为ftp的虚拟用户的映射用户

useradd -d /var/ftproot -s /sbin/nologin virtual
### --- 建立支持迅疾用户的PAM认证文件,添加虚拟用户支持

cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
~~~ 使用模板生成自己的认证配置文件,方便一会调用
~~~ 编辑新生成的文件,vsftpd.pam(清空原来内容,添加下列两行)
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userad.so db=/etc/vsftpd/vsftpd
~~~ 在vsftpd.conf文件中添加支持配置
~~~ 修改:
pam_service_name=vsftpd.pam
~~~ 添加:
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir
### --- 为虚拟用户创建独立的配置文件,启动服务并测试
~~~ 注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉
~~~ 用户名可以上传:

anon_upload_enable=YES // 允许上传文件
~~~ 用户可以创建目录或文件
anon_mkdir_write_enable=YES // 允许穿件目录
~~~ 用户可以修改文件名:
anon_upload_enable=YES // 允许上传文件(为了覆盖开启的)
anon_other_write_enable=YES // 允许重名和删除文件/覆盖
~~~ 注:给映射用户的家目录设置otr让虚拟用户有读权限

四、openssl+vsftpd加密验证方式

### --- 拓展:使用tcpdump工具进行指定端口抓包,抓取ftp登录中的数据包

tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 来源ip
-i // interface:指定tcpdump需要监听的接口
-n // 对地址以数字方式显示,否则显示为主机名
-nn // 除了-n的作用外,还把端口显示为数值,否则显示端口服务名
-X // 输出包的头部文件,会以16进制的ASCII两种方式同时输出。
-xx // 产生更详细的输出
### --- 查看是否安装了openssl
rpm -q openssl

### --- 查看vsftpd是否支持openssl
ldd /usr/sbin/vsftpd |grep libssl
### --- 生成加密信息的秘钥和证书文件位置
/etc/ssl/certs/
a、openssl genrsa -out vsftpd.key 1024 // 建立服务器私钥,生成RSA秘钥

~~~ 需要以此输入国家,地区,城市,组织,组织单位,Email等信息,最重要的是有一个common name可以写你的名字或者域名,如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报,生成的csr文件交给CA签名后形成服务端自己的证书
c、openssl x509 -req -days 365 -sha256 -in vsftpd.csr -singkey vsftpd.key -out vsftpd.crt
~~~ 使用CA服务器签发证书,设置证书的有效期等信息
~~~ 注意1:生成秘钥和证书文件后,将本目录/etc/ssl/certs/的权限修改为500.
~~~ 注意2:在实验环境中可以用命令生成测试,在生产环境中必须要在hosts证书厂商注册(否则浏览器不识别)
### --- 修改注配置文件/etc/vsftpd/vsftpd.conf

ssl_enable=YES // 启用ssl认证
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES // 开启tlsv1.sslv2.sslv3都支持
allow_anon_ssl=YES // 允许匿名用户(虚拟用户)
force_anon_logins_ssl=YES
force_anon_data_ssl=YES // 匿名登录和传输时强制使用ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES // 本地登录和传输时强制使用ssl
rsa_cert_file=/etc/ssl/certs/vsftpd.crt // rsa格式的秘钥
~~~ 注:秘钥文件要在配置文件中单独声明(写入配置文件时,注释要单独一行,否则会报警)
### --- 重启服务:
service vsftpd restart

### --- 测试(使用第三方客户端连接)
//FileZilla-FTP(第三方客户端工具)
~~~ 连接测试时选择:
~~~ 服务器类型:
~~~ 服务器类型:显示TLS/SSL
~~~ 登录类型:一般或匿名











Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart

                                                                                                                                                   ——W.S.Landor