系统版本:CentOS7.X

概念


vSFTP是Linux上实现FTP(File Transfer Protocol)文件传输协议的一款软件。在企业中,一般用于跨公网的文件共享安全传输。它拥有独立的身份验证机制以及文件传输加密机制,可以让文件传输更安全,但是相对来说传输效率则会降低。

vSFTP协议有两个端口:20和21。21用于会话控制,20用于数据传输。

vSFTP使用PAM认证机制进行用户身份验证。PAM(Pluggable Authentication Modules)可插拔认证模块是由Sun互联网技术服务公司提出的一种用户密码认证机制。它通过一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开。

vSFTP支持三种用户访问方式:匿名访问用户访问虚拟用户访问

  • 匿名:无需要用户名和密码,使用默认匿名用户访问文件服务。

  • 用户:基于系统用户名和密码才可访问文件服务。

  • 虚拟用户:将一个真实用户可以映射成多个虚拟用户,使用虚拟用户身份访问文件服务。

vSFTP的数据传输模式:主动模式和被动模式。

  • 主动模式:服务端20端口主动连接客户端20号端口,相同端口连接传输效率高。

  • 被动模式:服务端20端口被动连接客户端非20号端口,不同端口连接传输可增加安全性。



服务端:搭建FTP服务


一、安装vsftpd软件包

# yum -y install vsftpd

二、修改配置文件

# unalias cp                                                       (临时取消CP命令弹出提示

# cp -f /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak        (备份主配置文件

# cat /etc/vsftpd/vsftpd.conf.bak |grep -Ev "^#|^$|^;" >/etc/vsftpd/vsftpd.conf(过滤#;空格开头的行到vsftpd.conf文件中

# vi /etc/vsftpd/vsftpd.conf                                       (修改主配置文件

listen=YES                          #开启vSFTP服务以独立进程运行

listen_port=21                      #设置监听端口

listen_address=0.0.0.0              #设置监听地址

pasv_enable=YES                     #设置数据传输模式为被动模式

pam_service_name=vsftpd             #设置PAM认证文件位置,对应/etc/pam.d/vsftpd文件。此项为必须。

