一、实验环境的配置及ftp的介绍
实验环境的配置:
两台主机之间能通信,并且服务端必须关闭selinux
只要客户端网络没有问题,出现功能错误都是服务端的问题
ftp的介绍:
互联网最老牌的文件传输协议
网站发布比较少用,企业内部比较常用
二、vsftpd服务
2.1vsftd服务的基本信息
vsftd服务的基本信息
服务名称:vsftpd.service
配置目录:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
默认发布目录:/var/ftp
报错信息:
550程序本身拒绝
553文件系统权限限制
500权限过大
530认证失败
2.2vsftpd服务的安装与启用
服务端安装vsftp这款软件
dnf install vsftpd -y
systemctl enable --now vsftpd
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
客户端安装lftp
dnf install lftp -y
lftp 172.25.254.100(服务器ip) 匿名用户登录
ls 显示的是530报错
lftp 172.25.254.100 -u westos 用的是服务器的用户westos
Password:输入密码后
ls就能看到westos用户家目录里面的所有文件了
这个时候ftp已经启动了,但是它目前只能本地用户登录,客户端登录不了
默认情况下ftp是不允许匿名用户登录
允许匿名用户登录
rpm-qc vsftpd 查询它的主配置文件
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
原先是匿名用户不能登录改成YES
lftp 172.25.254.100
ls 可以看到文件了,匿名用户默认登录位置是/var/ftp/这个目录(默认发布目录)
lftp 172.25.254.100(服务器ip) 匿名用户登录
这个时候你如果写的时候,你用的是ftp自带的系统用户身份ftp,这个身份在安装vsftp的时候自动建立
你在/var/ftp/底下建立文件,删掉该文件
lftp 172.25.254.100(服务器ip) 匿名用户登录
ls就能看见刚才建立的文件,看不见该文件了
三、ftp匿名访问控制
man 5 vsftpd.conf 查看所有功能具体参数
3.1匿名用户默认发布目录的指定
服务端
mkdir -p /mnt/yan
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
在主配置文件下空白处写
anon_root=/mnt
lftp 172.25.254.100(服务器ip) 匿名用户登录
ls
可以看见底下yan文件
quit退出登录
3.2匿名用户上传功能的设定
客户端上传某个文件到ftp服务器
lftp 172.25.254.100(服务器ip) 匿名用户登录
cd pub
put /mnt/yan
报错550,没有权限
服务端开启它的上传功能,该功能默认是关闭的
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
客户端,因为pub目录对于其它用户没有写权限
lftp 172.25.254.100(服务器ip) 匿名用户登录
cd pub
put /mnt/yan
报错553
服务端不能修改发布目录/var/ftp权限,如果修改过大777,客户端访问直接后ls,直接报错500
所以修改的发布目录里面的子目录
chmod 775 /var/ftp/pub/
chgrp ftp /var/ftp/pub/
这个时候客户端上传就能上传成功
lftp 172.25.254.100(服务器ip) 匿名用户登录
cd pub
put /mnt/yan
3.3匿名用户建立与删除目录的设定
默认情况下匿名用户不能自建目录,会报错550
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
开启该功能
同理服务器ftp修改主配置文件,开启删除功能
anon_other_write_enable=YES
rm -r 删掉
3.3匿名用户下载目录里文件功能
ftp服务器修改主配置文件,默认情况下,只有匿名有读权利的文件
anon_world_readable_only=NO
get filename 就能下载出来,下载在你在那个目录下进入的ftp你就下载在那个目录里面了
3.4匿名用户上传文件后文件的权限
默认情况下是600 -rw-------
修改主配置文件
anon-umask=022 保留权限只有02权限
777-022=755
755-111(文件)=644
所以上传文件后文件的权限为-rw-r–r–
所以建立文件是755 drwxr-xr-x
3.4匿名用户上传文件的身份和指定连接ftp服务器最大个数
用户上传文件的身份的更改
上传文件默认是ftp身份,我这块显示文件是1 40 50
id ftp查到的就是14 50
更改上传身份,修改主配置文件,在主配置文件的52和53行
将whoever改成你的用户,查询你的用户grep bash /etc/passwd
chown_uploads=YES
chown_username=whoever
指定连接ftp服务器最大个数
避免ddos攻击,和压力过大(正常防止压力过大用集群)
修改主配置文件,找个空行写max_clients=3
只允许最大连接为3个
3.5最大上传速率
dd if=/dev/zero of=/mnt/yan bs=1M count=1000
lftp 172.25.254.100
put /mnt/yan 可以看出每s百M速度
修改主配置文件,找个空行
anon_max_rate=102400 限制速度是100kb/s
四、本地用户的访问
4.1控制本地用户能否登陆和上传文件的权限
控制本地用户能否登陆
修改主配置文件,大概在17行
local_enable=YES 你改成NO,本地用户就登陆不了
lftp 172.25.254.100 -u westos 就登陆530报错了
本地用户上传文件的权限
本地用户上传的权限默认是644 -rw-r–r–
修改主配置文件,25行
local_umask=077 改成
这样文件权限是600,目录权限是700
-rw------ drwx------
4.2本地用户默认发布目录的指定和写权利的控制
默认本地用户登录是在自己的家目录里面
修改主配置文件,找个空行写
local_root=你指定的目录
本地用户写(上传,删除)权利的控制
修改主配置文件,21行,这个关闭后本地用户和匿名用户都写不了
write_enable=YES 改成NO
4.3本地用户登录限制和浏览限制
本地用户登录限制
默认情况下,本地有的用户都能用
在cd /etc/vsftpd
底下有ftpusers和user_list
这两个默认情况下是黑名单(名字出现在这两个文件任意一个,都不能访问ftp服务器)
即改即生效,修改该文件ftpusers和user_list其中一个,里面加入westos就相当于westos用户登录不了
但是默认用户不能登录的情况下(在主配置文件找个空行写入)userlist_deny=NO
,只有指定名单user_list下的用户可以登录(白名单)
默认情况下userlist_deny=YES
在主配置文件134行
userlist_enable=YES
表示userlist名单功能时开启状态
本地用户浏览限制
你本地用户登录以后除了可以浏览自己的家目录还浏览我服务器的/(任何的任何目录),这样不安全
修改主配置文件,在108行修改成YES,默认情况#(相当于NO)所有用户都能浏览/
chroot_local_user=YES
这个时候ftp安全性加强了,这个时候用户在自己家目录可写的权利会影响登录,所以
在服务端,去掉本地用户的写权限
chmod u-w /home/*
指定部分用户可以浏览/
在主配置文件111行
chroot_list_file=/etc/vsftpd/chroot_list列表里面的人不能访问/
如果想把chroot_list_file改成白名单,需要修改主配置文件108行NO变YES
chroot_local_user=YES
五、虚拟用户的认证部署
5.1认证程序与认证文件
现在的用户都是真实在服务器上面存在的用户,一般系统用户权利大,能登录ftp也可以登录其他服务,所以需要匿名用户,只能用于ftp认证,在系统中不存在
5.2认证文件的创建与加密
认证名单的制作:在/etc/vsftpd
vim ftpauth
user1
123
user2
123
user3
123
对认证名单加密:
db_load -T -t hash -f ftpauth ftpauth.db
5.3认证程序介绍
rpm -ql vsftpd 在安装的时候系统生成
里面有个文件 /etc/pam.d/vsftpd 认证策略
whatis pam
vim /etc/pam.d/vsftpd
account 是账号读取账号的时候会读取password-auth文件
auth 是认证,读取认证的时候也会读取password-auth这个文件
/etc/vsftpd/ftpusers 一直都是黑名单是因为它始终都是deny状态
vim /etc/pam.d/password-auth
auth 用途(密码认证) required功能(必须通过,否则拒绝) pam_faildelay.so delay=2000000使用的程序插件
find / -name pam_userdb.so
/usr/lib64/security/pam_userdb.so 系统的认证插件,可以直接调用
5.3认证策略(程序)的创立
输入账号,用pam_userdb.so程序看db=/etc/vsftpd/ftpauth文件对比,对比成功通行,不成功就拒绝
输入密码,用pam_userdb.so程序看db=/etc/vsftpd/ftpauth文件对比,对比成功通行,不成功就拒绝
vim /etc/pam.d/ftpauth
account required pam_userdb.so db=/etc/vsftpd/ftpauth(看这个文件,后面会自动加.so后缀)
auth required pam_userdb.so db=/etc/vsftpd/ftpauth
如果是db=/etc/vsftpd/ftpauth.so 会自动变成db=/etc/vsftpd/ftpauth.so.so
5.4认证程序添加到ftp服务中
修改主配置文件133行
修改原先参数
pam_service_name=vsftpd 原先的
pam_service_name=ftpauth
添加
guest_enable=YES 虚拟用户功能开启
guest_username=ftp 虚拟用户所使用到的真实服务器用户身份是ftp
在服务器上面
id user1 user2 user3都没有
在客户端
lftp 172.25.254.100 -u user1 可以使用
同理user2 user3 密码都是123
这三个用户只有ftp服务承认,其它服务不承认
六、虚拟用户的配置优化
6.1虚拟用户默认发布目录的指定
这三个用户进去都是在pub里面
lftp 172.25.254.100 -u user1 可以使用
同理user2 user3 密码都是123
让三个用户家目录独立
mkdir -p /ftphome/user{1..3}/pub
touch /ftphome/user1/user1file
touch /ftphome/user2/user2file
touch /ftphome/user3/user3file
修改主配置文件,找个空白处写
local_root=/ftphome/$USER
user_sub_token=$USER 变量声明参数
6.2虚拟用户的上传功能
所有用户上传
服务器,由于之前主配置文件设定参数可以上传,所有修改下权限即可,但是无法指定某些用户可以上传某些不可以
chmod 775 /ftphome/user{1..3}/pub
chgrp ftp /ftphome/user{1..3}/pub
man 5 vsftpd.conf
查/conf
添加主配置文件参数
user_config_dir=/etc/vsftpd/confdir 在此目录中与用户名字相同的文件为用户配置文件
mkdir /etc/vsftpd/confdir
此时user1 2 3都不能上传
此时user1可以上传user2 3不能上传
vim /etc/vsftpd/confdir/user1
anon_upload_enable=YES 允许上传