Vsftp服务
vsftp为Linux平台下稳定、快速、安全的FTP软件,它支持IPv6以及SSL加密。
Vsftpd的安全性主要体现在三个方面呢:
1、进程分离,处理不同任务的进程彼此是独立进行的;
2、进程运行时均已最小权限运行;
3、多数进程都使用chroot进行了禁锢,防止客户端访问非法共享目录。
FTP服务基础
FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。
ftp服务器端不支持个客户端同时对自己进行操作。
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。20端口用于建立数据连接,并传输数据;21端口用于建立控制连接,并传输FTP控制命令。根据FTP服务器在建立
数据连接过程中的主、被动关系,FTP数据连接分为主动模式和被动模式:
主动模式
1、 客户端随机开启大于1024的X端口与服务器的21端口建立连接通道,通道建立后,客户端随时可以通过该通道发送上传和下载的命令
2、 当需要传输数据时,客户端会再开启一个大于1024的随机端口Y,并将Y端口号通过之前的命令通道传给服务器
3、 服务器获取到客户端的Y端口后,服务器从20端口向客户端发送请求并建立数据连接。
被动模式
1、 客户端随机开启大于1024的X端口与服务器的21端口建立连接通道
2、 当需要传输数据时,客户端从命令通道发送数据请求要求上传或下载数据
3、 服务器收到数据请求后会随机开启一个端口Y,并通过命令通道将该端口信息传送给客户端
4、 客户端在收到服务器发送过来的数据端口Y的信息后,将在客户端本地开启一个随机端口Z,此时客户端再主动通过本机的Z端口与服务器的Y端口进行连接,连接完成后,即可
进行数据传输
FTP用户类型
匿名用户:对应本系统用户账号“ftp”,提供任意密码(包括空密码)可以通过服务器的验证
本地用户:除了匿名用户以外的其他系统用户
虚拟用户:位于独立数据库中的FTP用户账号
lftp
lftp是一个上传下载ftp文件的工具
lftp –u name,password x.x.x.x
help 就可以看到命令列表
ls显示远端文件列表(!ls 显示本地文件列表)。
cd切换远端目录(lcd 切换本地目录)。
get 下载远端文件。
mirror下载/上传(mirror -R)/同步 整个目录。
put 上传文件。
rm 删除远端文件。
bye 退出
安装与管理vsftpd
[root@localhost~]# yum –y install vsftpd
[root@localhost~]# service vsftpd start
[root@localhost~]# chkconfig vsftpd on
Vsftpfd相关文件与目录列表
/etc/logrotate.d/vsftpd (日志轮转备份配置文件)
/etc/pam.d/vsftpd (基于PAM-可插拔认证模块的vsftpd的验证配置文件)
/etc/rc.d/init.d/vsftpd (vsftpd启动脚本,可以使用service调用)
/etc/vsftpd (vsftpd软件主目录)
/etc/vsftpd/ftpusers (默认的vsftpd黑名单)
/etc/vsftpd/user_list (可以通过主配置文件设置该文件为黑名单或白名单)
/etc/vsftpd/vsftpd.conf (vsftpd的主配置文件)
/usr/sbin/vsftpd (vsftpd主程序)
/usr/share/doc/vsftpd-2.2.2 (vsftpd文档资料路径)
/var/ftp (默认vsftpd共享目录)
配置文件解析
Vsftpd配置文件默认位于/etc/vsftpd目录下,vsftpd会自动寻找以.conf结尾的配置文件,并使用此配置文件启动FTP服务。配置文件的格式为:选项=值(中间不可以有任何空格符),以#开头的行会被识别为注释行。
1、全局配置
listen=YES #是否监听端口,独立运行守护进程
listen_port=21 #监听入站FTP请求的端口号
listen_address=0.0.0.0 #监听FTP服务器的IP地址
write_enable=YES #是否允许写操作命令,全局开关
download_enable=YES #如果设置为NO,则拒绝所有下载请求
dirmessage_enable=YES #用户进入目录是否显示消息
xferlog_enable=YES #是否开启xferlog日志功能
xferlog_std_format=YES #xfelog日志文件格式
connect_from_port_20=YES #使用主动模式连接,启用20端口
pasv_enable=YES #是否启用被动模式连接,默认为被动模式
pasv_max_port=24600 #被动模式连接的最大端口号
pasv_min_port=24500 #被动模式连接的最小端口号
userlist_enable=YES #是否启用userlist用户列表文件
userlist_deny=YES
#该选项设置YES,userlist文件为黑名单;设为NO,则只有userlist中的用户可以访问FTP
dual_log_enable=YES #是否启用双日志功能,生产两个日志文件
tcp_wrappers=YES #是否启用tcp_wrappers
max_client=2000 #最大允许同时2000客户端连接,0代表无限制
max_per_ip=0 #每个客户端的最大连接限制,0代表无限制
Chroot_local_user=yes #设置本地所有帐户都只能在自家目录里
Chroot_list_enable=yes
#如果只想让部分账户只能待在自家目录里,其他用户不受此限制的话,要借助于一个名为:“vsftpd.chroot_list”的文件,将受限的用户写在此文件里,一行一个账户名。文件名可以改
Chroot_list_file=/任意指定的路径/vsftpd.chroot_list #调用限制账户名单文件
2、匿名用户访问配置
访问匿名FTP服务器时,不需要密码验证,任何人都可以使用,非常方便,当需要提供公开访问的文件下载资源,或者让用户上传一些不需要保密的数据资料时,可以选择搭建匿名FTP服务器。
FTP匿名用户对应的系统用户为ftp,其宿主目录/var/ftp也就是匿名访问vftpd服务时所在的FTP跟目录。基于安全性考虑,FTP跟目录的权限不允许匿名用户或其他用户有写入权限
/var/ftp目录下默认设置了一个名为pub的子文件夹,可以给匿名访问FTP时共上传文件使用,但必须把此目录的宿主改为FTP,才可以使匿名用户ftp对该目录拥有写的权限,以方便上传数据
anonymous_enable=YES #开启匿名访问功能
anon_root=/var/ftp #匿名访问FTP的跟路径,默认为/var/ftp
anon_upload_enable=YES #是否开启匿名用户上传(对应的目录ftp要有写的权限才能上传)
anon_world_readable_enable=NO #开启下载功能,默认无法下载
anon_mkdir_write_enable=YES #允许匿名用户创建目录(对应的目录ftp要有写的权限才能上传)
anon_other_write_enable=YES #匿名用户可以有删除权限
anon_umask=022 #设置匿名用户所上传文件的默认权限掩码值
anon_max_rate=0 #设置匿名用户的最大传输速率(0为无限制),单位为字节/秒
3、本地用户访问配置
Vsftpd可以直接使用linux主机的系统用户作为FTP账号,提供基于用户名/密码的验证。用户使用系统用户账号登录FTP服务器后,将默认位于自己的宿主目录中,且在宿主目录中拥有读写权限。
local_enable=YES #开启本机账户FTP功能
local_root= #设置本地账户访问FTP跟路径,默认为目录
local_umask=077 #本地账户权限掩码
local_max_rate=0 #本地账户数据传输率(B /s)
chroot_local_user=YES #是否禁锢本地账户根目录
3、虚拟用户访问配置
如果访问FTP的用户不多,则可以直接创建系统账户以满足对FTP访问的需求,但当用户量变大时,继续创建更多的系统用户是不明智的,这时就需要为vsftpd创建虚拟账户。虚拟账户的数据需要保存在Berkeley DB格式的数据文件中,所以需要安装db4-util工具来创建这样的数据文件。
Vsftp的服务器对虚拟用户的控制采用了映射的控制方式,将所有的虚拟 用户对应到同一个系统用户,该系统用户宿主目录作为所有虚拟用户登录后共用的FTP根目录,因此还需要添加一个对应的系统用户账号。
[root@localhost~]# yum install db4-utils #创建虚拟用户需要db4-utils工具的支持,安装db4-utils,将文本文件转换成数据库文件
[root@localhost~]# vi /etc/vsftpd/vusers.txt #建立虚拟FTP用户的账号数据库文件,创建名为vuser.txt的文本文件
heboan #奇数行为用户名,偶数行为上一行用户的密码
heboan123
frank
frank123
[root@localhost~]# cd /etc/vsftpd
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vusers.txt vusers.db
#将文本文件转换成数据库文件
[root@localhost vsftpd]# chmod 600 vusers.db
#为了安全性,只赋予管理员读取和修改这个数据库的权限
[root@localhost vsftpd]# mkdir /share #创建虚拟用户的FTP根目录及虚拟用户映射的系统用户,访问根路径,可根据需求在/share目录创建多个目录
[root@localhost vsftpd]# chmod 755 /share
[root@localhost vsftpd]# useradd -d /share –s /sbin/nologin vusers
useradd:警告:此主目录已经存在
不从 skel 目录里向其中复制任何文件
#修改/etc/pam.d/vsftpd,建立支持虚拟用户的PAM认证文件,将原有内容注释并加入以下内容
[root@localhost vsftpd]# vi /etc/ pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
……
#因为本环境使用的是64位操作系统,所以验证模块调用的是lib64目录下的文件
pam所要做的管理解释如下:
1、 账户密码是否正确
2、 检查账户有效期
3、 密码复杂度
4、 检查会话建立时间,可能不在服务时间内
[root@localhost ~]# mkdir /etc/vsftpd/vuser_conf #创建目录用来存放单独用户的配置文件
[root@localhost~]# cd /etc/vsftpd/vuser_conf #进入目录创建独立的配置文件
[root@localhost vuser_conf]# touch heboan #配置文件名与用户名一定要相同
[root@localhost vuser_conf]# touch frank
#就算某个用户不单独配置也要为它创建文件,内容为空即可
[root@localhost vuser_conf]# vi heboan
local_root=
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=NO
anon_other_write_enable=YES
anon_max_rate=512000
[root@localhost~]# vi /etc/vsftpd/vsftpd.conf #修改vsftpd.conf文件
local_enable=YES #此项必须打开
guest_enable=YES #启用用户映射功能
guest_username=vuser #将映射用户指为系统(本地)用户vusers
user_config_dir=/etc/vsftpd/vuser_conf #指定虚拟用户单独配置文件所在路径