glftpd 使用指南

关于glftpd的一些东东

谁要使用glftpd

我应该是2年前开始用glftpd的,这个东西至今我还没见多少人用,能看到的中文资料 也就是一些娱记写的弱智IT文章。现在要毕业了,走出学校估计没什么机会再弄,先做 个小小的总结在这里。

当初我找到过一篇一个ror组织的成员写的glftpd文章,给了我很大帮助,然后自己很 仔细的把自带的几千行文档看了一遍,才真正了解到glftpd的魅力。它并不适合所有的 ftp站,要是简单的匿名上传下载,用系统自带的ftpd即可,要是准备做一个linux或者 freebsd下的多用户高负荷的ftp站,自己不想参与管理却又不找不到熟悉unix的管理 员,同时又需要一些特殊的功能比如sfv校验,wareZ或MovieZ的整理,提取mp3的tag, 等等,那么glftpd就是一个好的选择。

基本安装

很不幸的,现在无法获得glftpd的全部代码,服务器的核心部分以二进制形式发布。这 其中有一个很大的渊源,现在的openftpd,雷电ftpd,glftpd,ioftpd都是从同一个 叫做FTP4ALL的开源程序开发而来,可能还有其他的,这其中可能有一些事情让glftpd 的开发者很不痛快,所以决定暂时的不开放源代码。但你可以获得许多平台的二进制包, 比如linux,freebsd,spac,等等。没有源码会带来一些问题,比如在早期的版本里面 你无法上传超过2G的文件,而其他的ftpd,编译的时候加参数便可支持。但总的来说, 没源码倒让安装简单了不少~

安装很简单,下载,解开,一个install.sh搞定,除了中间创建一个key,其他都很快。

我的经验

本文最后我会附一份我加中文注解的配置档,关于配置也没有什么好多说的,RTFM之后 基本没有问题。

只说一些经验之谈:

  • 用组来管理用户。glftpd内建了1到8的flag来标志用户的权限,这不方便和友好, 可以建立诸如管理组,特殊用户组,一般用户组,然后在配置档里限定各种权限。
  • 用!/path/to/ip.txt来绑定IP。我个人是认可一人一帐号的方式,不绑IP,这样谁干 了什么看的清楚,而且也没有使用者搬家换IP又要改一次的麻烦,基本上,也没有碰到 帐号被盗或者公用的情况。如果要用单一帐号而限定IP,glftpd里面用命令行可以限定 10个IP地址,可以用通配符,但对大站可能还是不够。
    修改这个用户的使用档,IP限定里写!/path/to/ip.txt这样,然后在ip.txt里写,一 行一个IP。
  • 善用precheck和postcheck以及其他的脚本。这恐怕是glftpd最大的魅力了,网络上 有相当多的脚本供你使用,你只需要在配置档里指定即可。precheck是上载之前执行 的,比如可以检查文件扩展名什么的,postcheck则是上载之后,比如可以检查文件 大小。当然这些只是小儿科,只需了解$0,$1,$2这几个参数,你可以用你自己喜欢的 语言来写你的脚本。可以参考自带的一个zipscript。可惜,曾经写过的一些脚本都 丢失了,包括一个朋友用php写的可以向一个电影数据库提交信息的程序。
  • 善用site命令。这是glftpd的另一大特色了,默认的ftp命令可能不够强,效率也不 高,比如删除大量零碎文件,查找一个文件,在线解压rar卷,等等。同时,要注意 这方面的安全问题。

有关glftpd的性能,我曾经在raid卡加ide硬盘,100M网络环境下,每秒8M的输出, 这包括对校内4-6M/s,对教育网2M/s的输出,30-50用户在线,稳定的开放了一年。 这个负荷其实对于专用的服务器来讲并不算高,我想各种ftpd在性能上应该相差不大, 要是要建几千人在线的站,那就不清楚了。

言尽于此,各位linux老手可能都嫌罗嗦了。不过话说回来,要把glftpd玩个过瘾, 是需要一些unix-clone系统的使用经验的。最近2.0正式版就要出来,恐怕我是没 机会玩了。

附killersftp的配置档(03年8月份的):


##########################################################################
#修改本配置档即时生效,无需重启或者reload服务;kw专用,其他root勿修改
#glftpd.conf
timezone +8
#######		关站但是允许管理组登入		#########
#shutdown 1 =glftpd


#######		关站,不允许任何人登入		#########
#shutdown !*

#######		正常运做,允许任何人登入	#########
shutdown 0

#######		针对某些IP的设定		#########
ifip 10.*71.*
  upload	*	!-anonymous !-ftp *
  makedir   *	!-anonymous !-ftp *
elseip 
  ifip 10.* 210.32.*
  download	*	!-zju *
  elseip
  pasv_addr killers.8866.org 1 	#浙大用动态IP上,需手工制定pasv地址
  endifip
endifip

