ftp介绍
ftp:file transfer proto是互联网中最老牌的文件传输协议
vsftpd安装
1.yum install vsftpd -y
2.关闭selinux和firewalld
selinux:
[root@rhel7_node1 ~]# getenforce
Enforcing ##由getenforce可以查看出:selinux是开启状态
关闭selinux:
vim /etc/sysconfig/selinux
SELINUX=disabled ##设置为disabled
reboot ##然后重启一下
firewalld:
关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
3.如果想在xixi_node里面使用lftp命令,则要先进行安装,相当于火狐浏览器一样,是用于浏览的软件【不是安装vsftpd,因为vsftpd是服务】
systemctl start vsftpd
,systemctl enable vsftpd
- 安装lftp:
yum install lftp -y
ls
后如果可以列出信息,代表可以被访问,如果列不出信息,则代表不能被访问
- ssh [email protected]
vsftpd基本信息
- 服务名称:vsftpd.service
- 配置目录: /etc/vsftpd
- 主配置文件: /etc/vsftpd/vsftpd.conf
- 默认发布目录: /var/ftp
命令 | 查看内容 |
---|---|
rpm -ql vsftpd | 服务名称:vsftpd.service |
默认发布目录: /var/ftp | |
rpm -qc vsftpd | 配置目录: /etc/vsftpd |
主配置文件:/etc/vsftpd/vsftpd.conf |
- 报错信息:
报错内容 | 报错信息 |
---|---|
500 | 权限过大 |
530 | 认证失败 |
550 | 程序本身拒绝 |
553 | 文件系统权限限制 |
匿名用户访问控制
1.匿名用户访问
命令 | 表示 |
---|---|
lftp 172.25.254.24 | 当访问ftp服务时没有加入用户认证为匿名访问 |
lftp 172.25.254.24 -u westos | 本地用户访问 |
本地访问时可以先看该用户是否存在
- 使用匿名访问与本地用户访问方式
2.vim /etc/vsftpd/vsftpd.conf
查看主配置文件
注意:更改完配置文件后,一定要对vsftpd服务进行重启
- 控制匿名用户登陆
anonymous_enable=YES|NO
- 家目录控制
anon_root=/software
之前看到的内容是在/var/ftp,更改后所看到的就是/software目录下的内容
- 上传控制
anon_upload_enable=YES|NO
想要上传xixi_clone的密码到xixi里面,但是此处报了两次错。550(程序本身拒绝)553(文件系统权限限制)
1.如果没有开启匿名用户上传功能,即此处是NO,则会报错550
2.此时打开上传功能即可,再次上传则提示553
我们先给他个满权限试试
3 .我们先给他个满权限试试
chmod 777 /var/ftp/pub
之后会发现给满权限后会有一个报错:500(权限过大)
默认的发布用户是不可写的,即如果权限超过755后,别人再用ftp访问的时候,服务直接就会进行限制
此时xixi_clone里面的内容就成功上传到xixi里了
- 下载控制
anon_world_readable_only=NO ##匿名用户可以下载不能读的文件
密码上传后如果想要进行下载,此时会先报550
我们可以先使用man 5 vsftpd.conf
先进行查看,下图表示了:“如果是开启的,匿名用户只能下载他可读的文件,即匿名用户不能下载其不可读的文件”,注意它本身是YES,所以想要下载的时候要添加到配置文件中的应为NO
在那里进行登陆的,下载的文件就在哪里
- 目录建立控制
anon_mkdir_write_enable=YES|NO //表示匿名用户是否能建立目录
可用?来查看我们可以进行的操作,我们会发现,不能进行touch来创建文件,但是存在mkdir可以建立目录
接下来我们将尝试一下
1 .mkdir westos后,此时会出现550报错
2.设置匿名用户可以建立目录
- 删除重命令控制
anon_other_write_enable=YES|NO
man 5 vsftpd.conf查询,表示了:设置成YES以后,匿名用户在做操作的过程中,除了可以上传和建立目录以外还可以进行其他事情:比如删除,重命名
实现删除与重命名
- 登陆数量控制:
每lftp登陆一个,就会建立一个链接。建立的链接越多,服务器的负载也就越大。
1.控制最大登陆数量
max_clients=2 上传速率控制
设定好了之后,一次性最多可以登陆两个,之后登陆的进行排队等待
2.控制上传速率
anon_max_rate=102400 //100K
截取1G大小的数据到/mnt中
每秒28M左右
我们尝试下对上传速度进行限制,我们发现匿名用户受到的限制
本地用户并没有受到限制
本地用户的访问
vim /etc/vsftpd/vsftpd.conf
查看主配置文件
local_enable=NO|YES //表示本地用户能否登陆
- 登陆控制
useradd lee
echo lee | passwd --stdin lee
lftp 192.168.0.10 -u lee
如果密码输入的是错误的,则会出现530报错
- 家目录控制
local_root=/software //指定在了/software中
默认是在家目录下,如果指定家目录的话,则会在指定目录下
- 写权限控制
write_enable=NO|YES
本地用户默认权限是可以写,当修改为NO后,本地用户不可写
- 上传文件权限控制
local_umask=077
- 用户登陆控制
cd /etc/vsftpd
/etc/vsftpd/ftpusers ##永久黑名单
/etc/vsftpd/user_list ##默认黑名单,即默认的是黑名单,但是我们可以把他修改为白名单
将lee添加进ftpusers,即改即生效。
添加进黑名单后,就不能登录了
- 用户登陆白名单
userlist_deny=NO //如果不想设置白名单了,就把这条命令注释掉即可。
设定/etc/vsftpd/user_list位白名单,不在名单中的用户不能登陆ftp。因为名单中没有lee,所以本地用户lee登陆失败。
我们在名单中加入westos,在进行查看,因为westos在白名单中,所以可以登录。
注意:如果出现westos在永久黑名单的这种情况,那么哪怕把他加入到用户白名单中,也没有办法继续登陆
- 锁定用户到自己的家目录中
chmod u-w /home/*
chroot_local_user=YES
- 锁定用户到自己的家目录中的白名单
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
将lee用户设置进白名单,此时我们可以发现lee用户可以浏览其他的地方
- 锁定用户到自己的家目录中的黑名单
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
虚拟用户访问
-
虚拟用户
在我们当前系统中没有这个用户身份,只有在ftp程序中才承认这个用户身份的存在 -
虚拟用户的价值
如果我们在系统中建立一个普通用户来作为ftp的登陆用户的话,我们开放的权力就太大了,并且资源浪费的也就太多了。如果有些功能我们不想开放给其他用户,只想给他个登陆身份。所以我们现在可以专门为ftp服务构建一系列的认证体系,不让其使用系统认证体系,这就是虚拟用户的价值。
cd /etc/pam.d后vim vsftpd
auth和account用的都是系统中 的password认证方式,ls后可发现password-auth
1.建立虚拟用户
- 建立认证文件模板
vim /etc/vsftpd/ftp_auth_file
westos1 #此处小心差错,看看是否有空格。因为空格也是一个字符!!
123
westos2
123
westos3
123
此时我们需要注意,是否在写的时候不小心多输入了一个空格!这个如果没有注意i,在后期差错真的很难办
- 加密认证文件
// -T 转换 -t type -f 指定转换文件
db_load -T -t hash -f ftp_auth_file ftp_auth_file.db
如果需要再新加用户,还是需要重新加密认证文件
vim /etc/pam.d/westos
,名字可以随意,但是要在pam.d这个目录下,否则程序不识别
account required pam_userdb.so db=/etc/vsftpd/
ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/
ftp_auth_file //写的时候不用加.db后缀,默认自动加
- 修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=westos ##指定认证策略文件
guest_enable=YES ##指定虚拟用户功能开启
guest_username=ftp ##指定虚拟用户在ftp服务器上的用户身份
- systemctl restart vsftpd
- 之后可以在客户端进行测试,登陆到的时我们匿名用户所使用的身份的位置去
- 都成功后可以发现,在我们的系统中westos1,westos2,westos3都不存在
2.虚拟用户家目录的独立设定
- 建立标识文件
mkdir -p /ftpuserdir/westos{1..3}
touch /ftpuserdir/westos1/westos1file
touch /ftpuserdir/westos2/westos2file
touch /ftpuserdir/westos3/westos3file
- 指定登录到对应用户的目录下
vim /etc/vsftpd/vsftpd.conf
local_root=/ftpuserdir/$USER
user_sub_token=$USER //使其可以沿用系统里面的用法
systemctl restart vsftpd
$USER这串字符可以表示当前用户
3.用户配置独立
- 创建一个pub目录,用户可以在里面写东西
mkdir /ftpuserdir/westos{1..3}/pub
chmod 755 /ftpuserdir/westos{1..3}/pub
chgrp /ftpuserdir/westos{1..3}/pub
-
上传文件,此时会报错550(配置不允许)
此时打开这个anon_upload_enable=YES
-
打开后就能成功上传了,此时westos1/2/3均可以正常上传
如果此时要对上传的用户身份进行限定 -
man 5 vsftpd.conf进行查看
如果我们设定的值时我们/etc/vsftpd/user_conf这个目录,如果登陆的用户时chris,那么chris的配置目录就是和这个/etc/vsftpd/user_conf/chris相同的文件 -
在主配置文件
user_config_dir=/etc/vsftpd/user_config #在此目录中与用户名称相同的文件为用户配置文件
anon_upload_enable=NO #并且将权限设置为默认全关
- 此时不能进行上传
- 此时我们设置westos2可以,其他不可以
mkdir /etc/vsftpd/user_config
vim /etc/vsftpd/user_config/westos3
anon_upload_enable=YES
systemctl restart vsftpd
- 设定完成后westos3用户可以上传文件,westos1和westos2不行
如果想还原默认的配置文件,删除后重装vsftpd即可
[root@haha ~]# rm -fr /etc/vsftpd //删除
[root@haha ~]# dnf reinstall vsftpd -y //重装
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
^[Last metadata expiration check: 1:15:04 ago on Sat 29 Feb 2020 02:16:12 PM CST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Reinstalling:
vsftpd x86_64 3.0.3-28.el8 westosAppStream 180 k
Transaction Summary
================================================================================
Total size: 180 k
Installed size: 356 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: vsftpd-3.0.3-28.el8.x86_64 1/1
Reinstalling : vsftpd-3.0.3-28.el8.x86_64 1/2
Running scriptlet: vsftpd-3.0.3-28.el8.x86_64 1/2
Running scriptlet: vsftpd-3.0.3-28.el8.x86_64 2/2
Cleanup : vsftpd-3.0.3-28.el8.x86_64 2/2
Running scriptlet: vsftpd-3.0.3-28.el8.x86_64 2/2
Verifying : vsftpd-3.0.3-28.el8.x86_64 1/2
Verifying : vsftpd-3.0.3-28.el8.x86_64 2/2
Installed products updated.
Reinstalled:
vsftpd-3.0.3-28.el8.x86_64
Complete!
[root@haha ~]#