- 1.简介
- 2.FTP两种传输模式
- 3.安装vsftpd
- 4.设置开机启动vsftpd
- 5.启动vsftpd
- 6.查看ftp是否启动
- 7.开启防火墙,开放21端口
- 8.安装vsftpd虚拟用户需要的软件和认证模块
- 9.创建虚拟用户临时文件
- 10.生成虚拟用户数据认证文件
- 11.设置认证文件的权限为755
- 12.配置pam认证文件
- 13.新建一个系统用户(ftpuser)作为虚拟用户的映射,这个用户不用密码、登录
- 14.创建虚拟用户配置文件所放置的目录
- 15.设置vsftpd配置文件
- 虚拟用户拥有本地用户的权限将“xferlog_file=/var/log/xferlog”之前的“#”删除;并修改以下内容:
- 16.为每个虚拟用户创建配置文件
- 17.创建虚拟用户各自的家目录
- 18.设置权限
- 19.配置selinux允许ftp访问home和外网访问
- 20.重启vsftpd服务
- 21.客户端测试
- 可能遇到问题记录
1.简介
FTP,File Transfer Protocol,文件传输协议,基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。
2.FTP两种传输模式
1)FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
2)FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
注意
- centos 7默认是没有开启FTP服务的,必须手动开启。
- 安装服务修改配置文件之后,需要重启服务,使配置生效。
3.安装vsftpd
以上查询均无任何信息,说明vsftpd没有安装。现在通过命令“yum -y install vsftpd”直接在线安装,需要联网才可以正常进行,命令中的“-y”表示不用输入确定,直接一路安装到底。rpm -qa |grep vsftpd
yum list installed|grep vsftpd
yum -y install vsftpd
4.设置开机启动vsftpd
systemctl enable vsftpd.service
5.启动vsftpd
systemctl start vsftpd.service
6.查看ftp是否启动
ps -e |grep ftp
systemctl status vsftpd.service
7.开启防火墙,开放21端口
启动、关闭、重启防火墙firewall-cmd --permanent --zone=public --add-port=21/tcp
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
firewall-cmd --list-all
# 1.启动防火墙
systemctl start firewalld
# 2.禁用防火墙
systemctl stop firewalld
# 3.设置开机启动
systemctl enable firewalld
# 4.停止并禁用开机启动
sytemctl disable firewalld
# 5.重启防火墙
firewall-cmd --reload
特别说明:
如果是云服务器,需要再云服务器安全策略中开启端口。
8.安装vsftpd虚拟用户需要的软件和认证模块
yum -y install pam* libdb-utils libdb* –skip-broken
9.创建虚拟用户临时文件
添加如下内容:vi /etc/vsftpd/ftpusers.txt
文件中奇数行为用户名,偶数行为上一行用户对应的密码。vsuser01
123456
vsuser02
123456
vsuser03
123456
10.生成虚拟用户数据认证文件
db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/login.db
11.设置认证文件的权限为755
chmod 755 /etc/vsftpd/login.db
12.配置pam认证文件
在文件中注释掉原来的内容,然后加入下面两行内容:vi /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
13.新建一个系统用户(ftpuser)作为虚拟用户的映射,这个用户不用密码、登录
useradd ftpuser -s /sbin/nologin
14.创建虚拟用户配置文件所放置的目录
mkdir -p /etc/vsftpd/user_conf
15.设置vsftpd配置文件
在配置文件中将“anonymous_enable=YES”改为:vi /etc/vsftpd/vsftpd.conf
将“listen_ipv6=YES”改为:anonymous_enable=NO
listen=YES
在文件末尾加入以下内容:listen_ipv6=NO
# 启用虚拟用户
guest_enable=YES
# 映射虚拟用户到系统用ftpuser
guest_username=ftpuser
# 设置虚拟用户配置文件所在的目录
user_config_dir=/etc/vsftpd/user_conf
虚拟用户拥有本地用户的权限将“xferlog_file=/var/log/xferlog”之前的“#”删除;并修改以下内容:
建立根目录锁定的帐户文件virtual_use_local_privs=YES
# 锁定用户目录
chroot_local_user=YES
# 禁止用户列表功能virtual_use_local_privs=YES
# 锁定用户目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
touch /etc/vsftpd/chroot_list
16.为每个虚拟用户创建配置文件
创建第一个虚拟用户
加入内容为:vi /etc/vsftpd/user_conf/vsuser01
添加第二个虚拟用户:# 虚拟用户家目录路径
local_root=/home/ftpuser/vsuser01
# 允许虚拟用户有写得权限
write_enable=YES
# 允许匿名用户可以下载和读取的权限
anon_world_readable_only=YES
# 允许匿名用户有上传文件权限,在write_enable=YES时有效
anon_upload_enable=YES
# 允许匿名用户有创建目录权限write_enable=YES时有效
anon_mkdir_write_enable=YES
# 允许匿名用户有其他权限,在write_enable=YES时有效
anon_other_write_enable=YES
加入内容为:vi /etc/vsftpd/user_conf/vsuser02
添加第三个虚拟用户:local_root=/home/ftpuser/vsuser02
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
加入内容为:vi /etc/vsftpd/user_conf/vsuser03
local_root=/home/ftpuser/vsuser03
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
17.创建虚拟用户各自的家目录
mkdir -p /home/ftpuser/vsuser01
mkdir -p /home/ftpuser/vsuser02
mkdir -p /home/ftpuser/vsuser03
18.设置权限
chown -R ftpuser:ftpuser /home/ftpuser
19.配置selinux允许ftp访问home和外网访问
setsebool -P allow_ftpd_full_access on
setsebool -P tftp_home_dir on
20.重启vsftpd服务
systemctl restart vsftpd
21.客户端测试
浏览器测试
直接在浏览器中输入:ftp://vsuser01:123456@IP
命令行测试
在命令行中输入:ftp IP
然后依次输入:账号和密码。
ftp攻击测试
可能遇到问题记录
问题一:500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误的解决方式
解决方案:
在/etc/vsftpd/vsftpd.conf配置文件中添加了以下两句终于解决了问题。
修改后重启ftp服务器:chroot_local_user=YES ## 原本就有,取掉注释就好
allow_writeable_chroot=YES ## 添加
systemctl restart vsftpd.service
问题二:425 Failed to establish connection
解决方案:
登录成功但是无法获取目录,可以尝试设置被动PASV连接。
在vim /etc/vsftpd/vsftpd.conf
添加三行代码,启用PASV,开放6000-7000端口。
如果是对外网开放,在路由器的转发规则中,将6000-7000端口写入到iptables中白名单中。pasv_enable=YES
pasv_min_port=6000
pasv_max_port=7000
重启vsftpd服务 ``` systemctl restart vsftpdsudo iptables -A INPUT -p tcp --dport 6000:7000 -j ACCEPT
此外如果还是不行 1.检查端口规则,如果是云服务器在对应的控制台上开放相应的端口, 如阿里云的安全组。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12591990/1650434308680-6812da99-ee61-4ccb-bf04-ad033e0a8744.png#clientId=u8fede95a-5d4a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=315&id=uda9df596&margin=%5Bobject%20Object%5D&name=image.png&originHeight=425&originWidth=1673&originalType=binary&ratio=1&rotation=0&showTitle=false&size=45804&status=done&style=none&taskId=u41f1313e-87d0-4d91-9a6c-c95133b65ce&title=&width=1239.2593468036896)
<a name="VgjPR"></a>
# 拓展信息
<a name="itCTC"></a>
## vsftpd用户多目录配置
通过命令挂载实现
```basic
mount --bind /home/qingfeng/ /home/ftpuser/vsuser03/
取消挂载
umount /home/ftpuser/vsuser02/aa