一、安装

使用 root 用户或者具有sudo权限用户操作,直接使用 yum 安装:

# 安装
yum install vsftpd
# 启动|停止|重启
systemctl start|stop|restart vsftpd
# 或者
service vsftpd start|stop|restart

添加 FTP 用户:

出于安全考虑,一般 ftp 用户是不允许登陆系统的,且只能访问自己主目录下的文件

# 先创建ftp用户根的目录
mkdir -p /home/vsftpd
# 添加用户并指定目录和用户组,设置为不可登陆系统
# -d 命令是指定用户家目录
# -g 是指定用户分组
# -s /sbin/nologin 禁止用户登陆系统
# mlrtftp 新建ftp用户的用户名
useradd -d /home/vsftpd/mlrtftp -g ftp -s /sbin/nologin mlrtftp
# 为用户 mlrtftp 设置密码,按提示操作输入两次密码:
passwd mlrtftp
# mlrtftp@321
# mlrtftp@321

二、配置:

vsftpd 的配置文件默认在 /etc/vsftpd/vsftpd.conf
具体的配置项说明太多了,贴在最后,这里说一下在默认配置中需要注意和修改的部分

1、监听与连接控制

# 侦听
listen=YES
# 提供ftp服务的控制端口号,默认值为21。此选项在standalone模式下生效。
listen_port=21

#------ PORT(主动)模式-------
# 是否使用PORT模式获取数据连接:YES使用,NO不使用,默认值:YES
port_enable=YES
# PORT模式下数据传输时是否使用20端口(ftp-data):YES使用,NO不使用,默认NO
connect_from_port_20=NO
# PORT模式下设定ftp数据传输端口(ftp-data)值,默认值为20
ftp_data_port=20
# 如果要禁用PORT安全检查,则设置为YES,以确保传出数据连接只能连接到客户端,默认值:NO
port_promiscuous=YES

#--- PASV(被动)模式-------
# 是否使用PASV模式获取数据连接:YES使用,NO不使用,默认值:YES
pasv_enable=YES
# 允许vsftpd去欺骗客户端(更改客户端连接的ftpserver地址),让客户端连接pasv_address指定的地址
pasv_addr_resolve=YES
# PASV命令的响应数字IP地址(改成FTP服务器的连接地址)。默认值为none,即从呼入的连接套接中获取。
pasv_address=10.10.10.20  
# 设置PASV模式数据连接的端口范围,默认值:0(表示任意值)
pasv_min_port=30000
pasv_max_port=30020
# 如果要禁用PASV安全检查,则设置为YES、默认NO
pasv_promiscuous=YES

2、性能与连接参数

# 指明服务器总的客户并发连接数,默认值为0不限制。
max_clients=100
# 指明每个IP地址的并发连接数,默认值为0。
max_per_ip=5
# 在此多次登录失败后,会话被终止、默认3
max_login_fails=3
# 设置用户会话的空闲中断时间,单位为秒,默认值为300。
idle_session_timeout=240
# 设置空闲的数据连接的中断时间。默认值为300秒。
data_connection_timeout=300
# 以下两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。
# 响应PORT模式数据联机的超时设定,单位为秒。默认值为60。
connect_timeout=60
# 客户端与PASV模式数据连接建立连接的超时设定(以秒为单位)。默认值:60
accept_timeout=60
# 尝试将其设置为8192,以获得更加平滑的带宽限制器。默认值:0(让vsftpd选择合理的设置)
trans_chunk_size=0

3、用户参数控制

一般是要关掉匿名用户、防止消耗服务器资源:

# 修改为NO,关闭匿名用户访问
anonymous_enable=NO

本地用户一般要打开:

# 本地系统用户是否可以登陆,默认值为YES。必须启用此功能才能使任何非匿名登录工作、包括虚拟用户
local_enable=YES
# 允许登录用户根目录可写
allow_writeable_chroot=YES
# 设置本地用户的最大数据传输速率(以字节/秒为单位)默认值0(无限制)
local_max_rate=0
# 本地用户新增文件时的umask数值,默认值为077。如果希望新增的文件他人可以访问的话,修改为022
local_umask=022

4、用户访问控制

一些配置是控制哪些用户能够访问 ftp 的:

首先是文件 /etc/vsftpd/ftpusers ,该配置文件中的用户禁止登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的。

# 指定vsftpd进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd,使用ftp虚拟用户时需要更改
pam_service_name=vsftpd

