文章目录
一、VSFTP的概述
1.1 什么是VSFTP
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,全称为Very Secure FTP。
1.2VSFTP连接的类型
- 控制连接
- 持续连接,使用TCP端口21,用于用户指令的收发
- 数据连接
- 按需连接,使用TCP端口20,用于上传下载数据
1.3 VSFTP的工作模式
-
Port模式(主动模式)
FTP客户端先和服务器的TCP21端口通讯建立连接,用来发送命令,客户端需要接收数据时在这个连接上发送PORT命令。PORT命令包含了客户端的信息,在传送数据时服务器使用TCP20端口连接至客户端的指定端口发送数据。FTP服务器必须和客户端端建立一个新的连接来传送数据。
-
Passive模式(被动模式)
FTP客户端首先和服务器的TCP21端口建立连接,用来发送命令,连接建立后客户端发送Pasv命令,服务器收到Pasv命令后打开一个临时端口(1023~65535)并通知客户端在这个端口上传送数据,客户端连接FTP服务器的临时端口,然后FTP服务器将通过这个端口传送数据。
1.4 VSFTP传输模式
-
Binary模式:不对数据进行任何处理,适用与可执行文件、压缩文件、图片等数据传输。
-
ASCII模式:进行文本传输时自动适配目标操作系统的结束符。
在Linux的红帽发行版本中VSFTP默认使用Binary模式,如需切换输入ascii即可转换为ACSII模式,输入bin转换为Binary模式
1.5VSFTP的验证方式
-
匿名用户验证
用户账号 用户账号密码 工作目录 默认权限 ftp或anonymous 无 /var/ftp 下载 -
本地用户验证
用户账号 用户账号密码 工作目录 默认权限 本地用户/etc/passwd 用户密码/etc/shadow 用户的宿主目录 上传、下载、修改 -
虚拟用户验证
用户账号 用户账号密码 工作目录 默认权限 创建 指定 指定 指定
二、部署VSFTP
2.1 部署VSFTP
#关闭防火墙和SELinux
[root@centos-01 ~]# systemctl stop firewalld
[root@centos-01 ~]# sudo systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@centos-01 ~]# sudo setenforce 0
[root@centos-01 ~]# getenforce
Permissive
[root@centos-01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@centos-01 ~]# grep SELINUX=disabled /etc/selinux/config
SELINUX=disabled
#使用yum安装vsftpd
[root@centos-01 ~]# yum -y install vsftpd
#查看安装是否成功
[root@centos-01 ~]# rpm -qa | grep vsftpd
vsftpd-3.0.2-27.el7.x86_64
#启动vsftpd服务
[root@centos-01 ~]# systemctl start vsftpd
#设置vsftpd开机自启动
[root@centos-01 ~]# systemctl enable vsftpd
#查看vsftpd服务是否开机自启动
[root@centos-01 ~]# systemctl is-enabled vsftpd
enabled
2.2 匿名用户验证
#修改配置文件/etc/vsftpd/vsftpd.conf
[root@centos-01 ~]# vi /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #启用匿名访问
anon_root=/var/ftp #匿名用户上传文件的权限掩码
anon_upload_enable=YES #匿名用户的FTP根目录
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #开放其他权限(删除、覆盖、重命名)
anon_max_rate=0 #限制最大传输速率,单位bytes/s,0为不限速
dirmessage_enable=YES #显示该目录需要注意的内容,对应目录下.message文件配置对应内容
#创建匿名用户的上传文件夹
[root@centos-01 ~]# mkdir /var/ftp/anon_upload
#将新创建的文件夹权限改为777
[root@centos-01 ~]# chmod 777 /var/ftp/anon_upload/
#编辑.message文件
[root@centos-01 ~]# vi /var/ftp/anon_upload/.message
匿名用户目录,匿名用户拥有完全权限。
#重启vsftp服务
[root@centos-01 ~]# systemctl restart vsftpd
#客户端验证
C:\Users\86186>ftp
ftp> open 192.168.64.130
连接到 192.168.64.130。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.64.130:(none)): ftp
331 Please specify the password.
密码:
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
anon_upload
pub
226 Directory send OK.
ftp: 收到 21 字节,用时 0.00秒 21.00千字节/秒。
ftp> cd anon_upload
250-匿名用户目录,匿名用户拥有完全权限。
250 Directory successfully changed.
ftp> pwd
257 "/anon_upload"
ftp> put F:\hfs.zip #上传一个文件
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 1114972 字节,用时 0.00秒 278743.00千字节/秒。
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
hfs.zip #文件已上传
226 Directory send OK.
ftp: 收到 12 字节,用时 0.00秒 12000.00千字节/秒。
ftp> rename hfs.zip hfs1.zip #重命名文件
350 Ready for RNTO.
250 Rename successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
hfs1.zip
ftp> delete hfs1.zip #删除上传的文件
250 Delete operation successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
2.3 本地用户验证
#修改配置文件/etc/vsftpd/vsftpd.conf
[root@centos-01 ~]# cat /etc/vsftpd/vsftpd.conf
local_enable=YES #是否启用本地用户
local_umask=022 #本地用户上传文件权限掩码
local_root=/var/ftp #本地用户FTP根目录
local_max_rate=0 #限制最大传输速率
write_enable=YES #登录用户是否有写权限
ftpd_banner=Welcome to FTP service! #欢迎信息
userlist_deny=NO #禁止/etc/vsftpd/user_list中出现的用户名登录
chroot_local_user=YES
#创建用于ftp使用的用户,并禁止该用户登录系统
[root@centos-01 ~]# useradd -s /sbin/nologin ftp1
[root@centos-01 ~]# useradd -s /sbin/nologin ftp2
#修改密码
[root@centos-01 ~]# passwd ftp1
[root@centos-01 ~]# passwd ftp2
#禁止ftp2登录
[root@centos-01 ~]# vi /etc/vsftpd/user_list
...
ftp2
#重启服务
[root@centos-01 ~]# systemctl restart vsftpd
2.4 虚拟用户验证
#建立FTP虚拟用户数据库文件
#用户名密码文本文件,奇数行用户、偶数行密码
[root@centos-01 ~]# vi /etc/vsftpd/vsftpd.user
ftpu01
12345678
ftpu02
12345678
#将建立的用户名密码文本文件转换为数据库类型,并使用hash加密
[root@centos-01 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd.user /etc/vsftpd/vsftpd.db
#创建virtual用户作为ftp的虚拟用户的映射用户并指定家目录为/var/ftproot
[root@centos-01 ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@centos-01 ~]# chmod o+x /var/ftproot/
[root@centos-01 ~]# chmod a-w /var/ftproot/
#生成认证配置文件
[root@centos-01 ~]# cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
[root@centos-01 ~]# vi /etc/pam.d/vsftpd.pam
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
[root@centos-01 ~]# vi /etc/vsftpd/vsftpd.conf
#anonymous_enable=YES
#anon_root=/var/ftp
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#anon_max_rate=0
local_enable=YES
#local_root=/var/ftp
pam_service_name=vsftpd.pam
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir
#创建虚拟用户配置文件
[root@centos-01 ~]# mkdir /etc/vsftpd/dir
[root@centos-01 ~]# vi /etc/vsftpd/dir/ftpu01
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
#重启vsftp服务
[root@centos-01 ~]# !sys
systemctl restart vsftpd
ftp> open 192.168.64.130
连接到 192.168.64.130。
220 Welcome to FTP service!
200 Always in UTF8 mode.
用户(192.168.64.130:(none)): ftpu01
331 Please specify the password.
密码:
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> pwd
257 "/"