#######	只允许小于一个byte的文件用ascii模式传输,就是关闭ascii了啦###
#ascii_downloads 1 *.*

#######		站点完整名称,[:space:]是一个空格	#############
sitename_long 	KillerS[:space:]MovieZ[:space:]Server

#######		站点名缩写		#############################
sitename_short	KillerS

#	绑定的IP,全部注释掉则允许任何IP,否则只能选一个!
#valid_ip	10.xx.61.209
#valid_ip	10.xx.61.211
#valid_ip	127.0.0.1

# pasv模式的端口范围
#pasv_ports	30000-33000

# 设置fxp权限
#	      downloads uploads logging permissions
allow_fxp	yes	yes	yes	=glftpd =spl
# 这里允许glftpd组和spl组fxp,并做日志


#替代默认的登入提示。默认的是sitename_long(glftpd version)ready。
login_prompt KillerS[:space:]MovieZ[:space:]Ftp[:space:]Server[:space:]ready. 

######		最高用户,它可以修改其他任何管理员帐号,只能有一个###
master		glftpd

email		[email protected]

#######	glftpd共享内存的ipc_key,跑多个glftpd时才需要设定
#ipc_key		0x01234567

#####	FTP服务器的根 /		#############################
rootpath 	/jail/glftpd

# 一些文件和目录,相对于rootpath的位置
datapath 	/ftp-data 
pwd_path	/etc/passwd
grp_path	/etc/group
#botscript_path	/sitebot
welcome_msg	/site/incoming/Skating/本站说明.txt	-anonymous -ftp -skateop
welcome_msg 	/ftp-data/misc/welcome.msg	*
goodbye_msg	/ftp-data/misc/goodbye.msg	*
newsfile	/ftp-data/misc/newsfile		*
banner		/ftp-data/misc/banner

#
#bouncer_ip	10.111.154.66

