FTP的概念
FTP ( 文件传输协议 ) 是 INTERNET 上仍常用的最老的网络协议之一 , 它为系统提供了通过网络与远程服务器进行传输的简单方法。
在 RED HAT ENTREPRISE LINUX 7 中。 FTP 服务器包的名称为 VSFTPD , 它代表 Very Secure File TransferProtocolDamon 服务器名称也叫做 vsftpd
FTP的部署
服务端部署:
首先配置yum源

编辑文件vim haha.repo


安装vsftpd
安装成功
安装 lftp
开启vsftpd服务,并设置开机自启动

开启火墙,并添加ftp服务到火墙白名单
重新加载
查看,ftp服务已经添加到火墙白名单中
使用ftp访问主机(ls有内容显示,则代表登录成功,否则不成功)
关闭selinux
显示enforcing,则代表没有关闭
编辑selinux配置文件
将selinux的状态改为disabled
重启服务器(因为这个修改是内核级的,所以我们需要重启虚拟机)查看,修改成功
FTP服务的基本信息
软件安装包:vsftpd
默认发布目录:/var/ftp
协议接口:21/tcp
服务配置文件:/etc/vsftpd/vsftpd.conf
注意:编辑配置文件后,一定要记得重启服务
报错id的解析:
500 文件系统权限过大
530 用户认证失败
550 服务本身功能未开启
553 本地文件系统权限过小
FTP的安全部署
安全部署配置文件:/etc/vsftpd/vsftpd.conf
匿名用户的设定
通过编辑服务配置文件:/etc/vsftpd/vsftpd.conf,进行安全部署
为了方便后续的测试,给服务端新建一个用户,并设置密码
1.匿名用户
编辑以下配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES|NO 匿名用户是否可以登陆 (YES为可以登录)修改成NO,则匿名用户不能登录
systemctl restart vsftpd
编辑配置文件后,一定要重启服务以后就不再赘述

测试:
- 匿名用户上传
默认情况下,匿名用户是不能上传的
实现匿名上传的步骤:
step1编辑配置文件
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
anon_upload_enable=YES
step2在shell里
chgrp ftp /var/ftp/pub #匿名用户一般使用ftp用户的身份(安装ftp服务器后即产生该ftp用户)访问ftp服务器,所以需要将ftp目录的所有组改为ftp
chmod 775 /var/ftp/pub
测试
- ftp服务器家目录修改
新建一个目录xixi,并创建文件,若测试端登录后可以直接看到这些文件,则代表家目录修改成功

更改配置文件
vim /etc/vsftpd/vsftpd.conf
anon_root=/xixi

测试
4.匿名用户上传文件默认权限修改
anon_umask=xxx

测试
匿名用户在服务器建立目录(注意:进入pub后进行创建)
anon_mkdir_write_enable=YES|NO
测试
5.匿名用户下载
anon_world_readable_only=YES|NO 参数NO表示匿名用户可以下载
测试
匿名用户删除
anon_other_write_enable=YES|NO
测试
匿名用户使用的用户身份和权限修改
测试
6.最大上传速率
anon_max_rate=102400
不限速情况下上传速率达到很大
测试
将最大上传速率改为102400
可以看到上传速率很慢
7.最大链接数
max_clients=1 表示最多有1个可以连接
测试

本地用户的设定
vim /etc/vsftpd/vsftpd.conf
.1.本地用户是否可以登录
local_enable=YES|NO 是|否
测试
2.ftp是否对登录用户可写
write_enable=YES|NO

3.本地用户家目录修改(服务器中的内容为本地用户家目录中的内容)
local_root=/westos



4.本地用户上传文件权限
local-umask=xxx


