vsftpd是目前Linux最好的FTP服务器工具之一,其中的vs就是“Very Secure”(很安全)的缩写,可见它的最大优点就是安全,除此之外,它还具有体积小,可定制强,效率高的优点。
如果选择完全安装Red Hat Linux 9.0,则系统会默认安装vsftpd服务器。我们可以在终端命令窗口输入以下
命令进行验证:
[root@ahpeng root] rpm -qa | grep vsftpd
  如果结果显示为“vsftpd-1.1.3-8”,则说明系统已经安装vsftpd服务器。如果安装Red Hat Linux 9.0时没有选择vsftpd服务器,则可以在图形环境下单击“主菜单→系统设置→添加删除应用程序”菜单项,在出现的“软件包管理”对话框里确保选中“FTP服务器”选项,然后单击“更新”按钮,按照屏幕提示插入第3张安装光盘即可开始安装。
  另外,你也可以直接插入第3张安装光盘,定位到/RedHat/RPMS下的vsftpd-1.1.3-8.i386.rpm安装包,然后在终端命令窗口运行以下命令即可开始安装进程:
[root@ahpeng RPMS] rpm -ivh vsftpd-1.1.3-8.i386.rpm
———————————————————————————————————————————–
2.启动/重新启动/停止vsftpd服务
从Red Hat Linux 9.0开始,vsftpd默认只采用standalone方式启动vsftpd服务,方法是在终端命令窗口运行以下命令:
[root@ahpeng root] /etc/rc.d/init.d/vsftpd start
重新启动vsftpd服务:
[root@ahpeng root] /etc/rc.d/init.d/ vsftpd restart
关闭vsftpd服务:
[root@ahpeng root] /etc/rc.d/init.d/ vsftpd stop
 
———————————————————————————————————————————–
vsftpd的配置
在Red Hat Linux 9.0里的vsftpd共有3个配置文件,它们分别是:
vsftpd.ftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
vsftpd.user_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问
FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
  vsftpd.conf:位于/etc/vsftpd目录下。它是一个文本文件,我们可以用Kate、Vi等文本编辑工具对它进行修改,以此来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
 
———————————————————————————————————————————–
vsftpd.conf配置介绍:
1. 匿名服务器的连接(独立的服务器)
在/etc/vsftpd/vsftpd.conf配置文件中添加如下几项:
Anonymous_enable=yes (允许匿名登陆)
Dirmessage_enable=yes (切换目录时,显示目录下.message的内容)
Local_umask=022 (FTP上本地的文件权限,默认是077)
Connect_form_port_20=yes (启用FTP数据端口的数据连接)*
Xferlog_enable=yes (激活上传和下传的日志)
Xferlog_std_format=yes (使用标准的日志格式)
Ftpd_banner=XXXXX (欢迎信息)
Pam_service_name=vsftpd (验证方式)*
Listen=yes (独立的VSFTPD服务器)*
功能:只能连接FTP服务器,不能上传和下传
注:其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于FTP的基本选项
2. 开启匿名FTP服务器上传权限
在配置文件中添加以下的信息即可:
Anon_upload_enable=yes (开放上传权限)
Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件)
Write_enable=yes (开放本地用户写的权限)
Anon_other_write_enable=yes (匿名帐号可以有删除的权限)
3. 开启匿名服务器下传的权限
在配置文件中添加如下信息即可:
Anon_world_readable_only=no
注:要注意文件夹的属性,匿名帐户是其它(other)用户要开启它的读写执行的权限
(R)读—–下传 (W)写—-上传 (X)执行—-如果不开FTP的目录都进不去
4.普通用户FTP服务器的连接(独立服务器)
在配置文件中添加如下信息即可:
Local_enble=yes (本地帐户能够登陆)
Write_enable=no (本地帐户登陆后无权删除和修改文件)
功能:可以用本地帐户登陆vsftpd服务器,有下载上传的权限
注:在禁止匿名登陆的信息后匿名服务器照样可以登陆但不可以上传下传
5. 用户登陆限制进其它的目录,只能进它的主目录
设置所有的本地用户都执行chroot
Chroot_local_user=yes (本地所有帐户都只能在自家目录)
设置指定用户执行chroot
Chroot_list_enable=yes (文件中的名单可以调用)
Chroot_list_file=/任意指定的路径/vsftpd.chroot_list
注意:vsftpd.chroot_list 是没有创建的需要自己添加,要想控制帐号就直接在文件中加帐号即可
6. 限制本地用户访问FTP
Userlist_enable=yes (用userlistlai 来限制用户访问)
Userlist_deny=no (名单中的人不允许访问)
Userlist_file=/指定文件存放的路径/ (文件放置的路径)
注:开启userlist_enable=yes匿名帐号不能登陆
7. 安全选项
Idle_session_timeout=600(秒) (用户会话空闲后10分钟)
Data_connection_timeout=120(秒) (将数据连接空闲2分钟断)
Accept_timeout=60(秒) (将客户端空闲1分钟后断)
Connect_timeout=60(秒) (中断1分钟后又重新连接)
Local_max_rate=50000(bite) (本地用户传输率50K)
Anon_max_rate=30000(bite) (匿名用户传输率30K)
Pasv_min_port=50000 (将客户端的数据连接端口改在
Pasv_max_port=60000 50000—60000之间)
Max_clients=200 (FTP的最大连接数)
Max_per_ip=4 (每IP的最大连接数)
Listen_port=5555 (从5555端口进行数据连接)
8. 查看谁登陆了FTP,并杀死它的进程
ps –xf |grep ftp
kill 进程号
 
