环境: RedHat AS4 说明:不做说明,一般安装命令均使用ROOT权限,用 # 表示

文章主要内容:介绍Liunx 环境下vsftpd的三种实现方法,匿名用户,本地用户和虚拟用户

通过http://vsftpd.beasts.org 来访问vsftpd的官方网站,确定最新版本,新的补丁及文档,下载可以通过ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.1.0.tar.gz 来下载最新的2.1.0版本(最新的版本已经2.3.4了)。

Vsftpd应该世界上最好的Ftp软件,在Linux范围内。可以看看它们自己的分析:

捕获

 

在此说明一下文字各个颜色的意思,aaa, 表示在Linux命令符要输入的命令; bbb, 表示输入命令后屏幕出现的提示或者需要你自己在编辑器里输入的内容; ccc, 表示不需要你输入的东西,仅仅是对前面一句的注释。

好了,现在可以开始看本文了。

现在假设我们已经将vsftpd-2.1.0.tar.gz文件下载到服务器的/home/xxx目录 (xxx为自定义)

# cd /home/xxx
# tar xzvf vsftpd-2.1.0.tar.gz
//解压缩程序

# cd vsftpd-2.1.0

1、匿名用户形式实现

# vi builddefs.h //编辑builddefs.h 文件,文件内容如下:
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */

将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL
# make //直接在vsftpd-2.1.0里用make编译
# ls -l vsftpd //显示vsftpd执行文件的权限和所有权

-rwxr-xr-x 1 root root 86088 Jun 6 12:29 vsftpd //显示可执行程序已被编译成功

创建必要的帐号,目录:

# useradd nobody                              //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty                  //可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp                                     //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp                      //可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp                    //设置此目录的所有者都是root

# chmod og-w /var/ftp                         //设置此目录的执行权限

如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

#usermod –s /sbin/nologin nobody

#usermod –s /sbin/nologin ftp

安装vsftp配置文件,可执行程序,man等:

# install -m 755 vsftpd /usr/local/sbin/vsftpd-ano
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-ano.conf

这样就安装完成了,那么我们开始进行简单的配置
# vi /etc/vsftpd-ano.conf

将如下三行加入文件

listen=YES //使用standalone(recommend)启动vsftpd,而不是super daemon(xinetd)控制它

listen_port=21

tcp_wrappers=YES

anon_root=/var/ftp //设置匿名用户本地目录,和ftp用户目录必须相同

# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf & //以后台方式启动vsftpd

注意:每行的值都不要有空格,否则启动时会出现错误,举个例子,假如我在listen=YES后多了个空格,那我启动时就出现如下错误:
500 OOPS: bad bool value in config file for: listen
测试搭建好的匿名用户方式

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> quit
221 Goodbye.
#

OK,已经完成了,very nice.
高级配置
细心的朋友可能已经看出来我们只在默认配置文件增加了四行,就实现了FTP连接(也证明了vsftpd的易用性),那么让我们传个文件吧,呀!!传输失败了(见图1)
为什么呢?因为 vsftpd 是为了安全需要,/var/ftp目录不能把所有的权限打开,所以我们这时要建一个目录pub,当然也还是需要继续修改配置文件的。

# mkdir /var/ftp/pub

# chmod -R 777 /var/ftp/pub

为了测试方便,我们先建立一个名为kill-ano的脚本,是为了杀掉FTP程序的

#!/bin/bash
a=`/bin/ps $1}\'` -A | grep vsftpd-ano | awk \'{print
$a kill -9

那么现在大家看看我的匿名服务器配置文件吧

anonymous_enable=YES                               //允许匿名访问,这是匿名服务器必须的
write_enable=YES                                            //全局配置可写
no_anon_password=YES                             //匿名用户login时不询问口令
anon_umask=077                                          //匿名用户上传的文件权限是-rw----
anon_upload_enable=YES                          //允许匿名用户上传文件
anon_mkdir_write_enable=YES                  //允许匿名用户建立目录
anon_other_write_enable=YES                   //允许匿名用户具有建立目录,上传之外的权限,如重命名,删除
dirmessage_enable=YES                              //当使用者转换目录,则会显示该目录下的.message信息
xferlog_enable=YES                                        //记录使用者所有上传下载信息
xferlog_file=/var/log/vsftpd.log                       //将上传下载信息记录到/var/log/vsftpd.log中
xferlog_std_format=YES                                //日志使用标准xferlog格式
idle_session_timeout=600                           //客户端超过600S没有动作就自动被服务器踢出
data_connection_timeout=120                    //数据传输时超过120S没有动作被服务器踢出
chown_uploads=YES                                      //允许上传文件到服务器
chown_username=daemon                          //上传文件的属主
ftpd_banner=XXXXXXXXXX                            //FTP欢迎信息
anon_max_rate=80000                               //这是匿名用户的下载速度为80KBytes/s
check_shell=NO                                             //不检测SHELL
现在再测试,先kill掉再启动FTP程序

