linux下的PureFtp搭建 验证无错

作者:csuper 发表于:2016-03-13

 pureftp的一些常见问题: 
1、默认安装时允许匿名用户和系统非root用户登录 
2、上传下载速度的限制不是很准确,浮动较大,比vsftp要差一些。 3、磁盘配额不是实时的。

手动启动pureftp:

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

如果报错421 Configuration error: Prohibited file name:

一般都是配置文件中的pid或者日志文件路径不允许指定到特殊目录造成的,恢复默认就行 (耽误一个下午)


如果出现以下错误

Running: /usr/local/pureftpd/sbin/pure-ftpd -A -c50 -B -C5 -D -E -fftp -H -I15 -lmysql:/usr/local/pureftpd/pureftpd-mysql.conf -lunix -L50000:20 -m4 -p20000:30000 -s -U000:000 -u100 -Ostats:/var/log/pureftpd.log -j -g/var/run/pure-ftpd.pid -k99 -Z -Y1

/usr/local/pureftpd/sbin/pure-ftpd: invalid option -- 'Y'

一般都是安装缺乏 参数选项  重新编译参数后 安装一次就可以


配置文件.zip


调试过程中可能需要用到的:


/usr/local/pureftpd/bin/pure-pw useradd pureftp01 -u ftp -d /home/WebRoot/pureftp01 -m

/usr/local/pureftpd/bin/pure-pw userdel pureftp01 -u ftp -d /home/WebRoot/pureftp01 -m
/usr/local/pureftpd/bin/pure-pw list

 /usr/local/pureftpd/bin/pure-pw  --help



netstat -tupln |grep 21

非常重要的一步:

groupadd ftpusers -g 2000
useradd -u 2000 -g ftpusers -s /sbin/nologin -d /home/ftp ftp

配合用户映射用  

如果是虚拟主机 需要匹配对应的 php nginx的用户ID


先下载pure-ftpd-1.0.36.tar.gz

wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.tar.gz

 

配置具体步骤:

一、安装所需软件包

yum -y install php httpd php-mysql mysql mysql-server mysql-devel

二、源码安装pure-ftp

tar -zxvf pure-ftpd-1.0.36.tar.gz -C /usr/local/src/

cd /usr/local/src/pure-ftpd-1.0.36/

检测预编译环境

[root@localhost pure-ftpd-1.0.36]#

./configure --prefix=/usr/local/pureftpd --with-mysql=/usr/local/mysql --with-quotas --with-cookie --with-virtualhosts --with-virtualroot --with-diraliases --with-sysquotas --with-ratios --with-ftpwho --with-altlog --with-paranoidmsg --with-shadow --with-welcomemsg  --with-throttling --with-pam --with-tls --with-uploadscript --with-largefile --with-everything --with-language=simplified-chinese

 

    
                       
                   

其中

--with-quotas --with-tls 自已补充的,采用加密传输

--with-everything自己补充的,是安装所有功能

 

生成ssl证书:


 #  mkdir -p /etc/ssl/private

 # openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

 # chmod 600 /etc/ssl/private/*.pem



      

编译

[root@localhost pure-ftpd-1.0.36]#make

将编译产生的四类文件放置合适的位置

[root@localhost pure-ftpd-1.0.36]#make install

创建pureftpd的配置文件存放的目录

[root@localhost ~]#mkdir -p /usr/local/pureftpd/etc/

三、生成pure-ftpd的服务脚本

[root@localhost pure-ftpd-1.0.36]# cd configuration-file/

[root@localhost configuration-file]# cp pure-ftpd.conf /usr/local/pureftpd/etc/

[root@localhost configuration-file]# chmod 755 pure-config.pl

[root@localhost configuration-file]# cp pure-config.pl /usr/local/pureftpd/sbin/

拷贝pureftpd的控制脚本redhat.init    在安装文件目录下

[root@localhost ~]# cd /usr/local/src/pure-ftpd-1.0.36/contrib/