—————————————————————————————————————-
 
现在我们就来实现三个用户的不同权限:
a.upload用户,可以上传下载,可以新建文件夹,但不能删除文件和文件夹,不能重命名原有文件和文件夹;
b.download用户,只能下载;
c.admin用户,管理员,可以上传,可以下载,可以新建文件夹,可以删除和更改文件和文件夹名。
这些用户都不能登录系统,并且用ftp连接时锁定在自己的家目录中不能进入系统文件夹。 
cat <logins.txt 
>upload 
>******* #upload用户的密码 
>download 
>******* 
>admin 
>**************** 
>! 
说明,此文本文件的格式是:单数行为用户名,偶数行为密码 
#db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
#####################################################################################
出现没有db_load的提示是因为有些db4的包没有安装,需要安装下列包:
db4-tcl-*.rpm
db4-utils-*.rpm
或者直接: yum -y install db4 db4-tcl db4-utils
db_load命令主要是用来生成db数据库使用的
#####################################################################################
#chmod 600 /etc/vsftpd_login.db 
#useradd -d /home/ftpsite virtual;
#chmod 700 /home/ftpsite;
#su – virtual -c “echo hello>/homt/ftpsite/test.file
(建立虚拟用户所要访问的ftp目录并设置仅virtual用户访问的权限和创建一个供下载实验的文件) 
#vi /etc/vsftpd.conf在此文件中插入下面的配置语句 
guest_enable=YES(启用虚拟用户) 
guest_username=virtual(将虚拟用户映射为本地virtual用户) 
pam_service_name=vsftpd(指定PAM配置文件为在/etc/pam.d/下的vsftpd) 
user_config_dir=/etc/vsftpd_user_conf(指定不同虚拟用户配置文件的存放路径) 
保存退出 
#mkdir /etc/vsftpd_user_conf 
开放不同用户的不同权限 
echo “anon_world_readable_only=NO”>/etc/vsftpd_user_conf/download(开放download用户的下载权限——只能下载;注意这个不地方不要写成YES,否则将不能列出文件和目录) 
#cp /etc/vsftpd_user_conf/download /etc/vsftpd_user_conf/upload 
vi /etc/vsftpd_user_conf/upload,添加下列行 
write_enable=YES (增加写权限) 
anon_upload_enable=YES(增加上传权限) 
anon_mkdir_write_enable=YES (增加创建目录的权限) 
#cp /etc/vsftpd_user_conf/upload /etc/vsftpd_user_conf/admin 
增加一行: 
anon_other_write_enable=YES(增加管理员用户的删除/重命名的权限) 
测试 
killall -9 vsftpd;/usr/local/sbin/vsftpd /etc/vsftpd.conf & 
以用户名download和你设置的密码登录,ls,可以看到文件,下载,成功!put一个文件,提示 
Permission denied。rename test.file同样权限被拒绝;delete test.file同样不成功! 
输入quit退出,以upload用户登录,OK!可以上传,下载,mkdir lsf,提示“/lsf” created;rename lsf lsf1提示Permission denied,删除文件同样不成功! 
输入quit退出,以admin用户登录,可以有上述所有权限,然后rmdir lsf,提示Remove directory oeration successful;delete test.file提示Delete operation successful!OK,大功告成了!
 
