服务器之家

专注于服务器技术!
当前位置:首页 > FTP服务器 > vsFTPd

vsftpd for Ubuntu配置详解

发布时间:2014-01-09 来源:服务器之家

简介:

      vsftpd 是一种在GPL许可下开放源代码的FTP服务器,用于多种UNIX系统和Linux系统。Vsftpd也称为Very Secure FTP Daemon,它是一种安全、快速、稳定的FTP服务器,能够高效地处理大量的并发连接。

特点:

      提供安全的体系结构,根据任务的最低特权需求单独执行每个任务。

      支持虚拟IP配置,可以在提供一个IP地址的情况下,在域中用该地址建立多个FTP服务器。

      允许配置并使用虚拟用户,从而与系统用户账户分离。

      支持TCP封装。

      允许配置匿名服务器,用户可以在不需要身份验证的情况下上传和下载文件。

      性能稳定,可以处理大量的并发连接。

      可以配置为独立的服务器。

      vsftpd服务器支持带宽控制。 

文件布局:

/etc/vsftpd.conf 主配置文件 
/usr/sbin/vsftpd Vsftpd的主程序
/etc/init.d/vsftpd 启动脚本 
/etc/pam.d/vsftpd PAM认证文件 

安装:

# apt-get install vsftpd

创建生成口令文件:

# mkdir /etc/vsftpd
# gedit /etc/vsftpd/vsftpd_login.txt
# db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
提示 db_load: command not found 说明没有db_util

#apt-get install db4.6_util
#db4.6_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db

当提示以下信息时应当注意用户密码文件 vsftpd_login格式 是否编写错误,网络上多是一行用户名一行密码。并没有讲到如果文档在编辑器中刚好偶数行的,最后一个帐号无法登录;在最后一行插入一个回车,奇数行,则可以(不知道其他人有没有碰到)。
db4.6_load: unexpected end of input data or key/data pair
db4.6_load: odd number of key/data pairs

口令文件权限
chmod 600 /etc/vsftpd/vsftpd_login.db

在/etc/pam.d/vsftpd文件里加入以下两行。
可选用 find / -name pam_userdb.so db 确定文件所在目录

auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db

这里有一个注意点就是pam在查找vsftpd_login.db文件时,会自动在设置的db文件名vsftpd_login.db后增加一个“.db”后缀,于是,根据配置文件,pam实际上查找的是vsftpd_login.db.db文件,所以就找不到这个文件了。所以应改为:

auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
这是我在Ubuntu11.04中碰到的,不知道red是不是也这样。