xferlog_enable=YES     `            #开启Xferlog日志功能

xferlog_file=/var/log/xferlog       #指定Xferlog日志文件位置

xferlog_std_format=YES              #指定日志文件的存档格式为Xferlog日志格式

tcp_wrappers=NO                     #禁用TCP_wrappers主机访问控制功能

userlist_enable=NO                  #禁用用户列表控制功能

anonymous_enable=NO                 #禁用匿名用户访问

write_enable=YES                    #允许用户拥有可写权限

download_enable=YES                 #允许用户拥有下载权限

local_enable=YES                    #开启本地用户访问

local_root=/var/ftp                 #设置本地用户访问的家目录位置

local_umask=077                     #开启本地用户写入文件权限(反掩码),777-077=700

chroot_local_user=YES               #开启将本地用户禁锢在家目录

三、创建一个登录用户

# useradd tom -M -s /sbin/nologin      (创建用户,不允许创建家目录和登录系统

# echo "123" |passwd zhangsan --stdin  (密码

# chown tom.tom /var/ftp               (访问目录所属用户

# chmod 555 /var/ftp                   (设置主目录只允许读和执行的权限,主目录不允许有写的权限

四、开启服务

# systemctl start vsftpd



客户端:安装FTP客户端


一、安装FTP客户端并访问

# yum -y install ftp (安装FTP客户端

# ftp 192.168.116.131 (访问FTP服务



常用配置解读


配置文件路径:/etc/vsftpd/vsftpd.conf

PAM认证配置文件路经:/etc/pam.d/vsftpd

配置格式:

    选项=YES/NO

    选项=文件路径

    选项=数值

配置说明

一、全局配置

listen=YES                          #设置监听进程的方式,YES为独立进程运行,NO则以Xined进程的方式运行,服务则由Xined管理工具控制。Xined是一种服务管理工具,类似于Redhat中的service命令。一般设置为YES。

listen_port=2                       #设置监听端口号。默认为21。

listen_address=0.0.0.0              #设置监听地址。如果不配置,默认监听所有IP。

connect_from_port_20=NO             #设置服务器数据传输是否为主动模式。如果为YES,则服务器主动从客户端的20端口建立数据连接,传输数据。

pasv_enable=YES                     #设置服务器数据传输是否为被动模式。默认开启,当服务端被动传输数据。

pasv_max_port=0                     #设置被动模式下客户端开启的最大端口号。

pasv_min_port=0                     #设置被动模式下客户端开启的最小端口号。

tcp_wrappers=NO                     #设置是否开启TCP_wrappers主机访问控制功能。如果为YES,则由TCP_wrappers网络防火墙控制,允许或拒绝那些主机才能访问FTP服务。

pam_service_name=vsftpd             #设置用于用户认证的PAM文件位置。此项必须存在。对应/etc/pam.d/vsftpd文件。

max_clients=2000                    #设置客户端最大连接数。

max_per_ip=50                       #设置相同IP同时连接的数量。0表示无限制。

ascii_download_enable=NO            #是否启用下载时采用ASCII方式传输文件。加密传输。

ascii_upload_enable=NO              #是否启用上传时采用ASCII方式传输文件加密传输。

xferlog_enable=NO                   #控制开启xferlog日志功能。

xferlog_file=/var/log/xferlog       #指定日志记录位置。

xferlog_std_format=NO               #是否将日志记录的格式转换成xferlog格式。

write_enable=NO                     #控制所有用户登录是否可写。 

download_enable=YES                 #控制所有用户是否允许下载操作。

user_config_dir=/etc/vsftpd/user    #针对每个用户创建不同的配置文件。这里指定存放用户配置文件的目录位置。每个用户的配置文件名与用户名必须相同。

userlist_enable=YES                 #是否开启用户列表控制功能。创建一个用户列表文件,每个用户名为一行。

userlist_file=/etc/vsftpd/user_list #指定用户列表文件位置。

userlist_deny=YES                   #设置是否拒绝这个用户列表文件中的用户访问登录。如果为YES则为拒绝,如果为NO则为允许。

二、匿名用户配置

anonymous_enable=YES                #控制匿名登录是否启用。如果启用则默认使用ftp和anonymous为匿名用户。

ftp_username=ftp                    #设置匿名用户名。默认为ftp。 

anon_root=/var/ftp                  #设置匿名用户的主目录位置。默认是/var/ftp目录。

anon_mkdir_write_enable=NO          #如果为YES,则匿名用户允许创建、删除目录的权限,前提是开启write_enable=YES。 

anon_other_write_enable=NO          #如果为YES,则匿名用户允许执行写入操作,除了上传和创建目录,如删除和重命名。

anon_upload_enable=NO               #如果为YES,则允许匿名用户上传文件,前提是开启write_enable=YES。

anon_world_readable_only=YES        #如果为YES,则匿名用户只拥有只读权限,只可以下载文件,不可修改和写入。 

anon_max_rate0                      #设置匿名传输最大速率(以字节为单位)。0表示无限制。 

anon_umask=077                      #设置匿名用户创建文件时的文件权限。为反掩码,转换成正掩码:777-077=700。

no_anon_password=NO                 #如果为YES,则匿名登录时不用要求输入密码直接登录。

三、本地用户配置

local_enable=NO                     #本地用户启用开关,如果启用的话则访问文件服务需要输入用户名和密码,默认读取系统中/etc/passwd文件中的用户账户。说白了就是使用系统用户登录。 

local_root=/var/ftp                 #设置本地用户的主目录位置。

local_umask=077                     #设置本地用户创建文件时的文件权限。为反掩码,转换成正掩码:777-077=700。

chroot_local_user=NO                #设置是否将用户限制在自己的用户主目录中,不允许切换到上级目录。

chroot_list_enable=NO               #如果为YES,则你需要提供一个本地用户列表的文件。在该列表中的用户都不允许切换到上级目录,将其限制在家目录(共享目录)中。你需要指定一个本地用户列表的文件。

chroot_list_file=/etc/vsftpd/chroot_list  #设置一个本地用户列表文件。

local_max_rate=0                          #设置本地用户传输最大速率(以字节为单位)。

userlist_enable=NO                        #设置使用一个本地用户列表控制用户访问登录,只允许此列表中的用户访问文件服务。

userlist_deny=NO                          #设置使用一个本地用户列表控制用户访问登录,在此列表中的用户禁止访问文件服务。

userlist_file=/etc/vsftpd/user_list       #本地用户列表文件位置。

四、虚拟用户配置

guest_enable=NO                    #如果开启此项则所有非匿名登录用户都将被视为“访客”登录。开启虚拟用户映射功能。

guest_username=ftp                 #设置虚拟用户对应的真实系统用户名。