5.限制本地用户浏览根目录,所有用户被锁在自己的家目录中
chroot_local_user=YES (将所有用户都锁住)
chmod u-w /home/*

名单建立
创建黑、白名单的目的:约束、允许某些特定用户登录系统,例如,一般禁止 root 登录 FTP,权限过高可能导致核心文件受到破坏
ftpusers:是真正意义上的黑名单,为什么这么说,因为这个名单不会受任何因素影响,也就是永久有效
user_list:可以是黑名单,也能变白,主要取决于 vsftpd.conf 中的 userlist_enable、userlist_deny 配置,可以有效,也能无效
可以有以下几种情况:
1.当 userlist_enable=YES 时,userlist_deny 才能起作用;如果 userlist_deny=NO,意味着 user_list 是一个白名单,如果 userlist_deny=YES,则 user_list 是一个黑名单。
2.如果 userlist_enable=NO 时,user_list 是一个白名单,本地用户也能登录,需要特别提醒的是,如果你启用白名单,匿名用户则无法登录FTP,即使在 vsftpd.conf 设置 anonymous_enable = YES 也不行,除非在 user_list 中添加 ftp 或者 anonymous ,才能进行匿名登录,
6.用户浏览黑名单建立 (只锁住黑名单里的)
1.在shell中
vim /etc/vsftpd/chroot_list 添加某些用户
2.在配置文件里
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
step1先建 lee tom用户

tom用户可以浏览根目录

用户白名单的建立
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 此时上述创建的文件,就会变成白名单,只有白名单的人不会被锁住,可以浏览根目录
之前的黑名单用户lee变为白名单用户
限制本地用户登录
vim /etc/vsftpd/ftpusers #用户黑名单,永久黑


vim /etc/vsftpd/user_list #临时黑
tom临时变成黑名单的用户

临时黑变白名单
编辑文件
userlist_deny=NO 在配置文件里设置参数

虚拟用户的管理
虚拟用户的创建
1.3A安全机制:帐号,密码和用户权限。
也就是 账号,认证(证明帐号是你的 pam认证)授权。
2.虚拟用户就是ftp的用户身份,但是在系统中没有,要想在系统中进行操作,还需再使用系统中真实存在的身份ftp。
创建虚拟账号身份
vim /etc/vsftpd/haha#文件名称任意
添加
user1 用户1
123 密码
user2
123
user3
123
db_load -T -t hash -f /etc/vsftpd/westosfile /etc/vsftpd/westosfile.db #加密文件


创建认证策略
vim /etc/pam.d/haha #文件名称随意
添加
account required pam_userdb.so db=/etc/vsftpd/haha
auth required pam_userdb.so db=/etc/vsftpd/haha
字段1:账号 密码
字段2:请求允许访问或者拒绝
字段3:验证程序 ,pam_userdb.so 是系统的插件
字段4: 验证是否与该文件内容匹配, 不用给文件后后面加db 后缀,它会自动加db后缀。

编辑vsftpd配置文件使更改生效
vim /etc/vsftpd/vsftpd.conf
pam_service_name=haha
guest_enable=YES


虚拟用户的授权
虚拟用户身份指定
guest_username=ftpuser
chmod u-w /home/ftpuser
虚拟用户家目录独立设定(使虚拟用户登录进去不再是ftp用户的默认家目录)
mkdir /var/ftpuserdir/user{1..3} -p
mkdir /var/ftpuserdir/user{1..3}/pub -p
touch /var/ftpuserdir/user1/user2file
touch /var/ftpuserdir/user2/user2file
touch /var/ftpuserdir/user3/user3file

编辑配置文件,添加
local_root=/var/ftpuserdir/$USER
user_sub_token=$USER

在shell里
chgrp ftp /var/ftpuserdir -R
chmod 775 /var/ftpuserdir/user{1..3}/pub

在shell里直接echo /home/U S E R 就 可 以 输 出 用 户 的 家 目 录 , 除 了 r o o t , r o o t 在 / r o o t 里 。 但 是 我 们 在 文 件 中 编 写 , 环 境 是 f t p , f t p 并 不 直 接 识 别 USER 就可以输出用户的家目录,除了root,root在/root里。 但是我们在文件中编写,环境是ftp,ftp并不直接识别USER就可以输出用户的家目录,除了root,root在/root里。但是我们在文件中编写,环境是ftp,ftp并不直接识别语法,加这个user_sub_token是为了让ftp识别操作
虚拟账号配置独立(想让哪个用户可以干什么,更安全)
首先应该先将vsftpd的配置文件里公共的权限都关闭
mkdir -p /etc/vsftpd/user_conf
vim /etc/vsftpd/user_conf/user1 #此文件中设定的所有参数,此文件优先级最高,此文件表示user1具有的权限
添加你想让user1具有的权限,如:
anon_upload_enable=YES #让它可以下载文件


vim /etc/vsftpd/vsftpd.conf
添加
user_config_dir=/etc/vsftpd/user_config


注意:
本文中只有修改了配置文件,均要执行systemctl restart vsftpd 重启让配置生效.