配制vsftpd.conf文件:
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone?  vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=YES
##
## listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
##
#
#
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Disabled by default)
anonymous_enable=NO
##
## 匿名用户登录
##
#
#
# Uncomment this to allow local users to log in.
local_enable=YES
##
## 使用PAM方式此处必须为YES
##
#
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
##
## 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
##
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
##
## 上传后文件及文件夹的属性
##
#
#
anon_world_readable_only=NO
##
##
##
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES
##
## 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
##
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
##
## 是否允许匿名用户创建新文件夹
##
#
anon_other_write_enable=YES
##
## 是否允许匿名删除和重命名文件
##
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
##
##
##
#
# If enabled, vsftpd will display directory listings with the time
# in  your  local  time  zone.  The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
##
##
##
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
##
##
##
#
############### 主动/被动 传输模式 #################
#port_enable=YES
##
## 声明允许主动模式
##
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
##
## 主动模式以20端口传输 与 port_enable=yes 同时设置
##
#
pasv_enable=YES
##
## 声明允许被动模式
##
#
pasv_min_port=0
##
## 服务器开放的被动连接的端口限制 上界,0表示任意。默认值为0
##
#
pasv_max_port=0
##
## 服务器开放的被动连接的端口限制 下界,0表示任意。默认值为0
##
#
#
listen_port=21
##
## 默认FTP服务器端口号是21,出于安全目的,建议修改默认端口号;
##
#
#ftp_data_port=20
##
##
##
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
##
## 设定是否允许改变上传文件的属主,与下面一个设定项配合使用
## 注意,不推荐使用root用户上传文件
##
#
#chown_username=whoever
## 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名
## 可以把上传的文件都改成root属主。whoever:任何人
##
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
xferlog_file=/var/log/vsftpd.log
##
## 日志地址
##
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=NO
##
## 是否启用标准格式记录日志
##
#
log_ftp_protocol=YES
##
## 记录登录信息,该项启用 xferlog_std_format=NO 有效
##
#
# You may change the default value for timing out an idle session.
idle_session_timeout=600
##
##
##
#
# You may change the default value for timing out a data connection.
data_connection_timeout=120
##
##
##
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
##
##
##
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
##
##
##
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
##
##
##
#ascii_download_enable=YES
##
##
##
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES
##
##
##
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
# ls_recurse_enable=NO
##
## 是否能使用ls -R命令以防止浪费大量的服务器资源
##
#
# one_process_model=NO
##
## 是否使用单进程模式
##
#
# Debian customization
#
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
##
##
##
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
##
##
##
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
##
##
##
#
virtual_use_local_privs=YES
##
##当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
##当virtual_use_local_privs=NO 时,虚拟用户和匿名用户有相同的权限,默认是NO。
##
#
tcp_wrappers=YES
##
## 支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
##
#
guest_enable=YES
##
## 采用虚拟用户形式
##
#
#
guest_username=ftpsite
#ftpsite
#
##
## 采用虚拟用户形式
##
#
connect_timeout=60
##
##
##
#
accept_timeout=60
##
##
##
#
max_clients=100
##
## max_clients 用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制。
## 例如max_client=100表示FTP服务器的所有客户端最大连接数不超过100个。
## 可以防止因客户连接数过多而导致服务器内存占满,死机。
## 当客户机数超过服务器所设置的最大值时,客户端会出现:421 There are too many connected users,please try later.
#
max_per_ip=10
# max_per_ip 用于设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制。
# 例如max_per_ip=5表示同一IP地址的FTP客户机与FTP服务器建立的最大连接数不超过5个。
# 可以防止一些人使用多线程下载资源,占用服务器的贷款、资源。
# 这样当客户机使用的线程数超过服务器的最大限制时,将出现:There are too many connections from your internet address.
#
anon_max_rate=0
##
## local_max_rate 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s.
##
#
local_max_rate=0
##
## anon_max_rate 用于设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制。例如ano_max_rate=200000,表示FTP服务器的匿名用户最大传输速率设置为200KB/s.
##
#
nopriv_user=nobody

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list
##
## 这里的 userlist_enable=YES 和 userlist_deny=NO 组合,只允许vsftpd.user_list文件中的用户账号能够进行FTP登录;
## 这里的 userlist_enable=YES 和 userlist_deny=YES 组合,禁止vsftpd.user_list文件中的用户账号能够进行FTP登录(登录时不会出现密码提示,直接被服务器拒绝);
##
user_config_dir=/etc/vsftpd_user_conf
##
## user_config_dir 用户权限管理信息文件地址目录
##
#setproctitle_enable=YES
#session_suport=YES
##
##
##
# CONFIG END

用户权限:
anon_umask=022 #目录及文件上传后的权限属性
write_enable=YES #开放的写权限
anon_world_readable_only=NO #开放的下载权限
anon_upload_enable=YES #开放的上传权限
anon_mkdir_write_enable=YES #开放创建目录的权限
anon_other_write_enable=YES #开放删除和重命名的权限

重启服务:

service vsftpd restart

常见错误:
### ====================================================
C:UsersAdministrator>FTP
ftp> OPEN 192.168.0.1
连接到 192.168.0.1。
220 (vsFTPd 2.3.2)
用户(192.168.0.1:(none)): admin
331 Please specify the password.
密码:
230 Login successful.
ftp> ls
550 Permission denied.
425 Use PORT or PASV first.
ftp> quote PASV
227 Entering Passive Mode (192.168.0.1,214,235).
ftp> ls
425 Failed to establish connection.
### ====================================================

500 OOPS: vsftpd: cannot locate user specified in 'guest_username':root2
500 OOPS: cannot read user list file:/etc/vsftpd.user_list
500 OOPS: priv_sock_get_cmd
创建/etc/vsftpd.user_list用户列表


530 Login incorrect.
1,这里有一个注意点就是pam在查找vsftpd_login.db文件时,会自动在设置的db文件名vsftpd_login.db后增加一个“.db”后缀,于是,根据配置文件,pam实际上查找的是vsftpd_login.db.db文件,所以就找不到这个文件了。
2,userlist_enable 和 userlist_deny 使用方式错误而使用户无法登录的情况也有发生。



FTP数字代码的意义


110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 Here comes the directory listing.FY 是目录列表。
150 文件状态正常,开启数据连接端口。
200 PORT command successful. Consider using PASV
200 命令执行成功。FY 考虑使用被动模式。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 Entering Passive Mode
227 进入passive mode。FY 227进入被动模式
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 Failed to establish connection.
425 无法开启数据链路。FY 没有建立连接。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。 
553 未执行请求的的命令,名称不正确。

查看VSFTPD情况
ps ax | grep vsftpd | grep -v grep