再是 userlist相关参数,它们三个互相作用:

# 用户访问限制开关,是否通过userlist_file列表控制可登陆的用户、默认NO不启用,如果启用则使用不允许的用户登录时 输入用户名后、不提示输入密码
userlist_enable=YES
# userlist_file文件中的用户是否能够访问ftp,此项配置默认为YES,需要手动添加配置项。
# 如果为YES,那么userlist_file文件中的用户不能访问ftp,相当于黑名单模式
# 如果为NO, 那么只允许userlist_file文件中的用户访问ftp,相当于白名单模式 
userlist_deny=YES
# 指定userlist_file用户列表文件,默认没有配置,但是读取配置文件同级目录下的user_list文件
userlist_file=/etc/vsftpd/user_list

最后是使用TCP_Wrappers封装数据、相当于一个简易防火墙:

# 在vsftpd中使用TCP_Wrappers封装数据,默认值为YES。
tcp_wrappers=YES

5、目录访问控制

连上之后会发现刚添加的用户 mlrtftp 能够跳到上一层目录,访问系统中其他的目录,mlrtftp 作为 ftp 用户组的成员,此时对于其他目录 mlrtftp 是拥有着 ftp 用户组的权限,这时候需要限制 mlrtftp 只能访问其自身根目录

# 这里的控制略绕,需仔细理解,有点双重否定的意思
# 是否将本地用户锁定在其宿主目录中,默认值为NO不锁定,需要与chroot_list_enable参数值配合
chroot_local_user=YES
# 是否将list中用户锁定在其宿主目录中,默认为NO不锁定。具体用户在chroot_list_file参数指定的文件中
chroot_list_enable=YES
# 指定要锁定在宿主目录中的用户一行一用户,通常为/etc/vsftpd/chroot_list
chroot_list_file=/etc/vsftpd/chroot_list

这两个参数可以组合成四种情况:

  1. chroot_local_user=YES chroot_list_enable=YES
    所有用户都被限制在其根目录下,但 chroot_list_file 参数指定的用户例外,不受限制,相当于白名单模式
  2. chroot_local_user=YES chroot_list_enable=NO
    所有用户都被限制在其根目录下,不使用 chroot_list_file 文件,因此所有用户都限制
  3. chroot_local_user=NO chroot_list_enable=YES
    所有用户都不被限制其根目录下,但 chroot_list_file 参数指定的用户例外,受到限制,相当于黑名单模式
  4. chroot_local_user=NO chroot_list_enable=NO
    所有用户都不被限制其根目录下,不使用 chroot_list_file 文件,因此所有用户都不限制

一般默认使用前两种就行,如果需要按照自己的需求配置

6、文件操作控制

# 是否隐藏文件的所有者和组信息。默认值为NO不隐藏,如果为YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp
hide_ids=NO
# 是否允许使用"ls-R"指令,默认值为NO不允许。如果在一个大型FTP站点的根目录下使用"ls-R"会消耗大量系统资源。
ls_recurse_enable=NO
# 是否允许使用修改文件系统的FTP指令,默认为NO不允许,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE以及SITE
write_enable=YES
#用于创建上载文件的权限。Umasks应用于此值之上、默认值:0666; 更改为0777则上传的文件可执行
file_open_mode=0666
# true则删除任何失败的上载文件。默认值:NO(在v2.0.7中添加)。
delete_failed_uploads=NO
# 设置为NO则所有目录列表命令都将拒绝权限,默认值:是
dirlist_enable=YES
# 设置为NO则所有下载请求都将拒绝权限,默认值:是
download_enable=YES

7、其他参数

还有一些提示信息、日志信息、安全措施以及一些其他参数不一一说明了,全部贴在最后。

三、开防火墙

使用 iptables 开通 20、21 以及被动模式(PASV)的数据端口范围 的 TCP 入站出站火墙。

具体命令不一一说明了。

四、遇到的问题

以下都是在防火墙已开通前提下出现的问题:

227 Entering Passive Mode (x,x,x,x,156,65)

卡在227 Entering Passive Mode (x,x,x,x,xxx,xx). 后面就报超时,一般伴随着425 Security: Bad IP connecting 错误,WinSCP等客户端提示 “显示‘/’目录失败”。

原因很简单:ftp命令能够建立连接但无法获取目录信息,因为PASV模式下数据连接没打开或打开失败。服务器让客户端去连接 x,x,x,x156*256+65=40001端口以便传输数据,但是客户端跟x,x,x,x 不在同一网络下。这种情况一般常出现在内网情况下、两台机器默认使用了本地网卡通信,且两台机器不在同一局域网内。

