0.实验环境
- 新node1主机:hostname为node1
- 关闭selinux
- 配置好ip
- 搭建好软件仓库
- 安装lftp
1.ftp介绍
ftp:file transfer proto
FTP 是 TCP/IP协议组中的协议之一,互联网中最老牌的文件传输协议。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
2.vsftpd安装及启用
dnf install -y vsftpd #server
dnf install -y lftp #client
systemctl enable --now vsftpd #开启vsftpd
systemctl status firewalld #查看火墙状态
ss -antlupe | grep ftp #查看端口
lftp 172.25.254.128 #本机登陆一下172.25.254.128可以成功查看,其他主机不行
rpm -qc vsftpd #查看配置文件
vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES #开启匿名访问,其他主机可以
systemctl restart vsftpd
firewall-cmd --permanent --add-service=ftp #火墙控制中加入ftp服务
firewall-cmd --reload
firewall-cmd --list-all
3.vsftpd基本信息
服务名称:vsftpd.service
配置目录:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
默认发布目录:/var/ftp
报错信息 | 解释 |
---|---|
550 | 程序本身拒绝 |
553 | 文件系统权限限制 |
500 | 权限过大 |
530 | 认证失败 |
4.匿名用户访问控制
lftp 172.25.254.128 当访问ftp服务时没有加入用户认证为匿名访问
lftp 172.25.254.128 -u westos 本地用户访问
4.1登陆控制
12 anonymous_enable=YES | NO
4.2家目录控制
32 anon_root=/westosdir
[root@node1 ~]# vim /etc/vsftpd/vsftpd.conf
[root@node1 ~]# systemctl restart vsftpd
[root@node1 ~]# mkdir /westosdir
[root@node1 ~]# touch /westosdir/yxy
[root@node1 ~]# lftp 172.25.254.128
lftp 172.25.254.128:~> ls
-rw-r--r-- 1 0 0 0 Nov 21 03:18 yxy
4.3上传控制
anon_upload_enable=YES|NO
4.4下载控制
anon_world_readable_only=NO 匿名用户可以下载不能读的文件
4.5目录建立控制
anon_mkdir_write_enable=YES|NO
4.6删除重命名控制
anon_other_write_enable=YES|NO
4.7登录数量控制
max_clients=2
4.8上传速率控制
anon_max_rate=102400
5.本地用户访问
5.1登录控制
local_enable=NO|YES
5.2家目录控制
local_root=/test
5.3写权限控制
write_enable=NO|YES
5.4上传文件权限控制
local_umask=077
5.6用户登录控制
/etc/vsftpd/ftpusers 用户登录控制永久黑名单
永久黑名单无论怎样设定都是黑名单,从名单中删除可以解锁
/etc/vsftpd/user_list 用户登录控制默认黑名单
默认黑名单可以变为白名单
5.6 用户登陆白名单
userlist_deny=NO
设定/etc/vsftpd/user_list为白名单
不在名单中的用户不能登陆ftp
5.7 锁定用户到自己的家目录中
chmod u-w /home/* 避免与下面命令冲突
chroot_local_user=YES锁定用户到自己家目录
为了防止用户登录到跟目中中,需要把他锁定在家目录里
5.8锁定用户到自己的家目录中的白名单
chroot_local_user=YES锁定用户到自己家目录
chroot_list_enable=YES开启锁定家目录白名单
chroot_list_file=/etc/vsftpd/chroot_list
5.9锁定用户到自己的家目录中的黑名单
chroot_local_user=NO默认用户不锁定到自己家目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
6.虚拟用户访问
普通用户登录ftp会有资源浪费和开放权力过大的隐患,只需要借助ftp身份不需要开放过多的权限。因此可以为ftp服务来构建用户信息而不使用系统信息。虚拟用户即在当前系统中没有用户身份,在ftp程序中才承认这个身份。
ftp服务在用户登录时,有pam插件在用户名和密码与单名保持一致时允许登录。
6.1建立虚拟用户过程
- 建立认证文件模板
cd /etc/vsftpd/
vim authfile #建立认证文件模板
cat /etc/vsftpd/authfile
user1
123
user2
123
user3
123
- 加密认证文件
db_load -T -t hash -f authfile authfile.db #加密认证文件
-T 转换 -t type -f 指定转换文件
cat /etc/vsftpd/authfile.db
������8:��эh^123user2[root@node1 ~]#
- 生成pam认证策略
cd /etc/pam.d
vim ftp-auth
[root@node1 ~]# cat /etc/pam.d/ftp-auth
account required pam_userdb.so db=/etc/vsftpd/authfile
auth required pam_userdb.so db=/etc/vsftpd/authfile
# requird 强制认证,pam_userdb.so 指定插件
- 指定认证策略文件
vim /etc/vsftpd/vsftpd.conf
139 pam_service_name=ftp-auth #指定认证策略文件
140 guest_enable=YES #指定虚拟用户身份开启
141 guest_username=ftp #指定虚拟用户在ftp服务器上的用户身份为ftp
systemctl restart vsftpd
- 测试
lftp 172.25.254.128 -u user1
虚拟用户登陆成功
6.2虚拟用户家目录的独立设定
- 建立虚拟用户家目录
mkdir -p /var/ftphome/user{
1..3}
touch /var/ftphome/user1/user1file
touch /var/ftphome/user2/user2file
touch /var/ftphome/user3/user3file
mkdir -p /var/ftphome/user{
1..3}/test
ls -lR /var/ftphome/
- 指定虚拟用户家目录
vim /etc/vsftpd/vsftpd.conf
local_root=/var/ftphome/$USER
user_sub_token=$USER
systemctl restart vsftpd
- 测试
lftp 172.25.254.128 -u user1/2/3 ---> ls
家目录改变
6.3虚拟用户配置独立
- 设定权限
chmod 775 /var/ftphome/user{
1..3}/test
chgrp ftp /var/ftphome/user{
1..3}/test
- 更改主配置文件
lftp 172.25.254.128 -u user1/2/3 都可以上传
vim /etc/vsftpd/vsftpd.conf
37 #anon_upload_enable=YES
38 #anon_other_write_enable=YES
39 #anon_umask=022
40 #anon_root=/westosdir
41 #anon_world_readable_only=NO
149 user_config_dir=/etc/vsftpd/confdir
- 编写独立配置文件,使得只有user1可以上传
mkdir /etc/vsftpd/confdir
touch /etc/vsftpd/confdir/user1
vim /etc/vsftpd/confdir/user1
1 anon_upload_enable=YES
systemctl restart vsftpd
- 测试
lftp 172.25.254.128 -u user1
可以上传,user2、user3不行