linux下的PureFtp搭建 验证无错
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'
一般都是安装缺乏 参数选项 重新编译参数后 安装一次就可以
调试过程中可能需要用到的:
/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中的MinUID为ftp用户的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 此帐号只有下载权限
3)pureftp 限速
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的被动端口范围限制在30000到300010之间。
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 值:
0 表示不起用 ssl
1 表示明文和密文同时启用
补充:
<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立场。
本文系作者授权百度百家发表,未经许可,不得转载。