解决办法

vsftpd的配置文件中加入如下两行即可:

# 允许vsftpd去欺骗客户端(更改客户端连接的ftpserver地址),让客户端连接pasv_address指定的地址
pasv_addr_resolve=YES
# PASV命令的响应数字IP地址(改成FTP服务器的连接地址)。默认值为none,即从呼入的连接套接中获取。
pasv_address=10.10.10.20    

425 Security: Bad IP connecting

被动模式下数据传输时FTP服务器端会核实两个连接(控制与数据链接)的源IP是否一致,如果不一致就报该错误。常见原因是客户端在NAT后、而NAT关联的 IP不止一个。此外经常与上文227错误一起出现。

解决办法:

如果确定连接没问题的话直接在vsftpd.conf文件中添加一行:pasv_promiscuous=YES 关闭检查即可。

500 OOPS : refusing to run with writable root

vsftpd 增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限!如果检查发现还有写权限,就会报该错误:

响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
错误: 严重错误: 无法连接到服务器

如下两个解决办法,推荐使用第二种方式,简单快捷:

  1. 去除用户根目录的写权限,在根目录下再建立一个文件夹,赋予用户 mlrtftp 写权限
# 去除用户根目录写权限
chmod -w /home/vsftpd/mlrtftp
# 在根目录下新建文件夹并授权用户和组,用户组和文件夹根据自己的实际情况修改
mkdir -p /home/vsftpd/mlrtftp/wf
chown -R mlrtftp:ftp /home/vsftpd/mlrtftp/wf
  1. 在 vsftpd 配置文件添加一行配置(前文已经修改过了)
# 开启charoot写权限
allow_writeable_chroot=YES

500 OOPS: cannot change directory

当前 ftp 用户对 ftp 服务的 root目录没有权限。

可能更改过目录尤其是配置中的 local_root参数,如果限制了本地用户登陆在用户主目录、同时又配置了该参数,很可能出现该错误。控制好相应目录权限即可。

也可能由于系统的SELinux安全控制引起的。

解决办法:

  1. 更改该 ftp 用户的根目录权限,并关闭local_root参数即可。
  2. RLinux sudo setsebool ftp_home_dir 1

500 OOPS: vsf_sysutil_bind

这个常出现在CentOS系统上,需要将PORT模式的数据连接端口20设为NO,RedHat系默认置成了YES。

参数connect_from_port_20=ftp_data_port= 像有毒一样、搞不明白。目前说法是 ftp_data_port设置PORT模式的数据传输端口、默认为20,但是前提是要将connect_from_port_20设置成 NO。

解决办法:

在vsftpd.conf文件中追加一行:connect_from_port_20=NO

500 Illegal PORT command*

做haproxy反向代理时常遇到的错误:

解决办法:

在vsftpd.conf文件中追加一行:port_promiscuous=YES

该参数的作用是授权 vsftpd 打开与代理服务器的数据连接,而不是限制 vsftpd 和 FTP 客户端之间的数据连接。

也可以理解成禁用PORT模式的连接安全检查。

530 Login incorrect

在账号、密码、主目录都是正确的情况下,可能会遇到账号登录提示 530 Login incorrect 的问题。

修改 /etc/vsftpd.conf 文件 将 pam_service_name=vsftpd 修改为 pam_service_name=ftp ,虽然能够解决这个问题,但是这种方法其实是错误的,这样由于 /etc/pam.d/ftp 文件不存在,等于是绕过了PAM。

vsftpd pam文件分析 /etc/pam.d/vsftpd 默认如下:

# Standard behaviour for ftpd(8).
auth   required        pam_listfile.so item=user sense=deny file=/etc/ftpusers 
onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth   required        pam_shells.so

auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
配置项的含义是 /etc/ftpusers 中的用户禁止登陆,如果文件不存在则默认所有用户均允许登录. 所以首先要确保登录用户没在这个文件内

auth required pam_shells.so 配置项的含义为仅允许用户的shell为 /etc/shells 文件内的shell命令时,才能够登录成功

cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

而创建 ftp 用户时,为了禁止 ssh 登录,一般多为 /bin/false 、/sbin/nologin 等,显然不是一个有效的bash,也就无法登录了。