————————————————————————————————————–
其实这个错误都遇到过好几次了,就是因为默认centos selinux限制了,不过今天居然一时没想起来
现在再做个记录吧:
他的系统是CentOS,是RH派系的。我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:
500 OOPS: cannot change directory:/home/ftp
原因是他的CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。
//查看SELinux设置
# getsebool -a|grep ftp
ftpd_disable_trans –> off
或者
ftp_home_dir–>off
//使用setsebool命令开启
# setsebool ftpd_disable_trans 1
或者
# setsebool ftp_home_dir 1
//查看当前状态是否是on的状态
# getsebool -a|grep ftp
ftpd_disable_trans –> on
或者
ftp_home_dir–>on
//setsebool使用-P参数,无需每次开机都输入这个命令
# setsebool -P ftpd_disable_trans 1
或者
# setsebool -P ftp_home_dir 1
# service vsftpd restart
有关selinux的配置
如关闭,仅仅警告,强制等等 需要编辑/etc/sysconfig/selinux 默认是强制
或者直接SELINUX=disabled 禁止掉
不过要服务器重启才生效
 
 
————————————————————————————————————–
 
vsftp 配置以及日志格式
 
FTP服务中常见有vsftp,proftp,wu-ftp…而在类redhat的linux发行版本中vsftp一般都是默认安装的,下面我们就来介绍下vsftp的配置以及它的日志格式。
 
1问题描述
昨天刚向实验室的同学公开一个movie帐户,其实是想大家都能telnet,或ssh上,有空玩玩。没想到有人就用这个帐号在ftp上删除了文件。
首先vsftp默认只有上下传记录,根本没有本地用户的删除或建目录的操做。这个在lastlog里也不会有痕迹。所以对公开账号千万不能同时是本地账号。如果是本地账号,那也要控制该账号确定文件的删除修改权限。不要让该用户对其他文件有破坏性权限。这种控制会积累很多管理漏洞,所以最好就是给虚拟用户,或者ftp只能使用匿名账号(当然,这个管理员可以灵活控制自己的使用权限)。
因此在开放用户账号时要考虑日志的决定存在,不能出现这种漏空监控。
出现这种问题的关键就是日志与服务没有绝对一致。比如ftp本来只是用来上传或下载,这里却还给了管理文件的权限,而vsftp对管理文件的却没有监控,太失败了。
2 相关知识
查阅vsftp的参数手册才知道是自己太无知。
vsftpd与log有关的选项: 
vsftpd_log_file 
xferlog_enable 
xferlog_std_format 
xferlog_file 
dual_log_enable 
syslog_enable 
log_ftp_protocol 
no_log_lock 
这里主要要到下面几个参数控制
log_ftp_protocol
如果启用, 假若选项 xferlog_std_format 没有启用, 所有的 FTP 请求和应答都会被记录. 此选项将对调试很有用.
默认: YES 
dual_log_enable
如果启用, 将生成两个相似的日志文件, 默认在 /var/log/xferlog 和 /var/log/vsftpd.log 目录下. 前者是 wu-ftpd 类型的传输日志, 可以用于 标准工具分析. 后者是 vsftpd 自己类型的日志.
xferlog_enable
如果启用, 将会维护一个日志文件, 用于详细记录上载和下载. 默认情况下, 这个日志文件是 /var/log/vsftpd.log. 但是也可以通过配置文件中的 vsftpd_log_file 选项来指定.
默认: NO(但是在示例设置中启用了这个选项) 
xferlog_std_format
如果启用, 传输日志文件将以标准 xferlog 的格式书写, 如同 wu-ftpd 一样. 这可以用于重新使用传输统计生成器. 然而, 默认格式更注重可读性. 此格式的日志文件默认为 /var/log/xferlog, 但是您也可以通过 xferlog_file 选项来设定.
默认: NO
 
