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} _ [i]{1}/p' xferlog过滤结果后再针对ip过滤等,熟练使用sed,awk可以对数据进行很多有用的处理和分析。


 


当同时对一个目录或文件有多种服务控制时,就要考虑服务之间的权限复核,即是一种服务的权限对于同一账号不能有不同访问权限。首先目录或文件的自身权限是权限控制的基础,其次不同服务自身还可以加载访问权限(一般相对原始权限提高)。