前期准备:
在虚拟机上
vim /etc/sysconfig/selinux ##关闭内核加强型火墙
SELINUX=disabled
reboot
getenforce ##确认内核加强型火墙已经关闭
hostnamectl 查看系统版本
yum install lftp -y
1.ftp的定义
ftp:// ##文本传输协议
2.ftp协议提供的软件
在rhel7中:
vsftpd
3.部署ftp服务
ftp服务的基本信息
软件安装包: vsftpd
默认发布目录: /var/ftp
协议接口: 21/tcp
服务配置文件: /etc/vsftpd/vsftpd.conf
报错id的解析:
530 | #用户认证失败 |
---|---|
500 | #文件系统权限过大 |
553 | #本地文件系统权限过小服务器的权限系统拒绝操操 |
550 #服务本身功能未开放 |
1)安装ftp服务
yum install vsftpd -y
2)开启ftp服务
systemctl start vsftpd
systemctl enable vsftpd
3)设置防火墙永久允许ftp服务运行
方法1:直接通过命令实现
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
firewall-cmd --list-all
方法2:通过图形进行设置
在主机上测试是否成功开启ftp服务
4.ftp服务的管理
编辑ftp配置文件
vim /etc/vsftpd/vsftpd.conf
注意:每次编辑配置文件后需要重启ftp服务才能生效,编辑时每行后面不要加空格否则服务会起不来
匿名用户
anonymous_enable=YES|NO ##匿名用户是否可以登陆
当anonymous_enable=NO时
再次从真机上登陆时会发现无法使用匿名用户登陆
本地用户
local_enable=YES|NO ##本地用户是否可以登陆
wirte_enable=YES|NO ##ftp是否对登陆用户可写
1)匿名用户上传
vim /etc/vsftpd/vsftpd.conf
wirte_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
测试:
如果你按着这个步骤来仍然报错553那说明你前期准备没做或者做了以后虚拟机reset了
2)匿名用户家目录修改
anon_root=/westos
systemctl restart vsftpd
mkdir /westos
touch /westos/westosfile
测试:
3)匿名用户上传文件默认权限修改
anon_umask=022
测试:
4)匿名用户建立目录
anon_mkdir_write_enable=YES|NO
测试:
5)匿名用户下载
anon_world_readable_only=YES|NO ##设定参数值为no表示匿名用户可以下载
测试:
6)匿名用户删除
anon_other_write_enable=YES|NO
测试:
7)匿名用户使用的用户身份修改
chown_uploads=YES
chown_username=student
chown_upload_mode=0644
测试:
上传文件的所有人变为了student,权限为644
8)最大上传速率
anon_max_rate=102400 ##100k
测试:
9)最大链接数
max_clients=2
测试:
第一个连接成功
第二个连接成功
第三个连接失败
10)本地用户家目录的修改:
local_root=/westos
测试:
11)本地用户上传文件权限
local_umask=022
测试:
12)限制本地用户浏览/目录
所有用户被锁定到自己的家目录中
chroot_local_user=YES #禁止用户访问/目录
chmod u-w /home/*
注意:ftp的家目录不能有写权限
看到500报错 将w权限去除即可
测试:
用户黑名单的建立 #黑白名单的建立取决于默认权限chroot_local_user=是禁止还是允许,
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
systemctl restart vsftpd
touch /etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list #编辑后立即生效
测试:
用户student被所在自己的家目录中
其他用户可以访问/目录
用户白名单的建立
chroot_local_user=YES
chroot_list_ecable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
测试:
student用户登陆可以访问/目录
其他用户登陆被锁在自己家目录下
13)限制本地用户登陆
vim /etc/vsftpd/ftpusers ##用户永久黑名单,只要出现在此黑名单你就永远是黑的
测试:
使用student用户身份连接失败
使用其他用户身份连接成功
vim /etc/vsftpd/user_list ##用户临时黑名单
用户白名单设定
userlist_deny=NO
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只有在名单中出现的用户可以登陆ftp
测试:
使用student用户身份可以成功登陆
使用其他用户身份无法登陆
14)虚拟用户的设定:
创建虚拟帐号身份
vim /etc/vsftpd/guestfile ##文件名称任意
db_load -T -t hash -f /etc/vsftpd/guestfile /etc/vsftpd/guestfile.db ##对文件指定hash加密
ls /etc/vsftpd/ ##可以看到加密文件生成
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd ##编辑vsftpd配置文件我们可以看到认证的名称为pam,认证方式为vsftpd
rpm -ql vsftpd ##查看vsftpd的安装目录,找到管理认证方式的文件/etc/pam.d/vsftpd
vim /etc/pam.d/vsftpd ##查看其书写格式
vim /etc/pam.d/westos ##手动编写一个认证管理文件文件名称任意
account | required | pam_userdb.so | db=/etc/vsftpd/guestfile |
---|---|---|---|
帐号 | 认证方式 | 认证插件 | 读取文件 |
auth | required | pam_userdb.so | db=/etc/vsftpd/guestfile |
认证 |
注意:该文件内文件后缀会自动补齐,如果你输入db=/etc/vsftpd/guestfile.db 退出保存后就会被识别为db=/etc/vsftpd/guestfile.db.db,产生报错
vim /etc/vsftpd/vsftpd.conf
pam_service_name=westos ##设定认证方式
guest_enable=YES ##开启虚拟用户认证
guest_username=ftp ##虚拟帐号身份指定
systemctl restart vsftpd
测试:
成功使用虚拟用户身份登陆
15)虚拟用户家目录的修改
mkdir /var/ftpuserdir/westos{1…3} -p ##创建虚拟用户家目录
vim /etc/vsftpd/vsftpd.conf
指定虚拟用户家目录:
systemctl restart vsftpd.service
mkdir /var/ftpuserdir/westos{1…3}/pub ##在各个目录下创建文件以示区别
touch /var/ftpuserdir/westos1/westos1file
touch /var/ftpuserdir/westos2/westos2file
touch /var/ftpuserdir/westos3/westos3file
测试:
16)虚拟帐号配置独立
chmod 775 /var/ftpuserdir/westos*/pub/ ##不改报错553
chgrp ftp /var/ftpuserdir/westos*/pub/
vim /etc/vsftpd/vsftpd.conf
将匿名用户权限全部屏蔽
user_config_dir=/etc/vsftpd/userconf
mkdir -p /etc/vsftpd/userconf ##目录创建和你在user_config_dir=后面写的一样,写错报错550
vim /etc/vsftpd/userconf/westos1
anon_upload_enable=YES
systemctl restart vsftpd.service
测试:
只有虚拟用户westos1可以上传文件