# ./kill-ano

# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &

上传一个文件测试一下,怎么样?OK了吧,下载刚上传的那个文件,恩?不行,提示
550 Failed to open file.
传输已失败!
传输队列已完成
1 个文件传输失败

没有关系,你记得咱们设置了anon_umask=077了吗?所以你下载不了,如果你到服务器上touch 一个文件(644),测试一下,是可以被下载下来的,好了,匿名服务器就说到这里了。

 

2、本地用户形式实现

进入vsftpd-2.1.0的源代码目录

# make clean //清除编译环境

# vi builddefs.h //继续编辑builddefs.h 文件,文件内容如下:

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */

将以上define VSF_BUILD_PAM行的define改为undef,支持tcp_wrappers,不支持PAM认证方式,支持SSL,记住啊,如果支持了PAM认证方式,你本地用户是不能登陆的。
# make //直接在vsftpd-2.1.0里用make编译
# ls -l vsftpd

-rwxr-xr-x 1 root root 84712 Jun 6 18:56 vsftpd //可执行程序已被编译成功

创建必要的帐号,目录:

# useradd nobody                        //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty            //可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp                               //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp                //可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp             //设置此目录的所有者都是root

# chmod og-w /var/ftp                  //设置此目录的执行权限

如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

#usermod –s /sbin/nologin nobody

#usermod –s /sbin/nologin ftp

安装vsftp配置文件,可执行程序,man等:

# install -m 755 vsftpd /usr/local/sbin/vsftpd-ano
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-ano.conf

这样就安装完成了,那么我们开始进行简单的配置

# vi /etc/vsftpd-loc.conf ,将如下三行加入文件

listen=YES //使用standalone(recommend)启动vsftpd,而不是super daemon(xinetd)控制它

listen_port=21

tcp_wrappers=YES //支持tcp_wrappers //限制访问(/etc/hosts.allow,/etc/hosts.deny)
anonymous_enable=NO //不支持匿名用户登录

local_enable=YES //允许本地用户登陆

# /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf & //以后台方式启动vsftpd

测试搭建好的匿名用户方式,先测试root用户吧:)

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/root\"
ftp> quit
221 Goodbye.

我们看到root用户可以登陆到ftp,他的登陆目录就是自己的主目录。
再测试一个系统用户,那我们先建立一个用户名叫test的

# useradd test

# passwd test

Changing password for user test.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

建立好了,让我们开始测试吧!!

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/home/test\"
ftp> quit
221 Goodbye.

我们看到test用户可以登陆到ftp,他的登陆目录也是自己的主目录。哈哈,又完成了!

高级配置
如果我们不支持PAM认证方式,那么本地用户就可以登陆,而默认编译的vsftpd支持PAM认证方式,所以是不支持本地用户登陆的。恩,从这点说,这也是vsftp安全的一个表现----禁止本地用户登陆。我们登陆后进行测试,传一个文件上去,得,失败了,那下载个文件下来吧,恩,这是成功的,而且我们发现我们可以进入到系统根目录,这样很危险。
那么改配置文件吧,为了测试方便,我们先建立一个名为kill-loc的脚本,也是为了杀掉FTP程序的

#!/bin/bash
$1}\'` a=`/bin/ps -A | grep vsftpd-loc | awk \'{print

$a kill -9

现在提供我的本地用户验证服务器配置文件吧(在匿名里写过的注释我就不在这里写了)

listen=YES
listen_port=21
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022                             
//本地用户文件上传后的权限是-rw-r-r
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
chroot_local_user=YES                     //限制用户在自己的主目录
#local_root=/ftp                                    //可以指定所有本地用户登陆后的目录,如果不设置此项,用户都会登陆于自己的主目录,就跟咱们前面测试的结果是一样的
local_max_rate=500000                    //本地用户的下载速度为500KBytes/s
idle_session_timeout=600               //每个回话空闲时间600s

data_connection_timeout=120         //数据连接超时时间120s

nopriv_user= nobody                          //设定服务执行者为nobody,vsftpd推荐使用一个权限很低的用户,最好是没有home目录(/dev/null),没有登陆shell(/sbin/nologin),系统会更安全

ftpd_banner=XXXXXXXXXXXX

check_shell=NO
userlist_enable=YES
                          //能使用userlist形式

userlist_deny=YES                              //userlist为不允许登录的用户,一行一个帐号

userlist_file=/etc/vsftpd.denyuser      //userlist文件的位置

如果test这个用户加到vsftpd.denyuser里,那么登陆时会出现如下错误:

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 Welcome to d-1701.com FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
530 Permission denied.
Login failed.

本地用户登陆方式就介绍到这里。

 

3、虚拟用户形式实现(db及mysql形式)

进入vsftpd-2.1.0的源代码目录

# make clean //清除编译环境
# vi builddefs.h //继续编辑builddefs.h 文件,文件内容如下:

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#undef VSF_BUILD_PAM
#define VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */

将以上define VSF_BUILD_PAM行的undef改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL,和匿名用户形式是一样的。
# make
# ls -l vsftpd

-rwxr-xr-x 1 root root 86088 Jun 6 22:26 vsftpd //可执行程序已被编译成功
创建必要的帐号,目录:

# useradd nobody                         //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty             //可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp                                //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp                //可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp              //设置此目录的所有者都是root

# chmod og-w /var/ftp                    //设置此目录的执行权限

如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

#usermod –s /sbin/nologin nobody

#usermod –s /sbin/nologin ftp

安装vsftp配置文件,可执行程序,man等:

# install -m 755 vsftpd /usr/local/sbin/vsftpd-ano
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-ano.conf

这样就安装完成了,那么我们开始进行简单的配置
对于用DB库存储用户名及密码的方式来说:
(1)查看系统是否有相应软件包
# rpm –qa | grep db4
db4-devel-4.2.52-7.1
db4-4.2.52-7.1
db4-utils-4.2.52-7.1

(2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如

# vi /home/logins.txt
test
12345

(3)建立数据库文件并设置文件属性

# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db
# chmod 600 /etc/vsftpd_login.db

(4)建立认证文件

# vi /etc/pam.d/ftp      插入如下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

(5)建立一个虚拟用户

useradd -d /home/vsftpd -s /sbin/nologin vsftpd
ls -ld /home/vsftpd
drwx------ 3 vsftpd vsftpd 1024 Jun 6 22:55 /home/vsftpd/

(6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述)

# vi /etc/vsftpd-pam.conf

listen=YES
listen_port=21
tcp_wrappers=YES
                        //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES
anonymous_enable=NO
local_enable=YES                      
//PAM方式此处必须为YES,如果不是将出现如下错误:
500 OOPS: vsftpd: both local and anonymous access disabled!
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES                      
//可以使用虚拟用户形式
guest_username=vsftpd              //虚拟用户的名称
virtual_use_local_privs=YES       //虚拟用户和本地用户权限相同
pasv_enable=YES                         //建立资料联机采用被动方式
pasv_min_port=30000                 //建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0。
pasv_max_port=30999               //建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0。

(7)启动程序

# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &    //后台方式启动vsftpd

(8)测试连通及功能

# vi /home/vsftpd/test                                                     //建立一个文件,内容如下
1234567890

# chown vsftpd.vsftpd /home/vsftpd/test
# ftp 127.0.0.1

Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> size test
213 11
ftp> quit
221 Goodbye.

OK,可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!!
如果我们需要用户看到文件,怎么办?也好办,在配置文件中加入如下语句:
anon_world_readable_only=NO //匿名登入者不能下载可阅读的档案,默认值为YES
如果需要让用户上传文件和下载文件分开,建立虚拟用户upload,密码为45678,建议如下这么做
# vi /home/logins.txt
test
12345
upload
45678

# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新数据文件
# mkdir /home/vsftpd/upload

# vi /etc/vsftpd-pam.conf    加入如下语句
user_config_dir=/etc/vsftpd_user_conf
# mkdir /etc/vsftpd_user_conf
# vi /etc/vsftpd_user_conf/upload
     文件内容如下

local_root=/home/vsftpd/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# chmod 700 /home/vsftpd/upload
# chown vsftpd.vsftpd /home/vsftpd/upload/

这样,test用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载
对于用Mysql库存储用户名及密码的方式来说:
就是把用户名和密码放在mysql库里,实现起来也相当简单
(1)建立一个库并设置相应权限

# mysql –p
mysql>create database ftpd;
mysql>use ftpd;
mysql>create table user(name char(20) binary,passwd char(20) binary);
mysql>insert into user (name,passwd) values (\'test1\',\'12345\');
mysql>insert into user (name,passwd) values (\'test2\',\'54321\');
mysql>grant select on ftpd.user to ftpd@localhost identified by \'123456\';
mysql>flush privileges;
//刷新权限设置
mysql>quit

(2)下载libpam-mysql进行安装编译

下载地址如下: http://nchc.dl.sourceforge.net/s ... am_mysql-0.5.tar.gz
假设我们把它放在了/home/xxxx目录下

# cd /home/xxxx
# tar xzvf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security

(3)建立PAM认证信息

# vi /etc/pam.d/ftp //内容如下
auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

注意:
crypt= n
crypt=0: 明文密码
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2: 使用MYSQL中的password()函数加密
crypt=3:表示使用md5的散列方式

(4)建立本地虚拟用户

# useradd -d /home/ftpd -s /sbin/nologin ftpd
(5)下面就差修改vsftpd.conf文件了,我把我的提供给大家参考吧:)

# vi /etc/vsftpd-pam1.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftpd
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
anon_world_readable_only=NO
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。
(6)启动vsftpd

# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf & //以后台方式启动
(7)测试连通

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 \"/\"
ftp> quit
221 Goodbye.

看,成功了!!这样就实现了mysql的认证方式,很简单吧??

 

4. Vsftpd的配置参数

#接受匿名用户
anonymous_enable=YES
#匿名用户login时不询问口令
no_anon_password=YES
#匿名用户主目录
anon_root=(none)
#接受本地用户
local_enable=YES
#本地用户主目录
local_root=(none)
#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
deny_email_enable=YES
#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录
check_shell=YES
#若启用此选项,userlist_deny选项才被启动
userlist_enable=YES
#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
userlist_deny=NO
#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)
passwd_chroot_enable=NO
#定义匿名登入的使用者名称。默认值为ftp。
ftp_username=FTP
#################用户权限控制###############
#可以上传(全局控制).
write_enable=YES
#本地用户上传文件的umask
local_umask=022
#上传文件的权限配合umask使用
#file_open_mode=0666
#匿名用户可以上传
anon_upload_enable=NO
#匿名用户可以建目录
anon_mkdir_write_enable=NO
匿名用户其它的写权利(更改权限?)
anon_other_write_enable=NO
如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。
anon_world_readable_only=YES
#如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名
#guest_enable=NO
所有匿名上传的文件的所属用户将会被更改成chown_username
chown_uploads=YES
匿名上传文件所属用户名
chown_username=lightwiter
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_list_enable=YES
#允许使用\"async ABOR\"命令,一般不用,容易出问题
async_abor_enable=YES
管控是否可用ASCII 模式上传。默认值为NO。
ascii_upload_enable=YES
#管控是否可用ASCII 模式下载。默认值为NO。
ascii_download_enable=YES
#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty
secure_chroot_dir=/usr/share/empty
###################超时设置##################
#空闲连接超时
idle_session_timeout=600
#数据传输超时
data_connection_timeout=120
#PAVS请求超时
ACCEPT_TIMEOUT=60
#PROT模式连接超时
connect_timeout=60
################服务器功能选项###############
#开启日记功能
xferlog_enable=YES
#使用标准格式
xferlog_std_format=YES
#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
#log_ftp_protocol=NO
#允许使用pasv模式
pasv_enable=YES
#关闭安全检查,小心呀.
#pasv_promiscuous+NO
#允许使用port模式
#port_enable=YES
#关闭安全检查
#prot_promiscuous
#开启tcp_wrappers支持
tcp_wrappers=YES
#定义PAM 所使用的名称,预设为vsftpd。
pam_service_name=vsftpd
#当服务器运行于最底层时使用的用户名
nopriv_user=nobody
#使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)
pasv_address=(none)
#################服务器性能选项##############
#是否能使用ls -R命令以防止浪费大量的服务器资源
#ls_recurse_enable=YES
#是否使用单进程模式
#one_process_model
#绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
listen=YES
#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO
#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
use_localtime=NO
#测试平台优化
#use_sendfile=YES
################信息类设置################
#login时显示欢迎信息.如果设置了banner_file则此设置无效
ftpd_banner=欢迎来到湖南三辰Fake-Ta FTP 网站.
#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
dirmessage_enable=YES
#显示会话状态信息,关!
#setproctitle_enable=YES
############## 文件定义 ##################
#定义不能更改用户主目录的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#定义限制/允许用户登录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list
#定义登录信息文件的位置
banner_file=/etc/vsftpd/banner
#禁止使用的匿名用户登陆时作为密码的电子邮件地址
banned_email_file=/etc/vsftpd.banned_emails
#日志文件位置
xferlog_file=/var/log/vsftpd.log
#目录信息文件
message_file=.message
############## 目录定义 #################
#定义用户配置文件的目录
user_config_dir=/etc/vsftpd/userconf
#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.
local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk
#匿名用户登陆后的根目录
anon_root=/var/ftp
#############用户连接选项#################
#可接受的最大client数目
max_clients=100
#每个ip的最大client数目
max_per_ip=5
#使用标准的20端口来连接ftp
connect_from_port_20=YES
#绑定到某个IP,其它IP不能访问
listen_address=192.168.0.2
#绑定到某个端口
#listen_port=2121
#数据传输端口
#ftp_data_port=2020
#pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_max_port=0
#pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。
pasv_min_port=0
##############数据传输选项#################
#匿名用户的传输比率(b/s)
anon_max_rate=51200
#本地用户的传输比率(b/s)
local_max_rate=5120000
########################################
别外,如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户
附: FTP 数字代码的意义
110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路埠开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接埠关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。