/#
 # =====================================================================================
 #
 #       Filename:  vsftp-study.c
 #
 #    Description:  
 #
 #        Version:  1.0
 #        Created:  2010年10月20日 14时49分55秒
 #       Revision:  none
 #       Compiler:  gcc
 #
 #         Author:  chen_baocheng (Richard), baoch8@163.com
 #        Company:  RYOYO
 #
 # =====================================================================================
 #/

vsftp笔记:
在写份笔记时,我先看了鸟哥的私房菜、然后是reaking的文章,结合3到4次实验,便开始熟悉了vsftpd。
在这里我将分三个部分来总结。
1、关于匿名用户:
a、首先要确认的是是否需要让用户用入?
b、是否定义anonymous的目录。
#这里有一点很重要的是:任何用户的ftp里的/目录一定不能为777,一看似乎我们给了他所有的权限,其实这样一样,你自己都无法成功的登入FTP。我在这里错了好几次~!

2、关于目录的写入,这跟这个目录的权限有很大的关系!有什么的关系呢?
#我个人是这样认为的:
a、匿名用户 : 在其/目录下,我们可以建立子目录,然后开放这个子目录的777权限,那么这个子目录就可以写入就可以用来上传了。

b、系统用户:系统用户的家目录默认为700。当然这得看你的local_root怎么设置了;如果为空,则/自动为用户的家目录。如果你把其他的目录设置成系统用户的ftp的/,它的权则也一定不能为777,否则你也登不上!
#local_root 为空时,表时系统用户的/为自己的家目录。  
#local_root=/path 时,则所有系统用户的/为/path目录。
    系统用户命令FTP也是受限制的。哪些限制呢?Ftpusers文件、user_list文件。当然这里面写的大部分是系统用户,你也可加入其他用户。

c、虚拟用户:因为经常在windows中使用ser-u,导致我在使用vsftpd中,有了一些误解。
#比如,在ser-u中,它是有自己的数据库,而且在文件写入方便跟系统用户没有太大关系;但vsftpd中,有一点不同的是,关于用户写的的方面,需要与相应用户挂钩。这曾让我很受伤,仔细看了大神的文章后明白了。

vsftpd中,以一个系统用户为基础,在这个基础上,我们可以对目录的权限进行限定;以此来实现我们的虚拟用户的权限。
[root@OS ~]# rpm -qa | grep ^db4
db4-4.3.29-10.el5
db4-devel-4.3.29-10.el5
db4-devel-4.3.29-10.el5
db4-4.3.29-10.el5

#db_load -T -t hash -f oldfile  newdb

-T
选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。如果指定了选项-T,那么一定要追跟子选项-t

-t
子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有Btree、Hash、Queue和Recon数据库。这里,接下来我们需要指定的是Hash型。

-f
它的意思是后接文件文件!

一般生成db后,我们就需要将vsftpd的验证方式改改了:
在/etc/pam.d/vsftpd中,注释其他的所有内容,加上这两句,让db文件得已参与验证。
auth       required     /lib/security/pam_userdb.so db=/var/ftp/ftpguest
account    required     /lib/security/pam_userdb.so db=/var/ftp/ftpguest


