1,实验环境
新建一个虚拟机node1,配置步骤:
1, 开始配置网络;
2, selinux 关闭:用vim /etc/selinux/config 编辑SELINUX=disabled,可用getenforce命令查看;
3, 然后cd /etc/yum.repo.d/ vim westos.repo编写仓库文件:编写内容:
[AppStream]
Name= AppStream
Baseurl=http://10.4.17.141/westos/AppStream
gpgcheck=0
[BaseOS]
Name= BaseOS
Baseurl=http://10.4.17.141/westos/BaseOS
gpgcheck=0
4, [root@node1~]# dnf clean all
[root@node1~]# dnf list lftp
[root@node1~]# dnf install lftp
2,vsftpd 安装及启用
[root@node1~]# dnf search lftp
[root@node1~]# dnf search httpd
[root@node1~]# dnf install vsftpd httpd -y
[root@node1~]# systemctl enable –now vsftpd
[root@node1~]# systemctl status firewalld #火墙可以开着
[root@node1~]# ss –antlupe | grep ftp
[root@node1~]# lftp 172.25.254.100 #访问不通
[root@node1~]# rpm –qc vsftpd
[root@node1~]# vim /etc/vsgtpd/vsfypd.conf
编写:12行的改为anonymous_enable=YES
[root@node1~]# systemctl restart httpd
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 #访问通了
[root@node1~]# ls –ld /var/ftp
[root@node1~]# ls /var/ftp
[root@node1~]# ls
[root@node1~]# touch /var/ftp/westosfile
[root@node1~]# lftp 172.25.254.100 #显示不了
[root@node1~]# firewall-cmd --permanent --add-service=ftp
[root@node1~]# firewalld-cmd reload #重新启动后就能访问了lftp 172.25.254.100
[root@node1~]# firewall-cmd –list-all #有了ftp
3,vsftpd 基本信息
信息 | 含义 |
---|---|
服务名称: | vsftpd.service |
配置目录 | /etc/vsftpd |
主配置文件 | /etc/vsftpd/vsftpd.conf |
默认发布目录 | /var/ftp |
550报错 | 程序本身拒绝(服务相应功能未开启) |
553报错 | 文件系统权限限制 |
500报错 | 权限过大 |
530报错 | 认证失败(一般是输入密码错误) |
4,匿名用户访问控制
%上传控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_upload_enable=YES
[root@node1~]# systemctl restart vsftpd
[root@node1~]# chmod 775 /var/ftp/pub
[root@node1~]# chgrp ftp /var/ftp/pub
[root@node1~]# lftp 10.4.17.241
lftp 10.4.17.241:~> ls
lftp 10.4.17.241:~> cd pub
lftp 10.4.17.241:/pub> put /etc/passwd #上传文件
lftp 10.4.17.241:/pub> ls
lftp 10.4.17.241:/pub> quit
[root@node1~]# id ftp
[root@node1~]# ls –ld /var/ftp/pub
%删除重命令控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_other_write_enable=YES
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub> rm group #删除group
lftp 172.25.254.100:/pub> ls #已被删除
lftp 172.25.254.100:/pub> mv passwd hello #把passwd改为hello
lftp 172.25.254.100:/pub> ls
lftp 172.25.254.100:/pub> quit
%目录建立控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_mkdir_write_enable=YES
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub> mkdir test #建立test目录
lftp 172.25.254.100:/pub> ls #test已被建立
lftp 172.25.254.100:/pub> quit
%下载控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_world_readable_only=NO ##匿名用户可以下载不能读的文件
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub>get hello #下载hello
lftp 172.25.254.100:/pub> quit
[root@node1~]# ls #有下载的hello
%匿名用户上传文件的用户身份设定
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:chown_upload=YES
chown_username=westos #一定是存在的用户
chown_upload_mode=0644 #赋予权限
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub> put /etc/passwd 上传
lftp 172.25.254.100:/pub> ls #/etc/passwd已被上传,且在westos用户的id
lftp 172.25.254.100:/pub> quit
[root@node1~]# id westos
%匿名用户上传文件权限设定
anon_umask=xxx
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_umask=022 #此时权限=666-022=644#且此时的chown_upload=YES chown_username =westos是屏蔽的,当不屏蔽时上传文权限将不等于此参数设定,因为指定用户身份后就不是匿名的了
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub> put /etc/inittab 上传
lftp 172.25.254.100:/pub> ls #/etc/ inittab已被上传,查看权限是644
lftp 172.25.254.100:/pub> quit
%匿名用户上传文件的用户身份设定
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:chown_upload=YES
chown_username=westos #一定是存在的用户
chown_upload_mode=0644 #赋予权限
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub> put /etc/shadow 上传
lftp 172.25.254.100:/pub> ls #/etc/ shadow已被上传,且在westos用户的id
lftp 172.25.254.100:/pub> ls #查看权限是644
lftp 172.25.254.100:/pub> quit
[root@node1~]# id westos
%家目录控制
[root@node1~]#cd
[root@node1~]#mkdir /westos_ftp
[root@node1~]# touch /westos_ftp/westosfile
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_root=/westosdir_ftp #家目录给新创建的文件夹,改回默认的就把这个注释掉
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls #默认家目录为/westos_ftp
lftp 172.25.254.100:/pub> quit
%登陆控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anonymous_enable=YES
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls #能ls代表可以登录
%登陆数量控制:
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:max_clients=2 #最大的连接数量不能超过2,但设置前已经进入的就还能用,而且退出还能连,但只能连续不退出连两个以上
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
[root@node1~]# lftp 172.25.254.100 #不退出,只能连续登两个,在登就不行了。但是设置编写之前登录的多个shell界面还是可以使用的,但每个shell界面也是只能不退出的连续等两次
lftp 172.25.254.100:/pub> quit
lftp 172.25.254.100:/pub> quit
[root@node1~]# Journal –xe 查看日志来排查错误
%上传速率控制
[root@node1~]# find / -size +100M
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anon_max_rate=102400 #限制之后上传速率就在100左右
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> cd pub
lftp 172.25.254.100:/pub> put /usr/lib64/firefox/libxul.so 上传大于100M的文件,发现上传速率很慢
lftp 172.25.254.100:~> ls
lftp 172.25.254.100:~> rm –fr libxul.so
lftp 172.25.254.100:/pub> quit
%操作完成
5.本地用户的访问
%操作,本地用户的相关
首先重新建立三个用户lee,westos,linux ,密码都改为westos,家目录都是干净的,用ls /home/westos/ 查看,su-登录到lee中touch leefile 登录westos中touch westosfile 登录linux中touch linuxfile.
[root@node1~]# ls /home/westos/
[root@node1~]# ls /home/lee/
[root@node1~]# ls /home/linux/
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> ls
lftp [email protected]:~> quit
%登陆控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:anonymous_enable=NMOP #把yes改为nmop
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> ls #不能ls,即不能登录访问
lftp [email protected]:~> quit
%家目录控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:local_root=/westosdir_ftp #家目录给新创建的文件夹,改回默认的就把这个注释掉,那各自用户是各自的家目录。
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> ls #默认家目录为/westos_ftp,对所有的用户奇效
lftp [email protected]:~> quit
%写权限控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:write_enable=NO #YES改为NO,所有用户就不能写了
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> ls #能浏览根
lftp [email protected]:~> put /etc/passwd #报错550
lftp [email protected]:~> quit
%上传文件权限控制
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:local_umask=022 #权限=666-022=644
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> ls #查看权限
lftp [email protected]:~> quit
%用户登陆控制
/etc/vsftpd/ftpusers ##永久黑
/etc/vsftpd/user_list ##默认黑
用户登陆白名单
userlist_deny=NO #设定/etc/vsftpd/user_list 位白名单#不在名单中的用户不能登陆 ftp
%锁定用户到自己的家目录中
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:chroot_local_user=YES #去掉注释,锁定用户到自己的家目录中
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> ls #浏览根不能,拒绝写
lftp [email protected]:~> chmod u-w /home/*
lftp [email protected]:~> ls #就可以了
lftp [email protected]:~> cd / #所有的用户都被锁到家目录里了,不能切换到根
lftp [email protected]:~> quit
%锁定用户到自己的家目录中的白名单
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:chroot_local_user=YES #若chroot_local_user=NO,所有的用户都不会被锁到家目录里,都能切到根
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #去掉注释
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> echo westos > /etc/vsftpd/chroot_list #写入westos用户,就会被允许切到根,属于白名单
lftp [email protected]:~> cd / #可以切到根下
lftp [email protected]:~> quit
%锁定用户到自己的家目录中的黑名单
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:chroot_local_user=NO #YES时/etc/vsftpd/chroot_list就是白名单,NO时就是黑名单,黑名单里写进的用户是被锁定到家目录里,不能切到其他目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@node1~]# lftp 172.25.254.100 –u westos #指定用户登录
Passwd:
lftp [email protected]:~> echo westos > /etc/vsftpd/chroot_list #写入westos用户,就会被允许切到根,属于白名单
lftp [email protected]:~> cd / #黑名单不能切到根下
lftp [email protected]:~> quit
%用户登陆控制
Cd /etc/vsftpd/ #ls 查看个文件
/etc/vsftpd/ftpusers ##永久黑 root在里面,永久黑时,无论做什么操作都是黑名单
/etc/vsftpd/user_list ##默认黑
%用户登陆白名单
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容:添加userlist_deny=NO #设定/etc/vsftpd/user_list 位白名单#不在名单中的用户不能登陆 ftp。userlist_deny=YES时/etc/vsftpd/user_list为黑名单不能登录。
[root@node1~]#vim /etc/vsftpd/user_list #添加westos,restart vsftpd; westos就能登录ls
%操作完成
6.虚拟用户访问
%操作:
1.建立虚拟用户过程
[root@node1~]# vim /etc/vsftpd/authfile #建立认证文件模板。里面写虚拟用户及密码,id user1 是不存在的,只适用于ftp
编辑内容:
user1 #用户
123 #用户密码
user 2
123
user 3
123
2, [root@node1~]#cd /etc/vsftpd/
[root@node1~]# db_load -T -t hash -f authfile authfile.db ##加密认证文件 -T 转换 -t type -f 指定转换文件
[root@node1/etc/vsftpd/]#ls #文件authfile.db存在
3. [root@node1/etc/vsftpd/]# vim /etc/pam.d/ ftp-auth
编辑内容:
account required pam_userdb.so db=/etc/vsftpd/authfile #pam_userdb.so是看门大爷,读取db=/etc/vsftpd/authfile文件里的内容
auth required pam_userdb.so db=/etc/vsftpd/authfile
4. [root@node1~]# vim /etc/vsftpd/vsftpd.conf
编辑内容
pam_service_name=ftp-auth ##指定认证策略文件,上面所编写的文件
guest_enable=YES ##指定虚拟用户功能开启
guest_username=ftp ##指定虚拟用户在 ftp 服务器上的用户身份
[root@node1~]# systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u user1 #指定用户登录
Passwd:123
lftp [email protected]:~>ls #能登陆
[root@node1~]# lftp 172.25.254.100 –u user2 #指定用户登录
Passwd:123
lftp [email protected]:~>ls#能登陆
%操作完成
建立虚拟用户:
7.虚拟用户家目录的独立设定
%操作:每个用户的家目录是在一起的,现在要把每个用户的家目录建立
[root@node1~]# mkdir -p /ftphome/user{1..3}
[root@node1~]#touch /ftphome/user1/user1file
[root@node1~]# touch /ftphome/user2/user2file
[root@node1~]# touch /ftphome/user2/user2file
[root@node1~]# mkdir –p /var/ftphome/user{1..3}/westos
[root@node1~]# ls –Rl /var/ftphome/ #可以看到各自用户里有建立的相应文件
[root@node1~]#vim /etc/vsftpd/vsftpd.conf
编辑内容:
local_root=/ftphome/$USER
user_sub_token=$USER
systemctl restart vsftpd
[root@node1~]# lftp 172.25.254.100 –u user1 #指定用户登录
Passwd:123
lftp [email protected]:~>ls #看家目录属于自己建立的user1file
lftp [email protected]:~> quit
[root@node1~]# lftp 172.25.254.100 –u user2 #指定用户登录
Passwd:123
lftp [email protected]:~>ls#看家目录属于自己建立的user2file
lftp [email protected]:~> quit
%操作完成
8,用户配置独立
%操作
[root@node1~]# chmod 775 /var/ftphome/user{1..3}/westos
[root@node1~]# chgrp ftp /var/ftphome/user{1..3}/westos
[root@node1~]# lftp 172.25.254.100 –u user1 #指定用户登录
Passwd:123
lftp [email protected]:~>ls #能登陆
lftp [email protected]:~> put /etc/passwd # 能上传
lftp [email protected]:~> quit
[root@node1~]# lftp 172.25.254.100 –u user2 #指定用户登录
Passwd:123
lftp [email protected]:~>ls##能登陆
lftp [email protected]:~> put /etc/passwd # 能上传
lftp [email protected]:~> quit
%让user1可以上传user2,3不能上传
[root@node1~]#vim /etc/vsftpd/vsftpd.conf
注释掉
#anon_upload=YES
#anon_other_write_enable=YES
#anon_umask=022
#anon_world_readable_only=NO
此时user1,2,3所有的用户就都不能上传,550服务不允许
[root@node1~]# vim /etc/vsftpd/vsftpd.conf
编写内容:添加user_config_dir=/etc/vsftpd/confdir #该文件必须存在 ,写法用man 5 vsftpd.conf
[root@node1~]# mkdir /etc/ vsftpd/confdir
[root@node1~]# cd / etc/ vsftpd/confdir
[root@node1~]# vim user1
编写:anon_upload_enable=YES
此时user1可以上传user2,3不能上传
[root@node1~]# lftp 172.25.254.100 –u user1 #指定用户登录
Passwd:123
lftp [email protected]:~>ls #能登陆
lftp [email protected]:~> put /etc/passwd # 能上传
lftp [email protected]:~> quit
[root@node1~]# lftp 172.25.254.100 –u user2 #指定用户登录
Passwd:123
lftp [email protected]:~>ls##能登陆
lftp [email protected]:~> put /etc/passwd # 不能上传
lftp [email protected]:~> quit
%操作完毕