安装
这里以 CentOS 6 为例,直接使用 yum 安装即可:
$ yum install vsftpd -y
vsftpd 安装后生成的主要文件如下:
- 用户认证配置文件:
/etc/pam.d/vsftpd
; - 服务脚本:
/etc/rc.d/init.d/vsftpd
; - 配置文件目录:
/etc/vsftpd
; - 主配置文件:
/etc/vsftpd/vsftpd.conf
; - 匿名用户(映射为 ftp 用户)共享资源位置:
/var/ftp
; - 系统用户通过 ftp 访问的资源的位置:用户自己的家目录;
- 虚拟用户通过 ftp 访问的资源的位置:给虚拟用户指定的映射为系统用户的家目录;
vsftpd 服务可以使用 Linux 系统用户作为认证账号,默认每个账号对应的资源目录为用户对应的家目录,而匿名用户映射为了 ftp 用户,且 ftp 用户的家目录为
/var/ftp
(ftp 用户的家目录,可使用finger ftp
查看),所以匿名用户默认的资源目录为/var/ftp
。
简单使用
启动
安装完成后直接执行下面命令启动即可:
$ service vsftpd start
如果 21 端口处于监听状态则表示启动成功,查看:
$ ss -tnlp | grep :21
LISTEN 0 32 *:21 *:* users:(("vsftpd",5071,3))
连接
下面就要测试连接一下刚刚启动的 vsftpd 服务了,我这里使用 Mac OS,需要先安装 ftp
命令:
$ brew install telnet
$ brew install inetutils
$ brew link --overwrite inetutils
使用 ftp
命令连接 vsftpd 服务:
$ ftp 10.0.1.201
Connected to 10.0.1.201.
220 (vsFTPd 2.2.2)
Name (10.0.1.201:zze): ftp
331 Please specify the password.
Password:
230 Login successful.
ftp>
用户名输入
ftp
,密码空直接回车即可,此种也是匿名用户方式登录。
登录成功,在 ftp 命令提示符下使用 help
命令可以查看所有可用的子命令:
ftp> help
Commands may be abbreviated. Commands are:
! dir macdef proxy site
$ disconnect mdelete sendport size
account epsv4 mdir put status
append form mget pwd struct
ascii get mkdir quit system
bell glob mls quote sunique
binary hash mode recv tenex
bye help modtime reget trace
case idle mput rstatus type
cd image newer rhelp user
cdup ipany nmap rename umask
chmod ipv4 nlist reset verbose
close ipv6 ntrans restart ?
cr lcd open rmdir
delete lpwd passive runique
debug ls prompt send
使用 pwd
可查看当前所在目录,使用 ls
命令可以查看当前目录下所有文件:
ftp> pwd
257 "/"
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Mar 22 2017 pub
226 Directory send OK.
当前的根目录就是开启 vsftpd 服务的主机上的 /var/ftp
目录。
配置文件
查看 /etc/vsftpd/vsftpd.conf
中默认的配置内容(其中 #
开头的行配置表示注释不启用):
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/xferlog
xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#ls_recurse_enable=YES
listen=YES
#listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
匿名用户配置
anonymous_enable
:是否允许匿名用户登录;anon_upload_enable
:是否允许匿名用户上传文件;anon_mkdir_write_enable
:是否允许匿名用户创建目录;anon_other_write_enable
:是否允许匿名用户删除文件;
系统用户配置
local_enable
:是否允许 系统用户登录;write_enable
:本地用户是否拥有写权限(上传文件、创建目录、删除文件);local_umask
:本地用户上传的文件默认的权限掩码;chroot_local_user
:切换用户的家目录为其根目录以锁定用户的在其家目录中;chroot_list_enable
:是否指定一个要切换其家目录为其根目录的用户列表,与chroot_list_file
一起使用;chroot_list_file
:chroot_list_enable
为YES
时,需在chroot_list_file
对应路径的文件中定义用户列表(该文件中每个用户占一行),包含在该文件中的用户都切换家目录为其根目录以锁定用户在其家目录中;
日志配置
xferlog_enable
:是否启用传输日志;xferlog_std_format
:是否使用标准格式记录日志;xferlog_file
:指定传输日志记录到的文件路径;
用户登录控制配置
userlist_enable
:是否启用控制用户登录的列表文件;userlist_file
:如果userlist_enable
启用了,那么此字段生效,该字段默认值为/etc/vsftpd/user_list
;userlist_deny
:如果此字段值为YES
,则表示userlist_file
对应文件为登录黑名单,如果此字段值为NO
,则表示userlist_file
对应文件为登录白名单;pam_service_name
:指定在/etc/pam.d
下 vsftpd 用哪一个 pam 配置文件完成基于 pam 对 vsftpd 的认证,默认使用的是/etc/pam.d/vsftpd
文件,在该文件中的将/etc/vsftpd/ftpusers
文件设为了登录用户黑名单,即在该文件中定义的用户都不允许登录;
连接、传输限制配置
max_clients
:最大并发请求数;max_per_ip
:单个 IP 的最大并发请求数;anon_max_rate
:匿名用户的最大传输速率,单位为“字节/秒”;local_max_rate
:本地用户的最大传输速率,单位为“字节/秒”;
虚拟用户配置
所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;
各虚拟用户可被赋予不同的访问权限吗,通过匿名用户的权限控制参数进行指定。
虚拟用户账号有如下几种存储方式。
存储在文件中
直接编辑一个文件,奇数行为用户名,奇数行+1
对应的偶数行为对应用户的密码,且此文件需要被编码为 hash 格式(即每次修改都需要重新做 hash 编码)。
存储在关系型数据库的表中
即时查询数据库完成用户认证,通常使用 mysql,此时 pam 要依赖于 pam_mysql 模块连接数据库,默认情况下没有该模块需要自己手动安装,具体使用可参考【FTP服务(3)之vsftpd 基于 pam+mysql 完成虚拟用户认证】。
其它配置
dirmessage_enable
:是否启用目录消息,如果启用,切换到一个目录时如果该目录下存在.message
文件将会打印出该文件中的内容;chown_uploads
:是否改变上传文件的属主;chown_username
:如果chown_uploads
为YES
,那么上传的文件的属主都将会改为chown_username
对应的用户(前提是该用户已存在);idle_session_timeout
:空闲会话超时时长;data_connection_timeout
:数据连接超时时长;ascii_upload_enable
:是否支持(强制)文本格式文件上传;ascii_download_enable
:是否支持(强制)文本格式文件下载;ftpd_banner
:设定用户第一次登录时显示的欢迎信息;
评论区