Skip to content

CentOS下安装配置pure-ftpd

pure-ftpd,一个很好用的ftp服务端。可以和mysql整合,通过mysql建立和验证帐户,并实现流量限制、磁盘配额限制等功能。这就说明,可以通过自己开发的PHP程序来实现Web管理。其它的功能,大家可以到官网上去看。

我是直接下载的包自己编译安装的。如下

安装mysql-devel

首先,如果你要跟mysql整合的话,先安装mysql-devel,进入这个页面选择跟你安装的mysql版本一样的rpm包,然后用rpm –ivh mysql-devel-*.rpm进行安装。

安装pureftpd

安装好后,就开始安装pureftpd了

bash
wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.35.tar.gz
tar zxf pure-ftpd-1.0.35.tar.gz
cd pure-ftpd-1.0.35
./configure --without-capabilities --with-virtualchroot --with-mysql --with-pam --with-altlog --with-cookie --with-throttling --with-ratios --with-paranoidmsg --with-quotas --with-everything
make
make install

输入这些命令后就把pure-ftpd安装好了。当然了,我之前没有装mysql-devel,会出现一些错误:

checking for mysql_init in -lmysqlclient… no

configure: error: libmysqlclient is needed for MySQL support

当时困扰了我不少时间,现在你看到我的这个文章,省时了,亲!给个好评吧!

附上安装的选项:

PureFTPd有很多的编译配置选项,下面就列出部分主要的配置

--prefix =PREFIX         安装路径

--with-sysquotas        使用系统磁盘配额 ( 非虚拟)

--with-altlog                支持选择日志格式( 类似Apache)

--with-puredb             支持虚拟用户 ( FTP登陆用户而非系统用户)

--with-extauth            支持扩展验证模块

--with-pam                  启用PAM验证支持 ( 默认=禁用)

--with-cookie              启用Cookie支持 ( -F 选项)

--with-throttling        支持带宽控制 ( 默认=禁用)

--with-ratios                支持 上传/ 下载 速度控制

--with-quotas             支持 .ftpquota 文件(指定磁盘配额使用)

--with-ftpwho            支持pure-ftpwho(查看在线用户的程序)

--with-largefile           支持大于2G的文件

--with-welcomemsg       支持 welcome.msg 向后兼容(已经过时)

--with-uploadscript         上传后允许执行外部脚本 ( 测试阶段)

--with-virtualhosts          在不同的IP地址提供虚拟服务器功能

--with-virtualchroot       允许在chroot 的环境下通过符合连接跳转到外部

--with-diraliases              启用目录别名

--with-nonroot                普通模式或者说是限制模式. 如果你在该服务器上没有root权限那只有启用该项

--with-peruserlimits    支持每个用户的并发限制

--with-language =        语言支持< english | traditional-chinese | simplified-chinese>

--with-ldap             在LDAP目录中提供用户数据库

--with-mysql            在MySQL数据库中存放用户数据

--with-pgsql            在PostgreSQL数据库中存放用户数据

配置

再然后就是对其进行配置了:

bash
cp pureftpd-mysql.conf /etc/
cp configuration-file/pure-config.pl /usr/local/sbin/
chmod 755 /usr/local/sbin/pure-config.pl
cp configuration-file/pure-ftpd.conf /etc/
cp contrib/redhat.init /etc/rc.d/init.d/pureftpd
chmod u+x /etc/rc.d/init.d/pureftpd
chkconfig --add pureftpd
chkconfig --level 2345 pureftpd on
service pureftpd start

输入这些命令后,你会看到:

Starting pure-config.pl: Running: /usr/local/sbin/pure-ftpd --daemonize -A -c50 -B -C8 -D -fftp -H -I15 -L10000:8 -m4 -s -U133:022 -u100 -k99 -Z

然后编辑/etc/pure-ftpd.conf,确保ChrootEveryone 、MySQLConfigFile 和CreateHomeDir是开启的

ChrootEveryone    yes
MySQLConfigFile    /etc/pureftpd-mysql.conf
CreateHomeDir    yes

然后再编辑 /etc/pureftpd-mysql.conf 如下:

MYSQLSocket      /tmp/mysql.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   这里输入前面给mysql授权时的密码
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW          SELECT Password FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetUID         SELECT Uid FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetGID         SELECT Gid FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetDir         SELECT Dir FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTASZ       SELECT QuotaSize FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTAFS       SELECT QuotaFiles FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)

创建组和用户以及mysql表创建

bash
# groupadd ftpgroup –g 10000 
# useradd ftpuser –g ftpgroup –u 10000 –d /dev/null –s /sbin/nologin

然后进入mysql

bash
#/usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock

输入密码后就进入mysql了,然后创建pureftpd数据表及赋予mysql中用户的权限。

sql
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY '对应的密码';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY '对应的密码';
FLUSH PRIVILEGES;

USE pureftpd;
CREATE TABLE ftpd (
    User varchar(16) NOT NULL default '',
    status enum('0','1') NOT NULL default '0',
    Password varchar(64) NOT NULL default '',
    Uid varchar(11) NOT NULL default '-1',
    Gid varchar(11) NOT NULL default '-1',
    Dir varchar(128) NOT NULL default '',
    ULBandwidth smallint(5) NOT NULL default '0',
    DLBandwidth smallint(5) NOT NULL default '0',
    comment tinytext NOT NULL,
    ipaccess varchar(15) NOT NULL default '*',
    QuotaSize smallint(5) NOT NULL default '0',
    QuotaFiles int(11) NOT NULL default 0,
    PRIMARY KEY (User),
    UNIQUE KEY User (User)
) TYPE=MyISAM;

数据表说明:

User:帐号名;

status:0 表示帐号被禁用,无法登录服务器;

Password:密码,使用MD5加密;

Uid:前面创建的ftpuser帐户号,我们填写的是2001;

Gid:前面创建的ftpgroup组号,我们填写的是2001;

Dir:虚拟用户的个人目录路径,将在/home下创建(第一次登录);

ULBandwidth:上传文件限制速度,KB/s,0为不限制;

DLBandwidth:下载文件限制速度,KB/s,0为不限制;

comment:备注信息;

ipaccess:* 表示任意IP都可以访问此ftp服务器,输入具体IP地址可以只允许此IP连接服务器;

QuotaSize:用户磁盘空间分配,单位:MB,0表示不加限制;

QuotaFiles:用户可以保存的文件数量限制,0表示不加限制。

下面这张图是表结构:

好了,向数据库中添加一个用户,把我们fptd的服务重启一下吧!

bash
#service pureftpd restart

不出意外,我们的ftp服务是可以用了。