解决方法:

  1. 查看/etc/ftpusers,确保账号没有在这个文件内。
  2. 修改/etc/pam.d/vsftpdauth required pam_shells.so 修改为auth required pam_nologin.so 即可。
  3. 或者/etc/shells 文件中添加 /sbin/nologin 。

五、自用的配置文件

该配置文件使用本地用户登录、禁止匿名登陆、支持PORT和PASV模式、限制了用户目录和登录、修改了文件目录操作权限。

#-------------- 提示信息 --------------
# 当用户登录时会显示此欢迎语
ftpd_banner=Welcome to MLRT's FTP service.
# 当用户登录时会显示此文件中的内容,通常为欢迎话语或是说明。默认值为无。
banner_file=/etc/vsftpd/banner_file
# 特定目录的提示信息,默认为YES启用。当用户进入指定目录,如果该目录下存在message_file指定的文件,则显示出现此文档的内容,通常这个文档会放置欢迎话语,或是对该目录的说明。
dirmessage_enable=YES
# dirmessage_enable选项启用时生效,指定提示内容的文档。默认为.message,以该扩展名结尾的文件
message_file=.message

#-------------- 日志设置 --------------
# 是否启用一个日志文件,记录上传和下载,默认为NO不启用,该日志文件由xferlog_file选项指定
xferlog_enable=YES
# 日志格式是否使用xferlog的标准格式,默认NO不使用。默认的日志格式更为可读性
xferlog_std_format=YES
# xferlog格式日志存放路径
xferlog_file=/var/log/xferlog
# 是否启用Vsftpd类型的日志
dual_log_enable=YES
# vsftpd类型日志存放路径
vsftpd_log_file=/var/log/vsftpd.log
# 是否记录所有的FTP请求和响应到日志中,这个选项一般用于调试,默认为NO不记录。
# 使用此选项时xferlog_std_format不能被激活
log_ftp_protocol=NO

#-------------- 建立FTP链接相关 --------------
#---------- 监听地址与控制端口 -----------
# 侦听IP二选一
listen=YES
# 提供ftp服务的主机IP,单IP主机,不需要使用,多IP主机默认监听所有IP地址。在VSFTPD使用单独(standalone)模式下有效。
#listen_address=
#listen_ipv6=NO
#listen_address6=
# 提供ftp服务的控制端口号,默认值为21。此选项在standalone模式下生效。
listen_port=21
#------ PORT(主动)模式-------
# 是否使用PORT模式获取数据连接:YES使用,NO不使用,默认值:YES
port_enable=YES
# PORT模式下数据传输时是否使用20端口(ftp-data):YES使用,NO不使用,默认NO
connect_from_port_20=NO
# PORT模式下设定ftp数据传输端口(ftp-data)值,默认值为20(只要命名不佳的connect_from_port_20已启用)
ftp_data_port=20
# 如果要禁用PORT安全检查,则设置为YES,以确保传出数据连接只能连接到客户端,默认值:NO
port_promiscuous=YES
#--- PASV(被动)模式-------
# 是否使用PASV模式获取数据连接:YES使用,NO不使用,默认值:YES
pasv_enable=YES
# 允许vsftpd去欺骗客户端(更改客户端连接的ftpserver地址),让客户端连接pasv_address指定的地址
pasv_addr_resolve=YES
# PASV命令的响应数字IP地址(改成FTP服务器的连接地址)。默认值为none,即从呼入的连接套接中获取。
pasv_address=10.10.10.20  
# 设置PASV模式数据连接的端口范围,默认值:0(表示任意值)
pasv_min_port=30000
pasv_max_port=30020
# 如果要禁用PASV安全检查,则设置为YES、默认NO
pasv_promiscuous=YES
#---------- ftp服务的ASCII模式 -----------
# ASCII模式数据传输
#ascii_upload_enable=YES
#ascii_download_enable=YES

#-------------- 性能与负载控制 --------------
#-> 指明服务器总的客户并发连接数,默认值为0不限制。此参数在使用standalone模式下有效
max_clients=100
# 指明每个IP地址的并发连接数,默认值为0。此参数在使用standalone模式下有效
max_per_ip=5
# 在此多次登录失败后,会话被终止、默认3
max_login_fails=3
# 设置用户会话的空闲中断时间,单位为秒,默认值为300。
idle_session_timeout=240
# 设置空闲的数据连接的中断时间。默认值为300秒。
data_connection_timeout=300
# 以下两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。
# 响应PORT模式数据联机的超时设定,单位为秒。默认值为60。
connect_timeout=60
# 客户端与PASV模式数据连接建立连接的超时设定(以秒为单位)。默认值:60
accept_timeout=60
# 请尝试将其设置为8192,以获得更加平滑的带宽限制器。默认值:0(让vsftpd选择合理的设置)
trans_chunk_size=0
# 传输速率见各用户选项设置
#anon_max_rate=30000
#local_max_rate=50000