3 解决方法
这里只给出日志这块的参数设置
##################log settings###################
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog
#
#log in two files /var/log/xferlog and /var/log/vsftpd.log
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
#log time setting
use_localtime=YES
#
###################end of log####################
4 结果
Xferlog内容如下
———————————————————————————————————————
Wed Apr 18 06:41:29 2007 1 202.116.130.248 0 /pub/upload/kernel.rpm b _ i a root ftp 0 * i
Wed Apr 18 06:43:27 2007 1 202.116.130.248 0 /pub/sun b _ o a root ftp 0 * c
Tue May 1 15:03:37 2007 1 202.116.130.242 45662 /mnt/d/movie/linux partition.JPG b _ i r movie ftp 0 * c
Vsftpd.log内容如下
———————————————————————————————————————-
Tue May 1 15:03:21 2007 [pid 23969] CONNECT: Client “202.116.130.242”
Tue May 1 15:03:21 2007 [pid 23968] [movie] OK LOGIN: Client “202.116.130.242”
Tue May 1 15:03:37 2007 [pid 23970] [movie] OK UPLOAD: Client “202.116.130.242”, “/mnt/d/movie/linux partition.JPG”, 45662 bytes, 824.60Kbyte/sec
Tue May 1 15:05:12 2007 [pid 23970] [movie] OK DELETE: Client “202.116.130.242”, “/mnt/d/movie/linux partition.JPG”
这样xferlog则专门记录上下传信息,对ftp而言,这些信息是有绝对统计意义的。而系统管理员,有时为了满足不同用户的需求,可能会开发一些特殊的账号,怎么以ftp登录从系统的角度来管理监控,vsftpd.log就可以详细供证了。
不过,我还是建议服务的专一性,这样才能减轻管理负担。
对于日志的分析—-eagerlinuxer 《用AWStats对VSFTP日志进行统计》。先看这个图,估计你就有动力去做了。http://awstats.sourceforge.net/awstats.ftp.html
如果没有特别要求,可以用sed和awk结合使用,比如
sed -n ‘/[a]{1} _ {1}/p’ xferlog过滤结果后再针对ip过滤等,熟练使用sed,awk可以对数据进行很多有用的处理和分析。
参考
1etony vsftpd.conf 联机手册 http://fanqiang.chinaunix.net/app/ftp/2005-06-24/3337.shtml
2wolfg   vsftpd日志(xferlog格式)的含义http://www.chinaunix.net/jh/15/698727.html
3man vsftpd.conf—-推荐
4eagerlinuxer 《用AWStats对VSFTP日志进行统计》http://www.chinaunix.net/jh/15/388056.html
 
当同时对一个目录或文件有多种服务控制时,就要考虑服务之间的权限复核,即是一种服务的权限对于同一账号不能有不同访问权限。首先目录或文件的自身权限是权限控制的基础,其次不同服务自身还可以加载访问权限(一般相对原始权限提高)。
 
******************************************************************
vsftpd.conf  http://vsftpd.beasts.org/vsftpd_conf.html
vsftpd日志格式XFERLOG(5)  http://bsdftpd-ssl.sc.ru/doc/unix/xferlog.5.txt