[root@localhost contrib]# cp redhat.init /etc/init.d/pureftpd

[root@localhost contrib]# chmod 755 /etc/init.d/pureftpd  #给脚本可执行权限

四、生成pure-ftpd的服务

编辑控制脚本vim /etc/init.d/pureftpd,修改路径如下

17 prog=pure-config.pl

18 fullpath=/usr/local/pureftpd/sbin/$prog

19 pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

24 $fullpath /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize

启动pureftpd服务

service pureftpd restart

[root@localhost ~]# chkconfig --add pureftpd

[root@localhost ~]# chkconfig pureftpd on

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

[root@localhost ~]# mkdir /usr/local/src/pure-ftpd-1.0.36/contrib/ftproot

[root@localhost ~]#ln -s /usr/local/src/pure-ftpd-1.0.36/contrib/ftproot /ftproot 

[root@localhost contrib]# chmod -R 777 ftproot/

[root@localhost contrib]# useradd virtualftp -d /ftproot -s /sbin/nologin  -M

[root@localhost contrib]# chown virtualftp.virtualftp ftproot 


 

修改配置文件

vim /usr/local/pureftpd/etc/pure-ftpd.conf

其中有几项要修改:

20 ChrootEveryone              yes    #限定在自己的家目录

40 MaxClientsNumber            50    #最大连接数目

52 MaxClientsPerIP             8      #每个IP最大连接数目

71 NoAnonymous               yes    #不允许匿名登录

336 CreateHomeDir             yes    #允许用户登录后自动创建家目录

六、用pureDB认证

编辑pureftp的配置文件

vim /usr/local/pureftpd/etc/pure-ftpd.conf

116 MySQLConfigFile               /usr/local/pureftpd/etc/pureftpd-mysql.conf

[root@localhost ~]# cp pureftpd-mysql.conf /usr/local/pureftpd/etc/

[root@localhost ~]# cd /usr/local/pureftpd/etc/

[root@localhost etc]# vim pureftpd-mysql.conf



27 MYSQLUser       ftp                #用户ftp

32 MYSQLPassword   tmppasswd         #密码

37 MYSQLDatabase   ftpusers            #数据库

45 MYSQLCrypt      md5               #密码类型   还有明文形式的





导入数据库文件pureftp.sql

[root@localhost ~]# vim pureftp.sql

-- -------------------------------------------------------

INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES('localhost','ftp',PASSWORD('passwd'),'Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N');

FLUSH PRIVILEGES;

CREATE DATABASE ftpusers;

USE ftpusers;

CREATE TABLE admin (

  Username varchar(35) NOT NULL default '',

  Password char(32) binary NOT NULL default '',

  PRIMARY KEY  (Username)

) TYPE=MyISAM;

INSERT INTO admin VALUES ('admin',MD5('123'));

CREATE TABLE `users` (

  `User` varchar(16) NOT NULL default '',

  `Password` varchar(32) binary NOT NULL default '',

  `Uid` int(11) NOT NULL default '14',

  `Gid` int(11) NOT NULL default '5',

  `Dir` varchar(128) NOT NULL default '',

  `QuotaFiles` int(10) NOT NULL default '500',

  `QuotaSize` int(10) NOT NULL default '30',

  `ULBandwidth` int(10) NOT NULL default '80',

  `DLBandwidth` int(10) NOT NULL default '80',

  `Ipaddress` varchar(15) NOT NULL default '*',

  `Comment` tinytext,

  `Status` enum('0','1') NOT NULL default '1',

  `ULRatio` smallint(5) NOT NULL default '1',

  `DLRatio` smallint(5) NOT NULL default '1',

  PRIMARY KEY  (`User`),

  UNIQUE KEY `User` (`User`)

) TYPE=MyISAM;

 

注释:

CREATE TABLE admin (

  Username varchar(35) NOT NULL default '',

  Password char(32) binary NOT NULL default '',

  PRIMARY KEY  (Username)

) TYPE=MyISAM;

INSERT INTO admin VALUES ('admin',MD5('123'));

