对比了几个FTP服务器,发现还是Pure-ftpd好用,Proftpd空间配额都要打补丁,麻烦。加之昨天搞了一天vsftpd到现在还是没搞定虚拟用户密码错误的问题。更感觉到pure-ftpd的易用。
1.Download
Pure-ftpd,Proftpd都上不了,具体原因不得而知。
可以通过代理上这两个网站,随便找一个国外的代理服务器,设置好IE的连接就可以上了.
2.编译安装
#tar zxvf purexxxx.tgz
#cd purexxxxx
./configure --prefix=/usr/local/pureftpd --with-mysql --with-paranoidmsg --with-welcomemsg --with-uploadscript --with-cookie --with-virtualchroot --with-virtualhosts --with-virtualroot --with-diraliases --with-quotas --with-sysquotas --with-ratios --with-ftpwho --with-throttling --with-language=english
*********************************
我是用源码安装Mysql的,在configure过程中出现configure: error: libmysqlclient is needed for MySQL support的错误,我把 --with-mysql 改成 --with-mysql =/usr/local/mysql/lib/mysql也不行。
后来我做了几个链接到/usr/lib下:
#cd /usr/lib
#ln -s /usr/local/mysql/include/mysql/mysql.h .
#ln -s /usr/local/mysql/lib/mysql/* .
再把--with-mysql
改成
--with-mysql =/usr/local/mysql/
[root@unix-server3 pure-ftpd-1.0.22]# vi /etc/ld.so.conf
增加一行/usr/local/mysql/lib/mysql/ (可不加直接运行ldconfig给系统重新载入动态库)
[root@unix-server3 pure-ftpd-1.0.22]#ldconfig
回到源码目录configure就行了。
*********************************
这时,我们只用Mysql用户认证,不用LDAP,也不用其这的.
# make
# make check
# make install
3.测试
# /usr/local/pureftpd/sbin/pure-ftpd &
运行后,用FTP登录一下看,此时是系统用户认证.登录成功,表示Pure-FTPD安装好了
4.与Mysql结合
由于编译时带了--with-mysql选项,所以,无需修改Pure-FTPD.
A.
先在Mysql中建一个FTP用户表(和数据库):
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(16) NOT NULL,
`password` varchar(64) NOT NULL,
`uid` varchar(11) NOT NULL,
`gid` varchar(11) NOT NULL,
`dir` varchar(128) NOT NULL,
`quotasize` varchar(5) NOT NULL,
`quotafiles` varchar(11) NOT NULL,
`ulbandwidth` varchar(5) NOT NULL,
`dlbandwidth` varchar(5) NOT NULL,
`ulratio` varchar(6) NOT NULL,
`dlratio` varchar(6) NOT NULL,
`comment` tinytext NOT NULL,
`ipaccess` varchar(15) NOT NULL,
`status` enum('0','1') DEFAULT NULL,
`create_date` datetime NOT NULL,
`modify_date` datetime NOT NULL,
PRIMARY KEY (`id`,`user`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
说明
ID 用户ID
Name 用户名
Passwd 用户密码,用MD5加密
UID 用户对应的系统ID,请注意,默认情况下,低于100的UID不可以登录
GID 用户对应的系统组ID
Dir 用户主目录
quotafiles 用户最大文件数
quotasize 用户最大空间M
Status 用户状态,为1时可以使用(用SQL语句实现,见后面的Mysql.conf)
b.配置Pure-FTPD
我们用Pure-FPTD自带的启动脚本启动.
进入Pure-fptd的源代码目录
[root@linux pure-ftpd-1.0.15]# cd configuration-file
[root@linux configuration-file]# chmod u+x pure-config.pl
[root@linux configuration-file]# cp pure-config.pl /usr/local/pureftpd/bin
[root@linux configuration-file]# mkdir /usr/local/pureftpd/etc
[root@linux configuration-file]# cp pure-ftpd.conf /usr/local/pureftpd/etc
[root@linux configuration-file]# cd ..
[root@linux pure-ftpd-1.0.15]# cp pureftpd-mysql.conf /usr/local/pureftpd/etc/mysql.conf
[root@linux pure-ftpd-1.0.15]# cd /usr/local/pureftpd/etc
[root@linux etc]#vi pure-ftpd.conf
修改pure-ftpd.conf的配置,详细配置见后面
[root@linux etc]#vi mysql.conf
修改Mysql连接的配置,详细配置见后面
c.启动:
#/usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
*********************************
我在命令行执行可以,但写成启动脚本时报错/usr/local/pureftpd/sbin/pure-ftpd: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
在网上找了一下资料:
1.找到libmysqlclient.so.16所在的目录(/usr/local/mysql/lib/mysql)
2.将该目录加入到/etc/ld.so.conf的第一行
3.ldconfig
更新库所在位置
/usr/local/mydns/sbin/named -4 -n 1 -S 52428
搞定了@@@@@@@@@@@@@@@@@@
*********************************
d.测试
#groupadd ftpuser
#useradd -g ftpuser -s /sbin/nologin -d /ftp/ ftpwrite
#useradd -g ftpuser -s /sbin/nologin -d /ftp/ ftpread
#mkdir /ftp
#mkdir /ftp/ipaddr
#chown ftpwrite.ftpuser /ftp/ipaddr
加入两个FTP系统用户,假设ftpuser的GID为500,ftpwrite的UID为500,ftpread的UID为501
加入一个Mysql用户:
id=100
user=ipaddr
Passwd=md5(ipaddr)
UID=500 (501时,用户只读)
GID=500
Dir=/ftp/ipaddr
quotafiles=500
quotasize=30
Status=1
重启PureFTPD,再用FTP客户端测试
#killall pure-ftpd
#/usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
e.自启动.
可以将启动脚本写入/etc/rc.d/rc.local里,自启动,但不太方便,
可以写一个脚本,如下:
#!/bin/sh
# Startup script for the FTP Server
#
# chkconfig: - 99 99
# description: FTP Serve
case "$1" in
start)
/usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
;;
stop)
killall pure-ftpd > /dev/null
;;
*)
echo "Usage: `basename $0` {start | stop}" >&2
;;
esac
exit 0
:w /etc/init.d/pureftpd (保存到/etc/init.d/pureftpd)
#chkconfig --add pureftpd
#chkconfig pureftpd on
f.用户管理
用PHP写一个程序管理Mysql表就行了.
附录:
A.mysql.conf
MYSQLSocket /var/lib/mysql/mysql.sock
MYSQLServer 127.0.0.1
#MYSQL服务器的IP
MYSQLPort 3306
#MYSQL 端口号
MYSQLSocket /var/lib/mysql/mysql.sock
#使用 UNIX.sock本地连接
注:MYSQLServer 与 MYSQLSocket 选择一种即可
MYSQLUser ftp
#MYSQLUser 数据用户名
MYSQLPassword 123456
#MYSQL数据库用户的密码
MYSQLDatabase ftpusers
#FTP数据数据库
MYSQLCrypt md5
#密码加密方式"cleartext", "crypt", "md5" and "password"
# cleartext 明文,crypt,md5,password是Backend password(‘your-passwd’)函数(MYSQL数据库所使用的
password() 函数)
MYSQLGetPW SELECT Password FROM users WHERE User="L"
# 密码字段,我使用users表中的Password做为密码字段
MYSQLGetUID SELECT Uid FROM users WHERE User="L"
#UID用户ID字段
MYSQLDefaultUID 1000
#默认的UID (注:如何开启该选项,MYSQLGetUID将失去作用)
MYSQLGetGID SELECT Gid FROM users WHERE User="L"
#GID组ID字段
MYSQLDefaultGID 1000
#默认的GID (注:如何开启该选项,MYSQLGetGID将失去作用)
MYSQLGetDir SELECT Dir FROM users WHERE User="L"
#FTP用户目录如/home/web/www-9812-net
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="L"
#磁盘限额,文件数限制。如1000,允许用户上传1千个文件
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="L"
#磁盘限额,FTP用户空间限制(单位为M), 如:100M
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="L"
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="L"
#上传/下载比率。MySQLGetRatioUL为上 传比,MySQLGetRatioDL下载比。如:1:5
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="L"
#下传/下载带宽(单位KB/s)。MySQLGetBandwidthUL上传带宽,MySQLGetBandwidthDL下载带宽。如上传
500KB/s,下载50KB/s
MySQLForceTildeExpansion 1
MySQLTransactions On MYSQLUser sqluser
MYSQLPassword password
MYSQLDatabase kk
MYSQLCrypt md5
MYSQLGetPW SELECT passwd FROM users WHERE status=1 and user="\L"
MYSQLGetUID SELECT uid FROM users WHERE status=1 and user="\L"
MYSQLGetGID SELECT gid FROM users WHERE status=1 and user="\L"
MYSQLGetDir SELECT dir FROM users WHERE status=1 and user="\L"
MySQLGetQTAFS SELECT quotafiles FROM users WHERE status=1 and user="\L"
MySQLGetQTASZ SELECT quotasize FROM users WHERE status=1 and user="\L"
B.pure-ftpd.conf
.....
MySQLConfigFile /usr/local/pureftpd/etc/mysql.conf
Bind 192.168.0.9,21 #绑定指定Ip
#把这个打开就行了,其它的用默认
.....
C.定制PURE-FTPD的Banner
vi src/ftpd.c
4329 # ifdef BORING_MODE
4330 addreply_noformat(0, MSG_WELCOME_TO " Pure-FTPd.");
4331 # else
4332 addreply_noformat(0, "--------- " MSG_WELCOME_TO
4333 " Pure-FTPd" VERSION_PRIVSEP VERSION_TLS " ----------");
4334 # endif
将Pure-FPD改为自定义的名称,比如:IPADDR-FTPD