#速度限制     [flags/=groups/-usernames]
speed_limit /*	   20000000       0		*
#这里限制所有用户在所有路径下的下载总速20M/s,上载速度无限

#同时传输	 max_downloads		max_uploads
sim_xfers		80		-1
#这里限制总共最多80个下载进程,无限个上载进程

#保留用户,禁止添加(site useradd)
banned_users	root	kingway

# 关闭颜色模式	只有flag=5的用户才能看到颜色	##############
color_mode 0

# 小于8M的文件放到内存中:默认是4M:先测试下看
mmap_amount	1
freefile        *.[Nn][Ff][Oo] *.[Tt][Xx][Tt] *.[Zz][Ii][Pp] *.[Mm][Hh][Tt] *.[Ss][Ff][Vv] *

##############################################################################
# SECTION #     KEYWORD                 DIRECTORY	SEPARATE CREDITS     #
##############################################################################
stat_section    DEFAULT                 *		yes

##############################################################################
##################     THE RIGHTS SECTION BEGINS HERE     ####################
##############################################################################
# (you can use a ! in front of any group/user/flag to negate it)             #
# The default is no, you don't need to add "!*" at the end                   #
#                                                                            #
# Function       Path                   =GROUP or -username or X (flag)      #
##############################################################################
upload		/site/incoming/Skating/incoming/*	-anonymous -ftp =glftpd 
upload		/site/incoming/*		=upload =glftpd =spl
upload		/site/DivxWareZ/*		=glftpd -sheal
upload          *                       	=glftpd
resume		*				*
overwrite	*				=glftpd
makedir		/site/incoming/Skating/incoming/*	-anonymous -ftp =glftpd
makedir		*				=glftpd =upload -sheal =spl
download	*				!=upload *
dirlog		*				*
rename		*				=glftpd
filemove	*				=glftpd
renameown	*				=glftpd =upload -sheal =spl
nuke	        *				=glftpd
delete		*				=glftpd 
deleteown	*				=glftpd =upload -sheal =spl

##############################################################################
###################     THE RIGHTS SECTION ENDS HERE     #####################
##############################################################################

# 禁止文件下载记数,这个记数没有用
file_dl_count	0

# 隐藏文件
hidden_files	*.hidden


###########	这个好象没有用	#######################################
#use_dir_size b /

#show_totals	*
#show_diz	.message

###########	反空闲命令	##############################################
idle_commands noop pwd cwd* list* pasv syst rest*

###########	空间小于20M时禁止上传	######################################
free_space 100

# 最多100用户在线,没有豁免用户  !!!!有人在线的时候不要修改本项!!!!!
max_users 100 0

# 最多可添加的用户,限制vip发放
total_users 90

# dupecheck	how many days?	ignore file case like Windows?
dupe_check 	0		no

# 禁止下载未上载完整的文件
dl_incomplete 1

# 禁止下载的文件
noretrieve	passwd	passwd-	group	group-

# 最小的家目录:p   不过还是可以直接改passwd跳出这个限制
min_homedir	/site

#############################################################################
#           	character conversions...
#file_names	0		lower		[:space:]_
#dir_names	1		none		[:space:]_
#############################################################################

#tagline		No[:space:]Tagline[:space:]Set

ignore_type  *.[tT][xX][tT] *.[nN][fF][oO] [rR][eE][aA][dD][mM][eE] .message
ignore_type  *.[sS][fF][vV] *.[cC][rR][cC] *.[dD][iI][zZ]

#############################################################################
#预先检查目录的脚本
#pre_dir_check  /bin/dirscript
#
#上载文件前检查文件的脚本
#禁止对DivxWareZ目录做检查

pre_check	none /site/DivxWareZ/* *
pre_check	none /site/incoming/Skating/*
pre_check	/bin/myscript *
#
#上载文件后执行的脚本
post_check	none /site/incoming/Skating/* 
post_check	/bin/jzipscript
#
#执行crc check的文件
calc_crc *.[rR][aA][rR] *.[rR0-9][0-9][0-9]  
#
#检查重复的文件
#xdupe	*.avi
#############################################################################

############## Location #################### Max number of lines in Display #
oneliners 	/ftp-data/misc/oneliners	7
requests 	/ftp-data/misc/requests		10
lastonline	/ftp-data/misc/lastonline	10
#############################################################################

############################################################################
# Nukedir_Style:				
# 1st. Option   [Format: %N = DIR]
# 2nd. Option   0 = Delete ALL, 1 = Save main dir.,  2 = Save ALL (UNNUKE) 
# 3rd. Option   [Byte Size] for nuker to discount.
############################################################################
nukedir_style 	NUKED-%N	2	50000

empty_nuke	25000
multiplier_max	20

############################################################################
# Private Groups:   privgroup GROUPNAME	GROUPDESC                          #
############################################################################
privgroup 	STAFF		 My[:space:]Private[:space:]Group

############################################################################
# PRIVPATHS:  Directories should be uniquely named (no wildcards)          #
############################################################################
#privpath /site/privatedir	1 =STAFF

############################################################################
# CUSTOM SITE COMMANDS                                                     #
# site_cmd [CMD NAME] [EXEC/TEXT] [PATH TO FILE]		  	   #
############################################################################		
#site_cmd RULES 		TEXT	/ftp-data/misc/site.rules
#site_cmd LOCATE		EXEC	/bin/locate.sh
site_cmd MOVE		EXEC	/bin/mv
site_cmd MAINTAIN	EXEC	/bin/maintain
site_cmd FILECOUNT	EXEC	/ftp-data/logs/filecount.sh
site_cmd UNRAR		EXEC	/bin/unrar
#site_cmd IPCOUNT	TEXT	/ftp-data/logs/ftpipcount

#custom-rules		=glftpd
#custom-locate		=glftpd
custom-move		=glftpd
custom-maintain 	=glftpd
custom-filecount	=glftpd
custom-unrar		=glftpd =spl =upload
#custom-ipcount		=glftpd




-addip		 =glftpd
-adduser         =glftpd
-change          =glftpd
-changeflags     =glftpd
-changeratio     =glftpd
-changesratio    =glftpd
-changehomedir   =glftpd
-chmod           =glftpd
-chgrp           =glftpd
-chgrp-priv      =glftpd
-chpass          =glftpd
-delip           =glftpd
-deluser         =glftpd
-dirs		 *
-errlog		 =glftpd
-flags           =glftpd
-gadduser        =glftpd
-ginfo           =glftpd
-give            =glftpd
-group           =glftpd
-groups          =glftpd
-grpadd          =glftpd
-grpdel          =glftpd
-grplog          =glftpd
-grpnfo          =glftpd
-grpren          =glftpd
-grpstats	 =glftpd
-help		 =glftpd
-info		 =glftpd
-kick            =glftpd
-kill            =glftpd
-logins          =glftpd
-misc		 =glftpd
-msg             =glftpd
-msg*            =glftpd
-msg=            =glftpd
-msg{            =glftpd
-nuke            =glftpd
-onel		 =glftpd
-oneladd	 =glftpd
-predupe	 =glftpd
-passwd          =glftpd =spl
-purge           =glftpd
-readd           =glftpd
-renuser         =glftpd
-reqlog          =glftpd
-request	 =glftpd
-requestadd	 =glftpd
-show            =glftpd
-stat		 =glftpd
-stats		 =glftpd
-swho            =glftpd
-take            =glftpd
-syslog          =glftpd
-undupe          =glftpd
-unnuke          =glftpd
-update          =glftpd
-user		 =glftpd
-users           =glftpd
-usercomment     =glftpd
-userextra       =glftpd
-who             =glftpd
-wipe		 =glftpd
-seen            =glftpd
-laston          =glftpd
-userothers      =glftpd
-traffic	 =glftpd


####全文完####by####kingway###at###gmail###dot###com#################