CREATE TABLE `users` (

这里创建了admin表,创建了admin 123两个键值,主要是用于登录 平台的管理员帐号。这里管理员就是admin 密码123

 

 

导入数据库

[root@localhost ~]# mysql -u root -p < pureftp.sql

Enter password:

进入数据库,查看是否导入成功

[root@localhost ~]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| ftpusers           |

| mysql              |

| test               |

+--------------------+

4 rows in set (0.00 sec)

mysql> use ftpusers;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> show tables;

+--------------------+

| Tables_in_ftpusers |

+--------------------+

| admin              |

| users              |

+--------------------+

2 rows in set (0.01 sec)

mysql> select * from admin;

+----------+----------------------------------+

| Username | Password                         |

+----------+----------------------------------+

| admin    | 202cb962ac59075b964b07152d234b70 |

+----------+----------------------------------+

1 row in set (0.00 sec)

查看数据库,并给ftp账号设置权限,让ftpusers数据库下所有表ftp用户都有访问的权限

mysql -u root –p

Enter password:

mysql> grant all privileges on ftpusers.* to ftp@localhost identified by 'tmppasswd';

mysql> flush privileges;                     #使上述策略生效

mysql> quit

配置基于PHP的管理界面PureAdmin-0.3

tar -zxvf PureAdmin-0.3.tar.gz -C /var/www/html/

[root@localhost ~]# cd /var/www/html/

[root@localhost html]# mv PureAdmin-0.3/ pureadmin

[root@localhost html]# cd pureadmin/

[root@localhost pureadmin]# vim config.php

1 <?php

  2 $cfg['dbhost']='localhost';   #mysql所在主机   

  3 $cfg['dbname']='ftpusers';   #mysql 数据库名字     另外配置专用的账户信息最好

  4 $cfg['dbuser']='ftp';         #mysql的用户

  5 $cfg['dbpasswd']='tmppasswd'; #mysql的密码

  8 $cfg['page']=15;

 10 $cfg['passwdtype']='MD5';   #密码类型MD5

 12 $cfg['uid']=1000;       #用户ID

 13 $cfg['gid']=1000;       #ID

 14 $cfg['dir']='/ftproot/';    #用户家目录   根据实际情况配置

 15 $cfg['qf']=0;  

16 $cfg['qs']=100;  #配额限制100M

 17 $cfg['ul']=0;    #上传速录无限制

 18 $cfg['dl']=200;  #下载速率限制为200k

 19 $cfg['ur']=0;  

 20 $cfg['dr']=0; 

 21 $cfg['status']=1;

 22 $cfg['ip']= '*';        #允许所有IP

 23 ?>

可复制:

<?php

$cfg['dbhost']='localhost';   

$cfg['dbname']='ftpusers';   

$cfg['dbuser']='ftp';         

$cfg['dbpasswd']='tmppasswd'; 

$cfg['page']=15;

$cfg['passwdtype']='MD5';  

$cfg['uid']=1000;       

$cfg['gid']=1000;       

$cfg['dir']='/ftproot/';   

$cfg['qf']=0;  

$cfg['qs']=100000;  

$cfg['ul']=0;    

$cfg['dl']=200000;  

$cfg['ur']=0;  

$cfg['dr']=0; 

$cfg['status']=1;

$cfg['ip']= '*';        

?>

 

 

虚拟账号映射到本地目录

vim /usr/local/pureftpd/etc/pure-ftpd.conf

126 PureDB                        /usr/local/pureftpd/pureftpd.pdb

[root@localhost ~]# cd /usr/local/pureftpd/bin/

[root@localhost bin]# echo PATH=$PATH:/usr/local/pureftpd/bin/ >>/etc/profile

[root@localhost bin]# . /etc/profile      #使之立即生效

[root@localhost ftproot]# pure-pw useradd user1 -u virtualftp -g virtualftp -d /ftproot/user1 m                     #产生映射

Password:

Enter it again:

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

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

建立用户数据库

[root@localhost ftproot]#  pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb

重启服务

service pureftpd restart

service httpd restart

 

七:补充:

1) 如何对同一目录不同帐号使用不同的权限。