# 设置为yes则需要所有SSL数据连接以展示SSL会话重用默认YES
#require_ssl_reuse=NO
# 设置为yes则需要所有SSL客户端连接来提供客户端证书,应用于此证书的验证程度由validate_cert控制,默认NO
#require_cert=NO
# yes则收到的所有SSL客户端证书都必须验证OK
#validate_cert=NO


#-------------- 用户选项设置 --------------
#---------- 匿名用户设置 -----------
# 控制是否允许匿名用户登录,默认值为YES允许匿名用户登录。
anonymous_enable=N0
# 匿名用户所使用的系统用户名。默认此参数在配置文件中不出现,值为ftp。
ftp_username=ftp
# 控制匿名用户登入时是否不需要密码,默认值为NO需要密码。
no_anon_password=YES
# 拒绝在banned_email_file指定的文件中所列出的email地址进行登录的匿名用户。默认值为NO关闭。这对于阻击某些Dos攻击有效。
#deny_email_enable=YES
# 当匿名用户使用banned_email_file文件中所列出的e-mail进行登录时,被拒绝
#banned_email_file=/etc/vsftpd/banned_emails
# 匿名用户的根目录,默认为/var/ftp/,主配置文件中默认无此项。
#anon_root=/var/ftp/
# 默认为YES,只允许匿名用户下载可阅读的文件,NO允许匿名用户浏览整个服务器的文件
#anon_world_readable_only=YES
# 设置为YES,则允许匿名用户在特定条件下上载文件,默认NO不允许
# 除了anon_upload_enable这个参数外,匿名用户要能上传文件,还需要两个条件:
# 1)write_enable参数为YES; 2)在文件系统上,FTP匿名用户对匿名用户目录有写权限
#anon_upload_enable=YES
# 设置为YES,则允许匿名用户在特定条件下创建目录、同时FTP匿名用户必需对新目录的上层目录拥有写权限,默认NO不允许
#anon_mkdir_write_enable=YES
# 设置为YES,则允许匿名用户执行除上载和创建目录之外的写入操作、如删除、更名等,默认NO不允许
#anon_other_write_enable=YES
# 是否修改匿名用户所上传文件的所有权。默认值为NO不修改。改为YES匿名用户所上传文件的所有权将改为另外一个不同的用户
#chown_uploads=YES
# 指定拥有匿名用户上传文件所有权的用户。此参数与chown_uploads联用。不推荐使用root用户。
#chown_username=work

# 匿名用户允许的最大数据传输速率(以字节/秒为单位)默认值0(无限制)
#anon_max_rate=0
# 匿名用户新增文件时的umask数值、八进制值,请记住“0”前缀、默认值:077
#anon_umask=077

#---------- 本地用户设置 -----------
# 本地系统用户是否可以登陆,默认值为YES。必须启用此功能才能使任何非匿名登录工作、包括虚拟用户
local_enable=YES
# 定义所有本地用户的根目录。默认为空,本地用户登录到自己的宿主目录
#local_root=/home/vsftpd
# 定义用户个人配置文件所在的目录,配置文件名为用户名,配置格式与vsftpd.conf相同。默认无不单独设置用户权限,虚拟用户也用这个
#user_config_dir=/etc/vsftpd/user.d
# 允许登录用户根目录可写
allow_writeable_chroot=YES
# 设置本地用户的最大数据传输速率(以字节/秒为单位)默认值0(无限制)
local_max_rate=0
# 本地用户新增文件时的umask数值,默认值为077。如果希望新增的文件他人可以访问的话,修改为022
local_umask=022

#---------- 虚拟用户设置 -----------
# 若是启动这项功能,所有的非匿名登入者都视为guest,默认值为NO关闭。如果要使用ftp虚拟用户需要启用
#guest_enable=NO
# 定义VSFTPD的guest用户在系统中的用户名。默认值为ftp,在使用ftp虚拟用户时建议自定义,例如ftpvuser
#guest_username=


