linux下pureftpd的安装与配置(FTP服务器)

对比了几个FTP服务器,发现还是Pure-ftpd好用,Proftpd空间配额都要打补丁,麻烦。加之昨天搞了一天vsftpd到现在还是没搞定虚拟用户密码错误的问题。更感觉到pure-ftpd的易用。

  1.Download

  http://www.pureftpd.org

  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

你可能感兴趣的:(linux下pureftpd的安装与配置(FTP服务器))