Vsftpd安装与配置
目录
1. Vsftpd介绍
(1)简介
- FTP(文件传输协议)全称是:Very Secure FTP Server。安全性是它的一个最大的特点 。Vsftpd是linux类操作系统上运行的ftp服务器软件。
- vsftpd使用ftp协议,该协议属于应用层协议。它是典型的c/s架构,ftp服务端用来存储文件,ftp客户端可以通过ftp协议连接服务端实现上传和下载资源。
- vsftp提供三种登陆方式:1.匿名登录 2.本地用户登录 3.虚拟用户登录
- Ftp会话时采用了两种通道:
- 控制通道(21端口):与Ftp服务器进行沟通的通道,链接Ftp发送ftp指令都是通过控制通道来完成的。
- 数据通道(20端口):数据通道和Ftp服务器进行文件传输或则列表的通道 。默认被动模式。
(2)特点
- 安全性高:针对安全性作了严格的、特殊的处理,比其他早期的FTP服务器软件有了很大进步。
- 稳定性好:VSFTPD的的运行更加稳定,处理并发请求数更多(单机可以支持4000个并发连接)
- 速度更快:在ASCII模式下是同类服务器的2倍
- 配置简单:不需要任何特殊的目录结构,匿名配置更简便
- 支持基于IP的虚拟FTP服务器
- 支持虚拟用户:每个虚拟用户均可得到独立的配置
- 支持PAM认证方式
- 支持带宽限制
- 支持tcp_wrappers
(3)功能介绍
- 文件档案传递,通过在服务器和客户端之间建立两条联机信道(命令信道和数据流信道),完成服务器上文件的管理和传输。
- 用户分类管理,VSFTPD 服务器提供如下3种不同不同的类型:
- local_user(linux 登录用户)
- guest(访客也称之虚拟用户)
- Anonymous(匿名用户)
- 利用三种用户类型可对其分配不同的权限及资源管理。
- 限制或解除用户Home目录(chroot),我们能根据需要将特定的用户限制其工作范围使恶意使用者无法造成更大影响。
- 命令和日志记录,我们通过配置可以很轻松找到日志,从而对FTP服务器运行状态了如指掌。
(4)工作模式
- FTP的传输摄影的是较为可靠的TCP封包协议,在建立连接之前会先进行三次握手。
- VSFTPD分为主动(active)模式和被动(Passive)模式,下面分别将对两种模式进行说明。
- 主动模式
- 建立命令信道通讯,客户端会取一个大于1024的端口号来与FTP服务器的21号端口进行通讯。
- 通知服务端使用active且告知连接端口,并告知服务端应该使用什么方式来连接那个端口。
- FTP服务器主动向客户端通信,FTP 服务器由命令通道了解客户端的需求后,会主动的由 Port20向客户端的 Port Y 联机
被动模式:
- 建立命令信道,该过程与主动模式一致
- PASV联机请求,客户端发出PASV联机请求,等待服务器回应。
- PASV联机相应,服务端启动数据接口Port pasv并通知客户端可以联机。
- 建立数据信道,客户端取用>1024端口进行连接。
(5)传输模式
- Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等
- ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等
Linux的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用
切换方式: 在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式。
2. Vsftpd安装
(1)安装服务和客户端工具
#安装vsftpd服务
#安装ftp、lftp客户端工具,建议使用lftp
[root@localhost ~]# yum install vsftpd ftp lftp -y
#2.启动服务
[root@localhost ~]# systemctl start vsftpd
(2)匿名用户访问配置
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf.bak | grep -v "#" | grep -v "^$" > /etc/vsftpd/vsftpd.conf
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
#匿名用户模式设置
#匿名用户访问是否开启
anonymous_enable=YES
#开启匿名用户创建文件权限
anon_mkdir_write_enable=YES
#开启匿名用户修改、删除文件权限
anon_other_write_enable=YES
#开启匿名用户上传文件权限
anon_upload_enable=YES
#本地用户模式是否开启
local_enable=NO
#本地用户写权限
write_enable=YES
#本地用户755权限,umask为反码755
local_umask=022
#所用户都被限制在其主目录下
chroot_local_user=YES
#不启用例外用户名单
chroot_list_enable=NO
#例外用户名单列表文件
#chroot_list_file=/etc/vsftpd/chroot_list
#表示让目录可写
allow_writeable_chroot=YES
#用户列表开启
userlist_enable=YES
#YES为黑名单,用户列表中用户禁止访问,NO为白名单,用户列表中用户不禁止访问
userlist_deny=YES
#用户列表位置
userlist_file=/etc/vsftpd/user_list
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
tcp_wrappers=YES
#必须给匿名用户目录给予写的权限,否则配置文件中设置但是文件没有权限,此时无法写入会报550错误
[root@localhost ftp]# chmod o+w pub/
#测试登录以及文件上传下载及创建删除
[root@localhost vsftpd]# lftp anonymous@localhost
lftp anonymous@localhost:~> ls
-rw-r--r-- 1 1003 1003 99 Apr 29 09:19 dx.sh
drwxr-xr-x 2 1003 1003 21 Apr 29 12:57 local
-rw-r--r-- 1 1003 1003 202 Apr 29 09:38 test.sh
-rw-r--r-- 1 1003 1003 9036 Apr 29 09:39 新建文本文档.txt
lftp anonymous@localhost:~> mkdir bbb
mkdir ok, `bbb' created
lftp anonymous@localhost:~> ls
drwxr-xr-x 2 1003 1003 6 Apr 29 13:02 bbb
-rw-r--r-- 1 1003 1003 99 Apr 29 09:19 dx.sh
drwxr-xr-x 2 1003 1003 21 Apr 29 12:57 local
-rw-r--r-- 1 1003 1003 202 Apr 29 09:38 test.sh
-rw-r--r-- 1 1003 1003 9036 Apr 29 09:39 新建文本文档.txt
#get下载文件
lftp anonymous@localhost:~> get 新建文本文档.txt
9036 bytes transferred
lftp anonymous@localhost:~> rm -rf local/
rm ok, 2 files removed
#put上传文件
lftp anonymous@localhost:~> put /opt/shell/failed_list.txt
2956 bytes transferred
lftp anonymous@localhost:~> ls
drwxr-xr-x 2 1003 1003 6 Apr 29 13:02 bbb
-rw-r--r-- 1 1003 1003 99 Apr 29 09:19 dx.sh
-rw-r--r-- 1 1003 1003 2956 Apr 29 13:04 failed_list.txt
-rw-r--r-- 1 1003 1003 40 Apr 29 13:03 jfedu.txt
-rw-r--r-- 1 1003 1003 202 Apr 29 09:38 test.sh
-rw-r--r-- 1 1003 1003 9036 Apr 29 09:39 新建文本文档.txt
(3)本地用户访问配置
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
#匿名用户模式设置
#匿名用户访问是否开启
anonymous_enable=NO
#开启匿名用户创建文件权限
anon_mkdir_write_enable=YES
#开启匿名用户修改、删除文件权限
anon_other_write_enable=YES
#开启匿名用户上传文件权限
anon_upload_enable=YES
#本地用户模式是否开启
local_enable=YES
#本地用户写权限
write_enable=YES
#本地用户755权限,umask为反码755
local_umask=022
#所用户都被限制在其主目录下
chroot_local_user=YES
#不启用例外用户名单
chroot_list_enable=NO
#例外用户名单列表文件
#chroot_list_file=/etc/vsftpd/chroot_list
#表示让目录可写
allow_writeable_chroot=YES
#用户列表开启
userlist_enable=YES
#YES为黑名单,用户列表中用户禁止访问,NO为白名单,用户列表中用户不禁止访问
userlist_deny=YES
#用户列表位置
userlist_file=/etc/vsftpd/user_list
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
tcp_wrappers=YES
#创建用户
[root@localhost vsftpd]#useradd -s /sbin/nologin aaa
[root@localhost vsftpd]#echo "bbb" | passwd --stdin bbb
#测试登录以及文件上传下载及创建删除
[root@localhost vsftpd]# lftp aaa@localhost
lftp aaa@localhost:~> ls
-rw-r--r-- 1 1003 1003 99 Apr 29 09:19 dx.sh
drwxr-xr-x 2 1003 1003 21 Apr 29 12:57 local
-rw-r--r-- 1 1003 1003 202 Apr 29 09:38 test.sh
-rw-r--r-- 1 1003 1003 9036 Apr 29 09:39 新建文本文档.txt
lftp aaa@localhost:~> mkdir bbb
mkdir ok, `bbb' created
lftp aaa@localhost:~> ls
drwxr-xr-x 2 1003 1003 6 Apr 29 13:02 bbb
-rw-r--r-- 1 1003 1003 99 Apr 29 09:19 dx.sh
drwxr-xr-x 2 1003 1003 21 Apr 29 12:57 local
-rw-r--r-- 1 1003 1003 202 Apr 29 09:38 test.sh
-rw-r--r-- 1 1003 1003 9036 Apr 29 09:39 新建文本文档.txt
#get下载文件
lftp aaa@localhost:~> get 新建文本文档.txt
9036 bytes transferred
lftp aaa@localhost:~> rm -rf local/
rm ok, 2 files removed
#put上传文件
lftp aaa@localhost:~> put /opt/shell/failed_list.txt
2956 bytes transferred
lftp aaa@localhost:~> ls
drwxr-xr-x 2 1003 1003 6 Apr 29 13:02 bbb
-rw-r--r-- 1 1003 1003 99 Apr 29 09:19 dx.sh
-rw-r--r-- 1 1003 1003 2956 Apr 29 13:04 failed_list.txt
-rw-r--r-- 1 1003 1003 40 Apr 29 13:03 jfedu.txt
-rw-r--r-- 1 1003 1003 202 Apr 29 09:38 test.sh
-rw-r--r-- 1 1003 1003 9036 Apr 29 09:39 新建文本文档.txt
常见问题:
1.本地用户登录时提示:ls: Login failed: 530 Login incorrect.
解决:
cat /etc/passwd,查看你登陆的账户主目录和登陆shell对应的是什么,我的是/sbin/nologin
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
查看cat /etc/shells是否有你用户的主目录和登陆shell,没有进行添加,保存,退出。[root@localhost vsftpd]# vim /etc/shells
/sbin/nologin
2.登录提示500
Name (localhost:root): aaa
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection查看vsftpd.conf后发现
#所用户都被限制在其主目录下
chroot_local_user=YES
##不启用例外用户名单
chroot_list_enable=NO
##例外用户名单列表文件
##chroot_list_file=/etc/vsftpd/chroot_list
##表示让目录可写(改为YES表示目录可以即可正常登录,和chroot_local_user=YES配套使用,若chroot_local_user=YES时allow_writeable_chroot参数无效)## chroot_local_user=YES此时所有用户被限制到主目录下,但如果此时allow_writeable_chroot=NO,主目录不可写则无法登录和写入,所以会报500错误,将主目录改为可写即可。
allow_writeable_chroot=NO
3.匿名用户登录提示500
[root@localhost vsftpd]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection解决:chmod o-w /var/ftp/ 该方法解决,因为在给/var/ftp/pub授权时不小心将pub删掉,授权给了/var/ftp/导致500错误