#-------------- 安全措施控制 --------------
#---------- 用户登陆控制 -----------
# /etc/vsftpd/ftpusers # 该配置文件中的用户禁止登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的
# 指定vsftpd进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd,使用ftp虚拟用户时需要更改
pam_service_name=vsftpd
# 在vsftpd中使用TCP_Wrappers封装数据,默认值为YES。
tcp_wrappers=YES
# 是否通过userlist_file列表控制可登陆的用户、默认NO不启用;如果启用、列表中的用户默认拒绝登录FTP服务器,在输入用户名后、不提示输入密码
userlist_enable=YES
# 指定userlist_file用户列表文件,默认为/etc/vsftpd/user_list
userlist_file=/etc/vsftpd/user_list
# 此选项在userlist_enable选项启动后才生效,决定禁止还是允许userlist_file指定文件中的用户登录FTP服务器,
# 默认为YES禁止文件中的用户登录,NO则允许文件中的用户登录FTP服务器
userlist_deny=YES

#---------- 目录访问控制 -----------
# 是否将本地用户锁定在其宿主目录中,默认值为NO不锁定,需要与chroot_list_enable参数值配合
# chroot_local_user=YES chroot_list_enable=YES,所有用户都被限制在其根目录下,但chroot_list_file 指定的用户例外,不受限制,相当于白名单模式
# chroot_local_user=YES chroot_list_enable=NO ,不使用chroot_list_file 文件,所有用户都被限制在其根目录下
# chroot_local_user=NO chroot_list_enable=YES,所有用户都不被限制其根目录下,但chroot_list_file 指定的用户例外,受到限制,相当于黑名单模式
# chroot_local_user=NO chroot_list_enable=NO ,不使用chroot_list_file 文件,所有用户都不被限制
chroot_local_user=YES
# 是否锁定用户在其宿主目录中,默认为NO不锁定。具体的用户在chroot_list_file参数指定的文件中
chroot_list_enable=YES
# 指定要锁定在宿主目录中的用户一行一用户,通常为/etc/vsftpd/chroot_list,
# 具体是锁定还是排除锁定要看chroot_list_enable和chroot_local_user的组合值
chroot_list_file=/etc/vsftpd/chroot_list
# 此选项需与chroot_local_user配合,chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自家目录字段。默认值为NO。
#passwd_chroot_enable=NO

#---------- 文件操作控制 -----------
# 是否隐藏文件的所有者和组信息。默认值为NO不隐藏,
# 如果为YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp
hide_ids=NO
# 是否允许使用"ls-R"指令,默认值为NO不允许。如果在一个大型FTP站点的根目录下使用"ls-R"会消耗大量系统资源。
ls_recurse_enable=NO
# 是否允许使用修改文件系统的FTP的指令,默认为NO不允许,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE以及SITE
write_enable=YES
# 安全沙箱目录,指向一个ftp用户无写权限的空目录,默认为/usr/share/empty。
# 当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。         
#secure_chroot_dir=
#用于创建上载文件的权限。Umasks应用于此值之上、默认值:0666; 更改为0777则上传的文件可执行
file_open_mode=0666
# true则删除任何失败的上载文件。默认值:NO(在v2.0.7中添加)。
delete_failed_uploads=NO
# 设置为NO则所有目录列表命令都将拒绝权限,默认值:是
dirlist_enable=YES
# 设置为NO则所有下载请求都将拒绝权限,默认值:是
download_enable=YES
# 新增文件的umask数值,见各用户设置。
#anon_umask=077
#local_umask=022

#-------------- 其他设置 --------------
# 是否在系统进程列表中显示每个会话(session)的状态,默认为NO不显示。包括挂起、下载等
setproctitle_enable=NO
# 用户使用ls -al命令时,列表信息是否显示拥有者名称而不是UID,默认为NO不显示
text_userdb_names=No
# vsftpd显示目录列表时是否使用服务器本地时区的时间。默认为NO显示GMT时间,建议修改为YES。由ftp命令“MDTM”返回的时间值也受此选项影响。      
use_localtime=YES
# 本地用户登录时vsftpd是否检查/etc/shells文件以寻找一个有效的用户shell。默认为YES。此选项仅对不使用PAM方式的VSFTPD生效。
check_shell=NO
# 指定一个专用的除nobody以外的用户,当VSFTPD不想要什么权限时,使用此用户身份。默认值为nobody,
# 如果使用建议修改,因为在大多数的机器上,nobody用户被用于大量重要的事情
#nopriv_user=nobody