vsftp服务

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      #指定虚拟用户单独配置文件所在路径

原文地址:https://www.cnblogs.com/wq201703/p/6699909.html