本文介绍通过编译源码的方式来安装和配置PureFTPD。如果需要定制功能,还是得靠编译源码才能得到完全符合自己需要的东西,这大概算是编译安装最大的强于YUM安装的地方了

一、安装PureFTPD

1、下载所需软件包

下载

wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.30.tar.gz

解压

tar zxvf pure-ftpd-1.0.30.tar.gz

2、编译安装

#安装到/usr/local/pureftpd支持所有功能,支持RFC2640(编码相关),语言简体中文

./configure --prefix=/usr/local/pureftpd --with-everything --with-rfc2640 --with-language=simplified-chinese

make && make install

3、复制必要的文件

-----进入pure-ftp解压目录-----

# cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/
# chmod 755 /usr/local/pureftpd/sbin/pure-config.pl
# mkdir -p /usr/local/pureftpd/etc/
# cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/
4、添加pureftpd为系统服务

# cp contrib/redhat.init /etc/init.d/pureftpd
# vi /etc/init.d/pureftpd

修改18/19行

    fullpath=/usr/local/sbin/$prog
    pureftpwho=/usr/local/sbin/pure-ftpwho

为:

    fullpath=/usr/local/pureftpd/sbin/$prog
    pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

修改24行

    $fullpath /etc/pure-ftpd.conf --daemonize

  $fullpath /usr/local/pureftpd/etc/pure-ftpd.conf --daemonize
# chmod 755 /etc/init.d/pureftpd
# chkconfig –add pureftpd
# chkconfig pureftpd on

5、修改配置文件

# vi /usr/local/pureftpd/etc/pure-ftpd.conf

其中可以修改最大连接数、空闲时间等,详细介绍见这里

其中有几项要修改:

chrootEveryone yes 限定在自己的家目录
 
NoAnonymous yes 不允许匿名登录
 
Bind 127.0.0.1,21 监听本机回环 <可选>
 
Bind 192.168.0.254,21 监听本机IP <自行添加的,非必须>
 
CreateHomeDir yes 允许用户登录后自动创建家目录 <必须>

如果启用了iptables,还必须修改下面这一行:

PassivePortRange 30000 50000

保存退出。
iptables开启相关端口:

iptables -I INPUT -p tcp –dport 21 -j ACCEPT
iptables -I INPUT -p tcp –dport 30000:50000 -j ACCEPT
/etc/rc.d/init.d/iptables save

6、配置虚拟用户登录环境

# mkdir /ftproot
# chmod -R 777 /ftproot <这不不做可以能会引起登录时报421错误>
# useradd virtualftp -d /ftproot -s /sbin/nologin <创建接下来的虚拟用户对应的系统用户>
# chown virtualftp:virtualftp /ftproot

7、设置环境变量

# echo PATH=$PATH:/usr/local/pureftpd/bin/ »/etc/profile
# source /etc/profile
# pure-pw show tony 查看tony这个用户的详细信息
# pure-pw list 是看用户列表的
# pure-pw passwd tony -m 修改tony的密码
# pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb 创建虚拟用户数据库。
# pure-pw show tony 查看用户
# pure-pw usermod 修改用户

8、启动pureftpd

#service pureftpd start

或者

#/usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf

出现

Running: /usr/local/pureftpd/sbin/pure-ftpd -A -c50 -B -C8 -D -E -fftp -H -I5 -L10000:8 -m4 -s -U133:022 -u100 -j -k99 -Z

表示正常

# netstat -anltp | grep 21

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 13418/pure-ftpd (SE

tcp 0 0 :::21 :::* LISTEN 13418/pure-ftpd (SE

FTP用非标准21端口实现PASV连接

vi /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"
vi /etc/sysconfig/iptables-config

options ip_conntrack_ftp ports=xxx21

二、虚拟用户使用篇

(一)用pureDB认证

<1>

#vi /usr/local/pureftpd/etc/pure-ftpd.conf

修改126行为:

PureDB /usr/local/pureftpd/pureftpd.pdb

<2>

#pure-pw useradd user1 -u virtualftp -g virtualftp -d /ftproot/user1 -m

说明:

user1是用户名,-u virtualftp是其实际的linux用户,-d指定起始目录,并锁定于该目录。如果不锁定,则用-D;如果需要不同的权限,可以建立新的linux用户与组

如果用的系统自带的ftp用户,这样的话还需修改配置文件pure-ftpd.conf中的MinUID为ftp用户的UID 14,否则登录时会出现530错误;所以这里建议创建另一个非系统自带的用户做映射

<3>建立用户数据库:

# pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb

说明:今后每添加或修改用户数据库都应该执行一次mkdb

<4>虚拟用户的信息以每个用户一行的方式存放在相应的文件中,其格式如下所示:

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>:<download bandwidth>:<upload ratio>:<download ratio>:<max number of connections>:<files quota>:<size quota>:<authorized local IPs>:<refused local IPs>:<authorized client IPs>:<refused client IPs>:<time restrictions>

其中,除了帐号、口令、 uid 、 gid 和 home 目录之外,其它的可以是空值

<5>pure-pw 创建用户的语法规范如下:

pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]

D/-d <home directory> [-c <gecos>]
    [-t <download bandwidth>] [-T <upload bandwidth>]
    [-n <max number of files>] [-N <max Mbytes>]
    [-q <upload ratio>] [-Q <download ratio>]
    [-r <allow client host>[/<mask>][,<allow client host>[/<mask>]]...]
    [-R <deny client host>[/<mask>][,<deny client host>[/<mask>]]...]
    [-i <allow local host>[/<mask>][,<allow client host>[/<mask>]]...]
    [-I <deny local host>[/<mask>][,<deny local host>[/<mask>]]...]
    [-y <max number of concurrent sessions>]
    [-z <hhmm>-<hhmm>] [-m]

如果pure-ftpd启动时加入 -j(–createhome) 选项,则不需要创建/ftproot/tony目录。系统会在该用户第一次登陆时自动创建

<6>更改用户的语法

pure-pw usermod <user> -n :禁用文件配额 pure-pw usermod <user> -N :禁用文件大小配额

pure-pw usermod <user> -q -Q :禁用 ratio

pure-pw usermod <user> -t :禁用下载带宽限制 pure-pw usermod <user> -T :禁用上传带宽限制

pure-pw usermod <user> ←i,-I,-r or -R> :禁用 IP 过滤 pure-pw usermod <user> -z :禁用时间段约束

pure-pw usermod <user> -y '' :禁用并发数限制

<7>删除一个用户

pure-pw userdel [-f ] [-m]
这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除

<8>更改一个用户口令

pure-pw passwd <login> [-f <passwd file>] [-m]

<9>显示用户信息

/etc/pureftpd.passwd 文件中记录的信息不方便用户的阅读,因此 pure-ftpd 提供了显示用户信息的命令。其语法是:

pure-pw show <login> [-f <passwd file>]

<10> 使得pure-ftpd支持虚拟用户,需要在编译的时候加入选项–with-puredb 。这时,可以通过在启动服务是的 ’-l’ 参数来设置。如:

/usr/local/pureftpd/sbin/pure-ftpd -j -lpuredb:/etc/pureftpd.pdb &