ftp?
FTP(文件传输协议)是INTERNET上仍常用的最老的网络协议之一,它为系统提供了通过网络与远程服务器进行传输的简单方法。
tcp/ip协议中ftp协议的默认端口为21
ftp服务器的部署
1.查看selinux服务状态,若为开启则需要关闭
可以看出这里的selinux是开启的,那么我们就需要编辑/etc/sysconfig/selinux
注修改selinux后需要重启计算机
2.配置yum源
cd /etc/yum.repos.d/
vim /rhel_dvd.repo
3.yum安装vsftpd lftp 两个服务
yum install vsftpd lftp -y
systemctl start vsftpd
systemctl enable vsftpd
4.火墙的配置
firewall-config
修改Configration为Permanent(永久),勾选ftp服务,然后重新读取防火墙
火墙的配置也可以不用图形化界面来设置,也可以用命令方式来设置:
firewall-cmd --permanent --add-serverice=ftp
firewall-cmd --reload
5.用主机使用lftp去测试
主机lftp 172.25.254.117
ls
若ls可出现输出,则成功
注:在用lftp去进行文件传输时一定要检查服务端vsftpd服务是否开启,还有服务端和客户端的防火墙状态
6.ftp服务的基本信息
软件安装包: vsftpd
默认发布目录: /var/ftp
协议接口: 21/tcp
服务配置文件: /etc/vsftpd/vsftpd.conf
报错的id的解析:
报错id | 报错id的意义 |
550 | 服务不允许 |
530 | 认证失败 |
500 | 文件权限过大(ftp的普通用户的家目录不能有写权限) |
553 | 本地文件系统权限过小 |
ftp配置文件
vim /etc/vsftpd/vsftpd.conf
通过man 5 vsftpd.conf查看帮助来使用不同的功能
匿名用户
anonymous_enable=YES|NO ##匿名用户登陆限制
本地用户
local_enable=YES|NO
write_enable=YES|NO
匿名用户的设定
1.匿名用户上传
vim /etc/vsftpd/vsftpd.conf
write_enable=YES ##匿名用户写功能开启
anon_upload_enable=YES ##允许匿名用户上传
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
systemctl restart vsftpd
上传:lftp连接后cd指定目录
put file
2.匿名用户家目录的修改
anon_root/directory ##该配置为匿名用户登陆时进入的目录
3.匿名用户上传文件默认权限修改
anon_umask=xxx
4.匿名用户下载
anon_world_readable_only=YES|NO
get xxx
5.匿名用户建立目录
anon_mkdir_write_enable=YES|NO
6.匿名用户删除
anon_other_write_enable=YES|NO
7.匿名用户使用用户身份修改
chown_uploads=YES ##所有匿名用户上传的文件的所属用户将会被更改为chown_name
chown_username=student ##匿名用户身份指定,用户必定是服务端已有的用户
发现file2的uid已经变为1000,即student用户
8.匿名用户上传最大上传速率
anon_max_rate=1024(bits)
测试:截取数据
dd if=/dev/zero of=/ / / bs=1M count=X(多少M)
put /绝对路径
发现上传速率为设置的速率
9.最大连接数
max_client=x ##允许链接ftp的最大主机数量
本地用户的设定
lftp时后面要加-u username
local_enable=YES|NO ##本地用户登陆限制
write_enable=YES|NO ##本地用户写权限限制
1.本地用户家目录修改
local_root=/directory ##用普通用户lftp登陆,发现本地用户登陆的是家目录,而不是默认的/var/ftp/pub
2.本地用户上传文件权限
local_umask=xxx
上传时得-u普通户用登陆,然后直接上传文件,文件默认上传到普通用户家目录,且权限已改
3.限制本地用户浏览根目录
所有用户被锁定到自己的家目录中
chroot_local_user=YES ##约107行左右,用户被锁后,就看不了服务端的文
件,解决办法:注释掉,或者设置黑白名单
chmod u-w /home/* ##用户家目录的权限不能太大,否则会出现500报错
其实chroot_local_user=YES代表的就是白名单,NO为黑名单,故开启限制后无法访问根目录
用户黑名单的建立:
用户黑名单的建立 ##需要注意的是,黑名单开启时,/etc/vsftpd/下是没有黑名单的,须得自行建立
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
白名单的建立:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
在这里我们就不修改chroot_list里的用户名了
4.限制本地用户登陆
黑名单:
vim /etc/vsftpd/ftpusers ##用户黑名单
vim /etc/vsftpd/user_list ##用户临时黑名单
可以很明显地看出黑名单的用户会出现530认证失败的报错
白名单:
vim /etc/vsftpd/vsftpd.conf
底部添加/userlist_deny=NO
/etc/vsftpd/user_list ##参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
注:在lftp时一定要将永久黑名大ftpusers的内容改回去,否则会一直530报错
ftp虚拟用户设定
1.创建虚拟账号身份
vim /etc/vsftpd/guestgroup ##文件名称任意
ftpuser1
123
ftpuser2
123
ftpuser3
123
进行hash加密
db_load -T -t hash -f /etc/vsftpd/guestgroup /etc/vsftpd/guestgroup.db
vim /etc/pam.d/guest ##文件名称任意
account required pam_userdb.so db=/etc/vsftpd/guestgroup #这里不用写db文件,否则生成的就是guestgroup.db.db
auth required pam_userdb.so db=/etc/vsftpd/guestgroup
vim /etc/vsftpd/vsftpd.conf
pam_service_name=guest ##用户身份检测服务
guest_enable=YES ##允许虚拟用户登陆
guest_username=ftp ##虚拟用户登陆身份
尝试用不同的虚拟账户登陆
2.虚拟账户独立家目录的设置
给每个虚拟用户一个指定目录
mkdir /var/ftpuserdir/guest{1..3} -p
vim /etc/vsftpd/vsftpd.conf
local_root=/var/ftpuserdir/$USER ##指定虚拟用户家目录($USER与每个虚拟用户名同)
user_sub_token=$USER ##使$USER在shell中生效,在vsftpd.conf也生效
mkdir /var/ftpuserdir/ftpuser{1..3}/pub
mkdir /var/ftpuserdir/ftpuser1/guestgroup1
mkdir /var/ftpuserdir/ftpuser2/guestgroup2
mkdir /var/ftpuserdir/ftpuser3/guestgroup3
3.虚拟帐号配置独立
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf
mkdir -p /etc/vsftpd/userconf
例如:将vsftpd.conf中的匿名用户权力禁止,然后编辑vim /etc/vsftpd/userconf/ftpuser1
anon_upload_enable=YES
然后实验发现只有ftpuser1可以有写(put)的权力,其他用户均会出现550报错
结果: