Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2504061
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: LINUX

2005-11-06 15:35:31

文档之vsftp配置大全

安装篇 
=============== 
这个文件详细介绍了如何从VSFTPD的.tar.gz分发包开始,建立和安装并运行VSFTPD。 

1)建立VSFTPD 
先进入解压.tar.gz文件后产生的目录内。如下: 
cd vsftpd-2.0.1 

编辑"builddefs.h"以操作compile-time设定。(tcp_wrappers build,等) 

输入make,回车(如果它不工作请发邮件通知我  . 
这将产生一个二进制文件,你可以验证一下。如下: 
[chris@localhost vsftpd]$ ls -l vsftpd 
-rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd 

2)满足VSFTPD安装所需的一些条件 
VSFTPD默认设置需要一个"nobody"用户,如果这个用户不存在,那么添加它。如下: 
[root@localhost root]# useradd nobody 
useradd: user nobody exists 

VSFTPD默认设置需要一个空目录:/usr/share/empty.增加这个目录,如果它还不存在的话。如下: 
[root@localhost root]# mkdir /usr/share/empty/ 
mkdir: cannot create directory `/usr/share/empty': File exists 

如果容许匿名用户(anonymous),那么你将需要一个"ftp"用户和其home目录(这个home目录不属于“ftp”用户,而且“ftp"用户也对其没有写权限)在你的系统中存在。 
以下命令用来创建一个"ftp"用户,如果它还不存在的话。 
[root@localhost root]# mkdir /var/ftp/ 
[root@localhost root]# useradd -d /var/ftp ftp 

(即使你的"ftp"用户已经存在,完成以下这两步也是很有好处的:) 
[root@localhost root]# chown root.root /var/ftp 
[root@localhost root]# chmod og-w /var/ftp 

3)安装VSFTPD的配置、执行和帮助文件。 
输入"make install"后会将二进制文件和帮助文件拷贝到适当的目录。 
你也可以手工拷贝这些文件: 
cp vsftpd /usr/local/sbin/vsftpd 
cp vsftpd.conf.5 /usr/local/man/man5 
cp vsftpd.8 /usr/local/man/man8 

"make install"不会拷贝默认的配置文件,所以建议你手工拷贝: 
cp vsftpd.conf /etc 
daidong注:根据你系统版本的不同,也可能是 cp vsftpd.conf /etc/vsftpd 

4)测试 (无inetd影响) 
VSFTPD能运行在独立模式(standalone)或者通过inetd(xinetd)来启动。 
你能通过inetd来运行vsftpd以更好地控制它。但我们在首次运行时不这么做,以便检查系统是否现在配置正常。 
编辑/etc/vsftpd.conf(daidong注:也可能是/etc/vsftpd/vsftpd.conf),并在最下面加入以下这一行: 
listen=YES 

这将告诉VSFTPD不要从inetd启动。 
OK,现在试着启动FTP。 
以ROOT登录。 
确定你没有运行其他FTP服务(否则VSFTPD不能占用FTP所需的21端口)。 
运行那个二进制文件,如下: 
[root@localhost root]# /usr/local/sbin/vsftpd & 
[1] 2104 

如果一切正常,那么你将连上FTP服务器,如下: 
[chris@localhost chris]$ ftp localhost 
Connected to localhost (127.0.0.1). 
220 (vsFTPd 1.1.1) 
Name (localhost:chris): ftp 
331 Please specify the password. 
Password: 
230 Login successful. Have fun. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> ls 
227 Entering Passive Mode (127,0,0,1,229,133) 
150 Here comes the directory listing. 
d--x--x--x 2 0 0 4096 Jan 14 2002 bin 
d--x--x--x 2 0 0 4096 Apr 21 20:52 etc 
drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib 
drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub 
226 Directory send OK. 
ftp> 

5)从inetd或者类似方式启动(官方推荐使用standalone方式) 
你也许想通过inetd或者类似方式启动VSFTPD,因为这能给你更多的感受。例如xinetd就有很多的设置。 
(注意:VSFTPD的内在机制屏蔽了xinetd的大多数的有用的设置)。 

如果使用标准的"inetd",你需要编辑/etc/inetd.conf,在其中加入以下一行: 
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd 

(确定你删除或者注释掉一些已存在的FTP服务配置行。如果你没有安装tcp_wrappers,或者不想使用它们,那么请去掉/usr/sbin/tcpd part). 

inetd需要指定并重新载入它的配置文件: 
kill -SIGHUP `pidof inetd` 

如果你想使用"xinetd",请参阅我们提供的范例 /EXAMPLE/INTERNET_SITE/README. 而其他范例文件将告诉你如何调配出更强大的xinetd功能。 

6)为本地登录配置PAM文件(可选) 
如果你在一台激活了PAM的设备上运行VSFTPD,你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。 
(注:如果你的PAM版本比较老,那么这个文件也许是 /etc/pam.conf). 

做为一个标准设置,你可以拷贝一个已提供的范例文件,如下: 
cp RedHat/vsftpd.pam /etc/pam.d/ftp 

7)自定义你的配置文件 
完成以上的配置后,建议你安装一个配置文件。默认的配置文件位置是/etc/vsftpd.conf. 在VSFTPD软件分发包内有一个范例配置文件。 
你可以拷贝其为/etc/vsftpd.conf以做进一步修改。 
cp vsftpd.conf /etc 
(daidong注:也可能是 cp vsftpd.conf /etc/vsftpd ). 

这个默认配置即不容许本地登录也不容许匿名用户上传,也许你希望更改这个配置。 


其它 
=================== 
测试平台 (已通过) 
-流行的,功能完善的平台都能测试通过。在以下平台的较新版本,VSFTPD工作得很好。在其大部分较早的版本下,也运行正常。 
- RedHat Linux 
- RedHat Enterprise Linux 
- Solaris / GNU tools (Solaris 8 or newer) 
- SuSE Linux 
- Debian Linux 
- OpenBSD 
- FreeBSD 
- NetBSD 
- HP-UX / GNU tools 
- IRIX / GNU tools 
- Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK)
虚拟用户1 
============= 
这个例子示范了如何为虚拟用户设置VSFTPD/PAM。 
虚拟用户是一个在系统中并不作为一个登录实体而存在的用户。使用虚拟用户比使用真实的用户更安全,因为这个账号只能用于FTP服务器。 

虚拟用户经常用来提供给不大可信任的用户访问某些资源,而这些资源通常是其他普通用户不能访问的。 

1)创建虚拟用户数据库 
我们将使用pam_userdb来认证虚拟用户。这需要提供一个“db"格式(一种通用数据库格式)的用户名/密码文件。 
创建一个"db"格式的文件,首先要创建一个标准文本文件,并把用户名,密码以竖直排列方式输入。如logins.txt: 
tom 
foo 
fired 
bar 
这个例子中,tom用户的密码是foo.fired用户的密码是bar. 
以ROOT登录,创建一个数据库文件,如下: 
db_load -T -t hash -f logins.txt /etc/vsftpd_login.db 
(这要求berkeley db程序已经安装) 
(注:一些系统也许安装了多个版本的"db",所以某些情况下你可能使用"db3_load"才是正确的。对于一些 Debian系统就是这样。 
关键在于要让pam_userdb相信它的登录数据库是哪一个db版本所产生(一般都是db3,尽管你的系统里可能安装的是db4).) 

这将创建/etc/vsftpd_login.db文件。显然,你希望设定这个文件的权限: 
chmod 600 /etc/vsftpd_login.db 

要了解更多关于维护你的登录数据库的信息,请在"berkeley DB"察看相关文档: 
 

2)用你的新数据库创建一个PAM文件 
请参考范例vsftpd.pam,它包含2行: 
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login 
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login 

这是告诉PAM用新的数据库去验证用户。把这个PAM文件拷贝到PAM目录,一般是/etc/pam.d 
cp vsftpd.pam /etc/pam.d/ftp 

3)为虚拟用户设置home目录 
useradd -d /home/ftpsite virtual 
ls -ld /home/ftpsite 
(which should give): 
drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite 

我们已经创建了一个名叫"virtual"的用户,home目录是"/home/ftpsite". 
我们拷贝一些东西到这个下载目录: 
cp /etc/hosts /home/ftpsite 
chown virtual.virtual /home/ftpsite/hosts 

4)创建你的vsftpd.conf配置文件 
请参考这个目录下的例子。让我们一行行地看一看这些配置: 
anonymous_enable=NO 
local_enable=YES 

安全起见,屏蔽了匿名用户,只启用了非匿名用户(即虚拟用户使用的账号) 

write_enable=NO 
anon_upload_enable=NO 
anon_mkdir_write_enable=NO 
anon_other_write_enable=NO 

为了安全请确认这几个配置,这将关闭写的权限。 

chroot_local_user=YES 

这将把虚拟用户锁定在我们在以上设置的/home/ftpsite目录内。 

guest_enable=YES 
guest_username=virtual 

guest_enable非常重要-它激活了虚拟用户!而guest_username说明所有的虚拟用户都对应我们在上面设置的真实用户:“virtual". 
这同时确定了虚拟用户在文件系统中的位置,也就是说,虚拟用户的home目录即"virtual"用户的home目录:/home/ftpsite。 

listen=YES 
listen_port=10021 

这让VSFTPD以独立模式(standalone)运行,而不是从inetd方式启动。也就是说,你运行VSFTPD可执行文件就启动了FTP服务。 
同时也让VSFTPD启用非标准端口10021来监听FTP请求(FTP一般使用21端口)。 

pasv_min_port=30000 
pasv_max_port=30999 

这设定了被动模式的FTP请求端口。当你配置了一个防火墙的时候,这个配置就很好用。 

拷贝范例配置文件到/etc 
cp vsftpd.conf /etc/ 
(daidong注:也可能是/etc/vsftpd) 

5)启动VSFTPD 
到VSFTPD二进制文件所在的目录,输入: 
./vsftpd 

如果一切正常,这个命令将生效。否则,你将会看到一些错误信息的反馈。 

6)测试 
启动另一个会话。(或者ctrl-z,再输入"bg",让VSFTPD在后台运行)。 
这是一个FTP会话的例子: 

ftp localhost 10021 
Connected to localhost (127.0.0.1). 
220 ready, dude (vsFTPd 1.1.0: beat me, break me) 
Name (localhost:chris): tom 
331 Please specify the password. 
Password: 
230 Login successful. Have fun. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> pwd 
257 "/" 
ftp> ls 
227 Entering Passive Mode (127,0,0,1,117,135) 
150 Here comes the directory listing. 
226 Transfer done (but failed to open directory). 
ftp> size hosts 
213 147 
ftp> 

注释: 
密码是"foo" 
出现”failed to open directory“的话,别担心。这是因为/home/ftpsite目录不容许被任意浏览。 
(我们可以更改anon_world_readable_only=NO以消除告警,但为了安全,还是保留这个配置)。 
我们能通过size命令看到我们已经访问了被我们拷贝到这里的"hosts"文件。 

vsftpd.conf 
anonymous_enable=NO 
local_enable=YES 
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=virtual 
listen=YES 
listen_port=10021 
pasv_min_port=30000 
pasv_max_port=30999
虚拟用户2 
=============== 
这个例子将演示如何扩展“VIRTUAL_USERS”那个范例,从而实现更复杂一点的配置。 

让我们假定我们需要2种不同的虚拟用户:一种只能浏览并下载资源,另一种能上传文件并浏览站内资源。 

要激活这个设置,我们将使用VSFTPD的强大的“单个用户配置”功能(是V1.1.0后出现的新功能)。 

在前一个虚拟用户范例中,我们创建了2个用户-tom和fred. 
我们将实现fred有写权限以上传新文件,同时tom只能下载文件。 

1)激活单个用户配置功能。 
要激活这个功能,需要增加以下配置行到配置文件: 

user_config_dir=/etc/vsftpd_user_conf 

并且创建目录: 

mkdir /etc/vsftpd_user_conf 

2)授予tom读取所有文件和目录的权限 
在上一个例子的最后,我们注意到虚拟用户只能浏览所有的完全可读属性的目录和文件。我们使/home/ftpsite完全可读,而且被上传的文件也 
赋予了完全可读的权限(daidong注:意思是说这样虚拟用户就能读取所有的文件了)。但实现这个目的的另一个方法是授权tom能下载那些非完全可读的文件。 

对于tom,他的配置文件中需要修改一个设置: 
anon_world_readable_only: 

设为"anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom 
(daidong注:既把默认配置修改了anon_world_readable_only后,复制到/etc/vsftpd_user_conf下,名字为tom) 

验证一下结果-以tom登录,“ls”将返回一个目录列表。如果以fred登录将不会如此。 

注意:重启VSFTPD以启用配置文件/etc/vsftpd.conf(高级用户也可以发送SIGHUP给VSFTPD的监听进程). 

3)授予freg读取所有文件/目录并创建新文件/目录的权限,但让他不能对已存在的文件/目录进行操作. 

echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred 
echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred 
echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred 

验证一下-以tom登录,将不能上传,而fred就可以. 
试图删除一个文件--噢,你们俩都不行!
配置详解 
============= 
VSFTPD.CONF.5 
================ 
名字 
vsftpd.conf :VSFTPD的配置文件 

描述: 
vsftpd.conf 用来控制VSFTPD的各项功能。默认状态下,它的位置是/etc/vsftpd.conf。 
(译者注:也许老的LINUX版本下,配置文件是这个位置,但新的LINUX版本,例如FC2,配置文件是在/etc/vsftpd目录下。 
但是也很可能和安装方式有关,RPM包安装,配置文件是/etc/vsftpd.conf. 源码包安装:/etc/vsftpd/vsftpd.conf.我不确定。 
但以后我不再特别指出了,真累!!) 
然而,你也可以通过修改配置行来指定到其它目录。这一点很有用,因为也许你想使用一些高级inetd功能,例如xinetd,在一个多虚拟主机的机器上调用不同的配置文件。 

格式 
VSFTPD.conf 的格式非常简单,每行要么是一个注释,要么是一个指令。注释行以#开始并被忽略掉。指令行格式如下: 
配置项=参数值 
很重要的一点是,这个格式里不存在任何空格。 
默认的,每一个配置项在配置文件里都占一编辑行,可以被修改。 

布尔选项 
参数值的布尔选项可以是: 
YES或者NO 

allow_anon_ssl 
只有ss1_enable激活了才可以启用此项。如果设置为YES,匿名用户将容许使用安全的SSL连接服务器。 
默认值:NO 

anon_mkdir_write_enable 
如果设为YES,匿名用户将容许在指定的环境下创建新目录。如果此项要生效,那么配置write_enable必须被激活,并且匿名用户必须在其父目录有写权限。 
默认值:NO 

anon_other_write_enable 
如果设置为YES,匿名用户将被授予较大的写权限,例如删除和改名。一般不建议这么做,除非想完全授权。 
默认值:NO 

anon_upload_enable 
如果设为YES,匿名用户就容许在指定的环境下上传文件。如果此项要生效,那么配置write_enable必须激活。并且匿名用户必须在相关目录有写权限。 
默认值:NO 

anon_world_readable_only 
启用的时候,匿名用户只容许下载完全可读的文件,这也就容许了ftp用户拥有对文件的所有权,尤其是在上传的情况下。 
默认值:YES 

anonymous_enable 
控制是否容许匿名用户登录。如果容许,那么“ftp”和“anonymous”都将被视为“anonymous"而容许登录。 
默认值:YES 

ascii_download_enable 
启用时,用户下载时将以ASCII模式传送文件。 
默认值:NO 

ascii_upload_enable 
启用时,用户上传时将以ASCII模式传送文件。 
默认值:NO 

async_abor_enable 
启用时,一个特殊的FTP命令"async ABOR”将容许使用。只有不正常的FTP客户端要使用这一点。而且,这个功能又难于操作,所以, 
默认是把它关闭了。但是,有些客户端在取消一个传送的时候会被挂死(daidong注:估计是客户端无响应了),那你只有启用这个功能才能避免这种情况。 
默认值:NO 

background 
启用时,并且VSFTPD是“listen”模式启动的(daidong注:就是standalone模式),VSFTPD将把监听进程置于后台。但访问VSFTPD时,控制台将立即被返回到SHELL。 
默认值:NO 

check_shell 
注意:这个选项只对非PAM结构的VSFTPD才有效。如果关闭,VSFTPD将不检查/etc/shells以判定本地登录的用户是否有一个可用的SHELL。 
默认值:YES 

chmod_enable 
启用时,将容许使用SITE CHMOD命令。注意,这只能用于本地用户。匿名用户绝不能使用SITE CHMOD。 
默认值:YES 

chown_uploads 
如果启用,所以匿名用户上传的文件的所有者将变成在chown_username里指定的用户。这对管理FTP很有用,也许也对安全有益。 
默认值:NO 

chroot_list_enable 
如果激活,你要提供一个用户列表,表内的用户将在登录后被放在其home目录,锁定在虚根下(daidong注:进入FTP后,PWD一下,可以看到当前目录是"/",这就是虚根。是FTP的根目录,并非FTP服务器系统的根目录)。如果chroot_local_user设为YES后,其含义会发生一点变化。 
在这种情况下,这个列表内的用户将不被锁定在虚根下。 
默认情况下,这个列表文件是/etc/vsftpd.chroot_list, 但你也可以通过修改chroot_list_file来改变默认值。 
默认值:NO 

chroot_local_user 
如果设为YES,本地用户登录后将被(默认地)锁定在虚根下,并被放在他的home目录下。 
警告: 
这个配置项有安全的意味,特别是如果用户有上传权限或者可使用SHELL的话。在你确定的前提下,再启用它。 
注意,这种安全暗示并非只存在于VSFTPD,其实是广泛用于所有的希望把用户锁定在虚根下的FTP软件。 
默认值:NO 

connect_from_port_20 
这用来控制服务器是否使用20端口号来做数据传输。为安全起见,有些客户坚持启用。相反,关闭这一项可以让VSFTPD更加大众化。 
默认值:NO (但在范例配置文件中,启用了,即YES) 

deny_email_enable 
如果激活,你要提供一个关于匿名用户的密码E-MAIL表(daidong注:我们都知道,匿名用户是用邮件地址做密码的)以阻止以这些密码登录的匿名用户。 
默认情况下,这个列表文件是/etc/vsftpd.banner_emails,但你也可以通过设置banned_email_file来改变默认值。 
默认值:NO 

dirlist_enable 
如果设置为NO,所有的列表命令(daidong注:如ls)都将被返回“permission denied”提示。 
默认值:YES 

dirmessage_enable 
如果启用,FTP服务器的用户在首次进入一个新目录的时候将显示一段信息。默认情况下,会在这个目录中查找.message文件,但你也可以 
通过更改message_file来改变默认值。 
默认值:NO (但在配置范例文件中启用了它) 

download_enable 
如果设为NO,下载请求将返回“permission denied”。 
默认值:YES 

dual_log_enable 
如果启用,两个LOG文件会各自产生,默认的是/var/log/xferlog和/var/log/vsftpd.log。前一个是wu-ftpd格式的LOG,能被通用工具分析。 
后一个是VSFTPD的专用LOG格式。 
默认值: NO 

force_dot_files 
如果激活,即使客户端没有使用“a”标记,(FTP里)以.开始的文件和目录都会显示在目录资源列表里。但是把"."和".."不会显示。(daidong注:即LINUX下 
的当前目录和上级目录不会以‘.’或‘..’方式显示)。 
默认值:NO 

force_local_data_ssl 
只有在ssl_enable激活后才能启用。如果启用,所有的非匿名用户将被强迫使用安全的SSL登录以在数据线路上收发数据。 
默认值:YES 

force_local_logins_ssl 
只有在ssl_enable激活后才能启用。如果启用,所有的非匿名用户将被强迫使用安全的SSL登录以发送密码。 
默认值:YES 

guest_enable 
如果启用,所有的非匿名用户登录时将被视为”游客“,其名字将被映射为guest_username里所指定的名字。 
默认值:NO 

hide_ids 
如果启用,目录资源列表里所有用户和组的信息将显示为"ftp". 
默认值:NO 

listen 
如果启用,VSFTPD将以独立模式(standalone)运行,也就是说可以不依赖于inetd或者类似的东东启动。直接运行VSFTPD 
的可执行文件一次,然后VSFTPD就自己去监听和处理连接请求了。 
默认值:NO 

listen_ipv6 
类似于listen参数的功能,但有一点不同,启用后VSFTPD会去监听IPV6套接字而不是IPV4的。这个设置和listen的设置互相排斥。 
默认值:NO 

local_enable 
用来控制是否容许本地用户登录。如果启用,/etc/passwd里面的正常用户的账号将被用来登录。 
默认值:NO 

log_ftp_protocol 
启用后,如果xferlog_std_format没有被激活,所有的FTP请求和反馈信息将被纪录。这常用于调试(debugging)。 
默认值:NO 

ls_recurse_enable 
如果启用,"ls -R"将被容许使用。这是为了避免一点点安全风险。因为在一个大的站点内,在目录顶层使用这个命令将消耗大量资源。 
默认值:NO 

no_anon_password 
如果启用,VSFTPD将不会向匿名用户询问密码。匿名用户将直接登录。 
默认值:NO 

no_log_lock 
启用时,VSFTPD在写入LOG文件时将不会把文件锁住。这一项一般不启用。它对一些工作区操作系统问题,如Solaris / Veritas文件系统共存时有用。 
因为那在试图锁定LOG文件时,有时候看上去象被挂死(无响应)了。(daidong注:这我也不是很理解。所以翻译未必近乎原意。原文如下:It exists to workaround 
operating system bugs such as the Solaris / Veritas filesystem combination 
which has been observed to sometimes exhibit hangs trying to lock log files.) 
默认值:NO 

one_process_model 
如果你的LINUX核心是2.4的,那么也许能使用一种不同的安全模式,即一个连接只用一个进程。只是一个小花招,但能提高FTP的性能。请确定需要后再启用它,而且也请确定你的 
站点是否会有大量的人同时访问。 
默认值:NO 

passwd_chroot_enable (daidong注:这段自己看,无语...) 
if enabled, along with 
.BR chroot_local_user 
, then a chroot() jail location may be specified on a per-user basis. Each 
user's jail is derived from their home directory string in /etc/passwd. The 
occurrence of /./ in the home directory string denotes that the jail is at that 
particular location in the path. 
默认值:NO 

pasv_enable 
如果你不想使用被动方式获得数据连接,请设为NO。 
默认值:YES 

pasv_promiscuous 
如果你想关闭被动模式安全检查(这个安全检查能确保数据连接源于同一个IP地址)的话,设为YES。确定后再启用它(daidong注:原话是:只有你清楚你在做什么时才启用它!) 
合理的用法是:在一些安全隧道配置环境下,或者更好地支持FXP时(才启用它)。 
默认值:NO 

port_enable 
如果你想关闭以端口方式获得数据连接时,请关闭它。 
默认值:YES 

port_promiscuous 
如果你想关闭端口安全检查(这个检查可以确保对外的(outgoing)数据线路只通向客户端)时,请关闭它。确认后再做! 
默认值:NO 

run_as_launching_user 
如果你想让一个用户能启动VSFTPD的时候,可以设为YES。当ROOT用户不能去启动VSFTPD的时候会很有用(daidong注:应该不是说ROOT用户没有权限启动VSFTPD, 
而是因为别的,例如安全限制,而不能以ROOT身份直接启动VSFTPD)。强烈警告!!别启用这一项,除非你完全清楚你在做什么(daidong:无语....)!!!随意地启动这一项会导致 
非常严重的安全问题,特别是VSFTPD没有或者不能使用虚根技术来限制文件访问的时候(甚至VSFTPD是被ROOT启动的)。有一个愚蠢的替代方案是启用deny_file,将其设置为{/*,*..*}等, 
但其可靠性却不能和虚根相比,也靠不住。 
如果启用这一项,其他配置项的限制也会生效。例如,非匿名登录请求,上传文件的所有权的转换,用于连接的20端口和低于1024的监听端口将不会工作。其他一些配置项也可能被影响。 
默认值:NO 

secure_email_list_enable 
如果你想只接受以指定E-MAIL地址登录的匿名用户的话,启用它。这一般用来在不必要用虚拟用户的情况下,以较低的安全限制去访问较低安全级别的资源。如果启用它,匿名用户除非 
用在email_password_file里指定的E-MAIL做为密码,否则不能登录。这个文件的格式是一个密码一行,而且没有额外的空格(daidong注:whitespace,译为空格,不知道是否正确)。 
默认的文件名是:/etc/vsftpd.email_passwords. 
默认值:NO 

session_support 
这将配置是否让VSFTPD去尝试管理登录会话。如果VSFTPD管理会话,它会尝试并更新utmp和wtmp。它也会打开一个pam会话(pam_session),直到LOGOUT才会关闭它,如果使用PAM进行认证的话。 
如果你不需要会话纪录,或者想VSFTPD运行更少的进程,或者让它更大众化,你可以关闭它。 
注:utmp和wtmp只在有PAM的环境下才支持。 
默认值:NO 

setproctitle_enable 
如果启用,VSFTPD将在系统进程列表中显示会话状态信息。换句话说,进程名字将变成VSFTPD会话当前正在执行的动作(等待,下载等等)。为了安全目的,你可以关闭这一项。 
默认值:NO 

ssl_enable 
如果启用,vsftpd将启用openSSL,通过SSL支持安全连接。这个设置用来控制连接(包括登录)和数据线路。同时,你的客户端也要支持SSL才行。 
注意:小心启用此项.VSFTPD不保证OpenSSL库的安全性。启用此项,你必须确信你安装的OpenSSL库是安全的。 
默认值:NO 

ssl_sslv2 
要激活ssl_enable才能启用它。如果启用,将容许SSL V2协议的连接。TLS V1连接将是首选。 
默认值:NO 

ssl_sslv3 
要激活ssl_enable才能启用它。如果启用,将容许SSL V3协议的连接。TLS V1连接将是首选。 
默认值:NO 

ssl_tlsv1 
要激活ssl_enable才能启用它。如果启用,将容许TLS V1协议的连接。TLS V1连接将是首选。 
默认值:YES 

syslog_enable 
如果启用,系统log将取代vsftpd的log输出到/var/log/vsftpd.log.FTPD的了log工具将不工作。 
默认值:NO 

tcp_wrappers 
如果启用,vsftpd将被tcp_wrappers所支持。进入的(incoming)连接将被tcp_wrappers访问控制所反馈。如果tcp_wrappers设置了 
VSFTPD_LOAD_CONF环境变量,那么vsftpd将尝试调用这个变量所指定的配置。 
默认值:NO 

text_userdb_names 
默认情况下,在文件列表中,数字ID将被显示在用户和组的区域。你可以编辑这个参数以使其使用数字ID变成文字。为了保证FTP性能,默认 
情况下,此项被关闭。 
默认值:NO 

tilde_user_enable 
如果启用,vsftpd将试图解析类似于~chris/pics的路径名(一个"~"(tilde)后面跟着个用户名)。注意,vsftpd有时会一直解析路径名"~"和"~/"(在这里,~被解析成内部登录目录)。 
~用户路径(~user paths)只有在当前虚根下找到/etc/passwd文件时才被解析。 
默认值:NO 

use_localtime 
如果启用,vsftpd在显示目录资源列表的时候,在显示你的本地时间。而默认的是显示GMT(格林尼治时间)。通过MDTM FTP命令来显示时间的话也会被这个设置所影响。 
默认值:NO 

use_sendfile 
一个内部设定,用来测试在你的平台上使用sendfile()系统呼叫的相关好处(benefit). 
默认:YES 

userlist_deny 
这个设置在userlist_enable被激活后能被验证。如果你设置为NO,那么只有在userlist_file里明确列出的用户才能登录。 
如果是被拒绝登录,那么在被询问密码前,用户就将被系统拒绝。 
默认值:YES 

userlist_enable 
如果启用,vsftpd将在userlist_file里读取用户列表。如果用户试图以文件里的用户名登录,那么在被询问用户密码前,他们就将被系统拒绝。 
这将防止明文密码被传送。参见userlist_deny。 
默认值:NO 

virtual_use_local_privs 
如果启用,虚拟用户将拥有和本地用户一样的权限。默认情况下,虚拟用户就拥有和匿名用户一样的权限,而后者往往有更多的限制(特别是写权限)。 
默认值:NO 

write_enable 
这决定是否容许一些FTP命令去更改文件系统。这些命令是STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE。 
默认值:NO 

xferlog_enable 
如果启用,一个log文件将详细纪录上传和下载的信息。默认情况下,这个文件是/var/log/vsftpd.log,但你也可以通过更改vsftpd_log_file来指定其默认位置。 
默认值:NO (但在范例配置文件中,启用了这一项) 

xferlog_std_format 
如果启用,log文件将以标准的xferlog格式写入(wu-ftpd使用的格式),以便于你用现有的统计分析工具进行分析。但默认的格式具有更好的可读性。默认情况下,log文件是在/var/log/xferlog。 
但是,你可以通过修改xferlog_file来指定新路径。 
默认值:NO 

====== 
数字选项 
以下是数字配置项。这些项必须设置为非负的整数。为了方便umask设置,容许输入八进制数,那样的话,数字必须以0开始。 

accept_timeout 
超时,以秒为单位,设定远程用户以被动方式建立连接时最大尝试建立连接的时间。 
默认值:60 

anon_max_rate 
对于匿名用户,设定容许的最大传送速率,单位:字节/秒。 
默认值:0 (无限制) 

anon_umask 
为匿名用户创建的文件设定权限。注意:如果你想输入8进制的值,那么其中的0不同于10进制的0。 
默认值:077 

connect_timeout 
超时。单位:秒。是设定远程用户必须回应PORT类型数据连接的最大时间。 
默认值:60 

data_connection_timeout 
超时,单位:秒。设定数据传输延迟的最大时间。时间一到,远程用户将被断开连接。 
默认值:300 

file_open_mode 
对于上传的文件设定权限。如果你想被上传的文件可被执行,umask要改成0777。 
默认值:0666 

ftp_data_port 
设定PORT模式下的连接端口(只要connect_from_port_20被激活)。 
默认值:20 

idle_session_timeout 
超时。单位:秒。设置远程客户端在两次输入FTP命令间的最大时间。时间一到,远程客户将被断开连接。 
默认值:300 

listen_port 
如果vsftpd处于独立运行模式,这个端口设置将监听的FTP连接请求。 
默认值:21 

local_max_rate 
为本地认证用户设定最大传输速度,单位:字节/秒。 
默认值:0(无限制) 

local_umask 
设置本地用户创建的文件的权限。注意:如果你想输入8进制的值,那么其中的0不同于10进制的0。 
默认值:077 

max_clients 
如果vsftpd运行在独立运行模式,这里设置了容许连接的最大客户端数。再后来的用户端将得到一个错误信息。 
默认值:0(无限制) 

max_per_ip 
如果vsftpd运行在独立运行模式,这里设置了容许一个IP地址的最大接入客户端。如果超过了最大限制,将得到一个错误信息。 
默认值:0(无限制) 

pasv_max_port 
指定为被动模式数据连接分配的最大端口。可用来指定一个较小的范围以配合防火墙。 
默认值:0(使用任何端口) 

pasv_min_port 
指定为被动模式数据连接分配的最小端口。可用来指定一个较小的范围以配合防火墙。 
默认值:0(使用任何端口) 

trans_chunk_size 
你一般不需要改这个设置。但也可以尝试改为如8192去减小带宽限制的影响。 
默认值:0(让vsftpd自行选择) 

=========== 
STRING 配置项 
以下是STRING 配置项 

anon_root 
设置一个目录,在匿名用户登录后,vsftpd会尝试进到这个目录下。如果失败则略过。 
默认值:无 

banned_email_file 
deny_email_enable启动后,匿名用户如果使用这个文件里指定的E-MAIL密码登录将被拒绝。 
默认值:/etc/vsftpd.banned_emails 

banner_file 
设置一个文本,在用户登录后显示文本内容。如果你设置了ftpd_banner,ftpd_banner将无效。 
默认值:无 

chown_username 
改变匿名用户上传的文件的所有者。需设定chown_uploads。 
默认值:ROOT 

chroot_list_file 
这个项提供了一个本地用户列表,表内的用户登录后将被放在虚根下,并锁定在home目录。这需要chroot_list_enable项被启用。 
如果chroot_local_user项被启用,这个列表就变成一个不将列表里的用户锁定在虚根下的用户列表了。 
默认值:/etc/vsftpd.chroot_list 

cmds_allowed 
以逗号分隔的方式指定可用的FTP命令(post login. USER, PASS and QUIT 是始终可用的命令)。 
其他命令将被屏蔽。这是一个强有力的locking down一个FTP服务器的手段。例如:cmds_allowed=PASV,RETR,QUIT 
默认值:无 

deny_file 
这可以设置一个文件名或者目录名式样以阻止在任何情况下访问它们。并不是隐藏它们,而是拒绝任何试图对它们进行的操作(下载,改变目录层, 
和其他有影响的操作)。这个设置很简单,而且不会用于严格的访问控制-文件系统权限将优先生效。然而,这个设置对确定的虚拟用户设置很有用。 
特别是如果一个文件能多个用户名访问的话(可能是通过软连接或者硬连接),那就要拒绝所有的访问名。 
建议你为使用文件系统权限设置一些重要的安全策略以获取更高的安全性。如deny_file={*.mp3,*.mov,.private} 
默认值:无 

dsa_cert_file 
这个设置为SSL加密连接指定了DSA证书的位置。 
默认值:无(有一个RSA证书就够了) 

email_password_file 
在设置了secure_email_list_enable后,这个设置可以用来提供一个备用文件。 
默认值:/etc/vsftpd.email_passwords 

ftp_username 
这是用来控制匿名FTP的用户名。这个用户的home目录是匿名FTP区域的根。 
默认值:ftp 

ftpd_banner 
当一个连接首次接入时将现实一个欢迎界面。 
默认值:无(默认的界面会被显示) 

guest_username 
参见相关设置guest_enable。这个设置设定了游客进入后,其将会被映射的名字。 
默认:ftp 

hide_file 
设置了一个文件名或者目录名列表,这个列表内的资源会被隐藏,不管是否有隐藏属性。但如果用户知道了它的存在, 
将能够对它进行完全的访问。hide_file里的资源和符合hide_file指定的规则表达式的资源将被隐藏。vsftpd的 
规则表达式很简单,例如hide_file={*.mp3,.hidden,hide*,h?} 
默认值:无 

listen_address 
如果vsftpd运行在独立模式下,本地接口的默认监听地址将被这个设置代替。 
需要提供一个数字化的地址。 
默认值:无 

listen_address6 
如果vsftpd运行在独立模式下,要为IPV6指定一个监听地址(如果listen_ipv6被启用的话)。 
需要提供一个IPV6格式的地址。 
默认值:无 

local_root 
设置一个本地(非匿名)用户登录后,vsftpd试图让他进入到的一个目录。如果失败,则略过。 
默认值:无 

message_file 
当进入一个新目录的时候,会查找这个文件并显示文件里的内容给远程用户。dirmessage_enable需启用。 
默认值:.message 

nopriv_user 
这是vsftpd做为完全无特权的用户的名字。这是一个专门的用户,比nobody更甚。用户nobody往往用来在一些机器上做一些重要的事情。 
默认值:nobody 

pam_service_name 
设定vsftpd将要用到的PAM服务的名字。 
默认值:ftp 

pasv_address 
当使用PASV命令时,vsftpd会用这个地址进行反馈。需要提供一个数字化的IP地址。 
默认值:无(地址将取自进来(incoming)的连接的套接字) 

rsa_cert_file 
这个设置指定了SSL加密连接需要的RSA证书的位置。 
默认值:/usr/share/ssl/certs/vsftpd.pem 

secure_chroot_dir 
这个设置指定了一个空目录,这个目录不容许ftp user写入。在vsftpd不希望文件系统被访问时,目录为安全的虚根所使用。 
默认值: /usr/share/empty 

ssl_ciphers 
这个设置将选择vsftpd为加密的SSL连接所用的SSL密码。详细信息参见ciphers。 
默认值:DES-CBC3-SHA 

user_config_dir 
这个强大的设置容许覆盖一些在手册页中指定的配置项(基于单个用户的)。用法很简单,最好结合范例。如果你把user_config_dir 
改为/etc/vsftpd_user_conf,那么以chris登录,vsftpd将调用配置文件/etc/vsftpd_user_conf/chris。 
默认值:无 

user_sub_token 
这个设置将依据一个模板为每个虚拟用户创建home目录。例如,如果真实用户的home目录通过guest_username为/home/virtual/$USER 指定, 
并且user_sub_token设置为 $USER ,那么虚拟用户fred登录后将锁定在/home/virtual/fred下。 
默认值:无 

userlist_file 
当userlist_enable被激活,系统将去这里调用文件。 
默认值:/etc/vsftpd.user_list 

vsftpd_log_file 
只有xferlog_enable被设置,而xferlog_std_format没有被设置时,此项才生效。这是被生成的vsftpd格式的log文件的名字。 
dual_log_enable和这个设置不能同时启用。如果你启用了syslog_enable,那么这个文件不会生成,而只产生一个系统log. 
默认值:/var/log/vsftpd.log 

xferlog_file 
这个设置是设定生成wu-ftpd格式的log的文件名。只有启用了xferlog_enable和xferlog_std_format后才能生效。 
但不能和dual_log_enable同时启用。 
默认值:/var/log/xferlog

3、未完成的实验
his example should quickly show you the possibilites of per-IP configuration
with vsftpd's tcp_wrappers integration. This is new with v1.1.3.

To use this, you need vsftpd built with tcp_wrappers! This is accomplished
by editing "builddefs.h" and changing

#undef VSF_BUILD_TCPWRAPPERS
to
#define VSF_BUILD_TCPWRAPPERS

And then rebuild. If you are lucky your vendor will have shipped the vsftpd
binary with this already done for you.

Next, to enable tcp_wrappers integration, you need this in your vsftpd.conf:

tcp_wrappers=YES

And you'll need a tcp_wrappers config file. An example one is supplied in this
directory: hosts.allow. It lives at /etc/hosts.allow.

Let's have a look at the example:

vsftpd: 192.168.1.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd_tcp_wrap.conf
vsftpd: 192.168.1.4: DENY

The first line:
If a client connects from 192.168.1.3, then vsftpd will apply the vsftpd
config file /etc/vsftpd_tcp_wrap.conf to the session! These settings are
applied ON TOP of the default vsftpd.conf.
This is obviously very powerful. You might use this to apply different
access restrictions for some IPs (e.g. the ability to upload).
Or you could give certain classes of IPs the ability to skip connection
limits (max_clients=0).
Or you could increase / decrease the bandwidth limiter for certain classes
of IPs.
You get the point :-)

The second line:
Denies the ability of 192.168.1.4 to connect. Very useful to take care of
troublemakers. And now you don't need xinetd to do it - hurrah.


This example shows how you might set up virtual hosts. Virtual hosting is
where different clients access your machine on different IP addresses (virtual
IPs) and get redirected to different ftp sites.

For example, if your machine responds to two IPs - 127.0.0.1 and 127.0.0.2,
you could have the two different IPs represent two totally different FTP sites.

For this example, we are going to build on the "INTERNET_SITE" example.

Step 1) Set up a virtual IP address.

ifconfig eth0:1 192.168.1.10 up
(the standard IP address is 192.168.1.2)
(note - this isn't quite complete, the route for local connects hasn't been
added, but it will do for now)


Step 2) Create a user / location for the new virtual site.

useradd -d /var/ftp_site2 ftp_site2
chown root.root /var/ftp_site2
chmod a+rx /var/ftp_site2
umask 022
mkdir /var/ftp_site2/pub
echo "test" > /var/ftp_site2/pub/content


Step 3) Modify the existing site to respond to the primary IP.

Edit /etc/xinetd.d/vsftpd, and add the config line:
This example shows how you might set up virtual hosts. Virtual hosting is
where different clients access your machine on different IP addresses (virtual
IPs) and get redirected to different ftp sites.

For example, if your machine responds to two IPs - 127.0.0.1 and 127.0.0.2,
you could have the two different IPs represent two totally different FTP sites.

For this example, we are going to build on the "INTERNET_SITE" example.

Step 1) Set up a virtual IP address.

ifconfig eth0:1 192.168.1.10 up
(the standard IP address is 192.168.1.2)
(note - this isn't quite complete, the route for local connects hasn't been
added, but it will do for now)


Step 2) Create a user / location for the new virtual site.

useradd -d /var/ftp_site2 ftp_site2
chown root.root /var/ftp_site2
chmod a+rx /var/ftp_site2
umask 022
mkdir /var/ftp_site2/pub
echo "test" > /var/ftp_site2/pub/content


Step 3) Modify the existing site to respond to the primary IP.

Edit /etc/xinetd.d/vsftpd, and add the config line:

bind = 192.168.1.2


Step 4) Create the new site, responding on the virtual IP.

cp /etc/xinetd.d/vsftpd /etc/xinetd.d/vsftpd2

Edit vsftpd2, and change
- The bind line to refer to the IP address 192.168.1.10
- Add the line
server_args = /etc/vsftpd_site2.conf

This launches this FTP site with a different vsftpd configuration file.

cp /etc/vsftpd.conf /etc/vsftpd_site2.conf

Add two lines:
ftp_username=ftp_site2
ftpd_banner=This is the alternative FTP site.


Step 5) Restart xinetd and test!

/etc/rc.d/init.d/xinetd restart

[chris@localhost vsftpd]$ ftp 192.168.1.2
Connected to 192.168.1.2 (192.168.1.2).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (192.168.1.2:chris): [chris@localhost vsftpd]$
[chris@localhost vsftpd]$ ftp 192.168.1.2
Connected to 192.168.1.2 (192.168.1.2).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (192.168.1.2:chris):
530 This FTP server is anonymous only.
Login failed.
ftp> quit
221 Goodbye.

[chris@localhost vsftpd]$ ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 This is the alternative FTP site.
Name (192.168.1.10:chris):
530 This FTP server is anonymous only.
Login failed.
ftp>

阅读(1117) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~