以上内容为个人实验中所得;以下内容为各个参数的记录
_______________________________________________
与主机相关的设置值:
connect_from_port_20=YES(NO) 主动式连接所使用的商品,数据传输的接口
listen_port=21 这个是vsftpd默认值,FTP默认侦听的端口。这个值仅适合以stand alone的方式来启动。
listen=YES(NO) 它是用来区分是使用stand alone 方式启动还同以xinetd.d方式启动。
dirmessage_enable=YES(NO) 使用命令行或是客户端进入时,是否显示目录内的信息?
message_file=.message 这个是匹配上一个值的,当为YES时,它会寻找目录里的.message文件,以便显示
pasv_enable=YES(NO) 将启动方式设置成被动模式
use_localtime=YES  将FTP默认时间修改成本机时间。
write_enable=YES(NO)  允许系统的写入
connect_timeout=60  在数据连接主动连线模式下,发出的连接信号在60秒内得不到客户端的回应,将会不再等待,并且强制短线。它是以秒为单位的。
accept_time=60 当用户以被动式pasv进行数据传输时,如果主机启用passive_port并等待client超过60s而无回应,就不再等 待强制断线。这个跟connect_timeout一样,只是一个被动,一个主动。
data_connection_timeout=300
#如果服务器与客户端的数据连接已经建立成功,但是在300S内还是不能完成数据传输,将会被vsftpd给T下线的。
max_Clients=0   如果vsftpd 是以stand alone来启动的,它可以控制vsftpd服务器在同一时间可以连接上服务器
max_per_ip=0   在同一时间,同一个IP可以连接多少次?
pasv_max_port=0,pasv_min_port=0 在被动模式下,使用哪个范围里的随机端口进行连接。‘
FTPd_banner=文字说明  (通常很短)
banner_file=/path/file   它可以很长。

___________________________________
关于系统用户的一些设定:
guest_enable=YES(NO)  设置成YES时,任何非匿名用户登录的账户都会被设置成guest。默认情况下,guest用户对应的权限为ftp账户。
guest_user=FTP 我只在上面的一条生效时,才有效。
local_max_rate=0  系统用户的最大速度限制,通常在80%~120%之间浮动。  0表示的是bye数。1KB=1000bye
chroot_local_user=YES(NO) 将用户限制在自己的家目录下,下面两项也可以限制。
chroot_list_enable=YES(NO)  默认值为NO,问是否将用户限制在其/下?
chroot_list_file=/etc/vsftpd/chroot_list  这个文件需要你自己建。每一行一个账户,在这个文件里的账户将不能从其/下跳出。
userlist_enable=YES(NO) 是否借助vsftpd的阻止机制来处理某些不受欢迎的账户
userlist_deny=YES(NO) 当上一条生效时,它才会生效。如果它为YES,则在userlist的用户将不能登陆FTP服务器
userlist_file=/etc/vsftpd/userlist  这个文件你也要自己建立。
另外:
user_list、ftpusers里面的用户无法登陆FTP

_____________________________________________________________________
关于匿名用户的设置:
anonymous_enable=YES(NO) 是否允许 anonymous用户登陆
anon_world_readable_only=YES(NO) 仅允许anonymous具有下载可读文件的权限。默认为YES
anon_other_write_enable=YES(NO)是否允许匿名用户写入?默认为NO
anon_mkdir_write_enable=YES(NO) 是否让匿名用户具有建立文件夹的权力?默认为NO
anon_upload_enable=YES(NO) 是否让匿名用户具有上传的权限?
anon_Email_enable=YES(NO) 是否需要将某些用户的邮址阻拦?
banner_Email_enable=/etc/vsftpd/banner_Email 当上一条为YES时,检查这个文件里的邮址!所有里面的会被阻止掉。这个文件需要自己建立。
no_anon_password=YES(NO) 匿名用户是否可以不提供密码
anon_max_rate=0  匿名用户最大的传输速度
anon_umask=077  这个你可以根据需要设定。
#有时候匿名上传的资料自己不能下载,为什么?因为这个umask的关系,自己上传的东西,都没有权限查看,怎么可能下载呢?

___________________________________
关于系统安全方面:
唯一一点要说的是pam_service_name=vsFTPd   这个文件,作为vsftpd的验证。这点我还没有完全懂。
___________________________________
关于虚拟的用户需要注意的是:
1、guest_enable=YES
2、local_root=/路径
3、guest_username=系统账户
4、权限写入的部分
5、anon_world_readable_only=no  不能让匿名的用户看到。

因内容在centos中写成的,所以附件为文本文件。因.tar文件不能上传,只能改成.tar.rar才得已上传。留住笔记。日后会更次更新。