a,新建用户virtualftp,virtualftp

useradd virtualftp -d /ftproot -s /sbin/nologin  -M

mkdir /ftproot/ftp

更改文件夹ftp权限及属性

chown virtualftp.virtualftp ftp

chmod 755 ftp

产生虚拟帐号ftpdmin  密码123.com

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

Password:123.com

Enter it again:123.com

ftpadmin 此帐号是能完全访问的,有上传,下载权限

建立用户数据库

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

b, 新建用户v2ftp,v2ftp

useradd v2ftp -d /ftproot -s /sbin/nologin  -M

产生虚拟帐号ftpguest  密码123

pure-pw useradd ftpguest -u v2ftp -g v2ftp -d /ftproot/user1 m                     

Password:123

Enter it again:123

ftpguest 此帐号只有下载权限

 

3pureftp 限速

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

 

224 # Maximum bandwidth for *all* users (including anonymous) in KB/s

225 # Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.

226 

227 # UserBandwidth             8

UserBandwidth          1000

 

这里的UserBandwidth          1000指的所有用户总的速度限制在1000KB/s

 

4) pureftp 被动端口设置

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

 178 # Port range for passive connections replies. - for firewalling.

 179 

 180 # PassivePortRange          30000 50000

 PassivePortRange          30000 30010

这里将pureftp的被动端口范围限制在30000300010之间。

5) 用户修改密码

如修改帐户user1的密码

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

 

或按下面操作

2,删除user1/usr/local/pureftpd/etc/pureftpd.passwd 的所有信息

如:

vi /usr/local/pureftpd/etc/pureftpd.passwd

user1:$1$orq6bFD0$O5iZAvkOlelv.tL2LvlSI/:501:501::/ftproot/user1/./::::::::::::

bobo:$1$.AACKq80$mmVdD8DXIaH2BQxiOd.cN.:501:501::/ftproot/bobo/./::::::::::::

ftpguest:$1$qnDXkvw0$6fK72lVIpnmR9SJ9/LKVS/:502:502::/ftproot/user1/./::::::::::::

nhftpadmin:$1$8EJ7rda0$cYz0ZFotqUX1Yi/h/oYZr0:501:501::/ftproot/user1/./::::::::::::

 

删除user1整行

然后重新添加新的user1的帐号

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

Password:123.com

Enter it again:123.com

 

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

 

6) 配置TLS加密

 

1)先检查系统是否安装OPENSSL,如果没有请自行安装
# rpm -q openssl
2)创建OPENSSL证书
 
# mkdir -p /etc/ssl/private
 
# openssl req -x509 -nodes -newkey rsa:1024 -keyout
 
/etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
 

 chmod 600 /etc/ssl/private/*.pem  
3) 安装时一定要选择--with-tls

cd /usr/local/src/pure-ftpd-1.0.36/

检测预编译环境

[root@localhost pure-ftpd-1.0.36]#./configure \

       --with-tls 

4)修改/usr/local/pureftpd/etc/pure-ftpd.conf配置文件

增加TLS   1

# This option can accept three values :

# 0 : disable SSL/TLS encryption layer (default).

# 1 : accept both traditional and encrypted sessions.

# 2 : refuse connections that don't use SSL/TLS security mechanisms,

#     including anonymous sessions.

# Do _not_ uncomment this blindly. Be sure that :

# 1) Your server has been compiled with SSL/TLS support (--with-tls),

# 2) A valid certificate is in place,

# 3) Only compatible clients will log in.

 

# TLS                      1

TLS                       1

TLS 值:

表示不起用 ssl

表示明文和密文同时启用

 

 

补充:

 

<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 <login> [-f <passwd file>] [-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 &

 

 

版权声明

本文仅代表作者观点,不代表Csuper立场。
本文系作者授权百度百家发表,未经许可,不得转载。