pureftp mysql pureftpd_php_manager 搭建配置详解

1.安装pureftp
# wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.20.tar.bz2
# tar jxvf pure-ftpd-1.0.20.tar.bz2
# cd pure-ftpd-1.0.20
# ./configure \
--prefix=/usr/local/pureftpd \
--with-mysql=/usr/local/mysql \
--with-paranoidmsg \
--with-shadow \
--with-welcomemsg \
--with-uploadscript \
--with-quotas \
--with-cookie \
--with-pam \
--with-virtualhosts \
--with-virtualroot \
--with-diraliases \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling \
--with-peruserlimits \
--with-language=simplified-chinese
# make
# make check
# make install
# chmod 755 configuration-file/pure-config.pl
# cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/
# cp configuration-file/pure-ftpd.conf /usr/local/etc/
# cp contrib/redhat.init /etc/init.d/pureftpd
# chmod 755 /etc/init.d/pureftpd
# chown root:root /etc/init.d/pureftpd
# chkconfig --add pureftpd
# chkconfig pureftpd on

# vi /etc/init.d/pureftpd
# Path to the pure-ftp binaries.
prog=pure-config.pl
fullpath=/usr/local/pureftpd/sbin/$prog
pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

start() {
echo -n $"Starting $prog: "
$fullpath /usr/local/etc/pure-ftpd.conf --daemonize
RETVAL=$?
[ $RETVAL = 0 ] && touch /var/lock/subsys/$prog
echo
}

修改pureftpd配置文件/usr/local/etc/pure-ftpd.conf,在这里只列出需要更改的几处
# Cage in every user in his home directory
# 限制每个用户到自己的根目录
ChrootEveryone yes
# Disallow anonymous connections. Only allow authenticated users.
# 取消anonymous用户
NoAnonymous yes
# MySQL configuration file (see README.MySQL)
# pureftpd-mysql.conf文件的位置
MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf

添加FTP用户和组
# groupadd ftpusers -g 2000
# useradd -u 2000 -g ftpusers -s /sbin/nologin -d /var/ftp ftp


2.1.安装pureftpd_php_manager

安装pureftpd_php_manager
# unzip pureftpd_php_manager.zip
# chmod –R 755 pureftpd_php_manager

配置pureftpd_php_manager
# cp –R pureftpd_php_manager /var/www (/var/www是我的网站的根目录�o请自行更改)
# cd /var/www/pureftpd_php_manager

复制pureftpd和mysql整合的配置文件到etc配置目录�o取代原先的pureftpd-mysql.conf文件,设置权限
# cp pureftpd-mysql.conf.sample /usr/local/etc/pureftpd-mysql.conf
需要编辑配置这个文件才可以,主要是修改这里
# vi /usr/local/etc/pureftpd-mysql.conf
MYSQLUser ftp
MYSQLPassword 123456
MYSQLDatabase pureftpd

说明:MYSQLUser 表示mysql的某个用户名,MYSQLPassword 表示mysql用户名的密码,MYSQLDatabase 表示数据库名字
为了安全起见�o强烈建议不要使用root�o因为php的漏洞很多的�o如果你不善长配置服务器�o通过shell拿到这个文件�o轻而易举的。在这里�o我们假设建立了一个pureftpd的用户和pureftpd的数据库�o并且修改了pureftpd-mysql.conf文件里面的相关字段�o存盘退出。

在mysql中添加相应的数据
# mysql
mysql> CREATE DATABASE pureftpd;
mysql> USE pureftpd;
mysql> DROP TABLE IF EXISTS ftpd;
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;

mysql>grant all on pureftpd.* to ftp@localhost identified by '123456';

建立好后�o接着做下面一步�o就可以完成pureftpd-php-manager的配置了
# cd /var/www/pureftpd_php_manager
# vi pureftp.config.php

<?php
######################
####### SETUP ########
######################

// Your exactly located mysql config file for pureftpd
$PUREFTP_CONFIG_FILE = '/usr/local/etc/pureftpd-mysql.conf';

// The location where all the Forms directed to. (Mayby no change needed)
$SELF_URL = 'index.php';

// The location of your pure-ftpdwho binary (set this to chmod 4711)
$FTP_WHO = "/usr/local/purefptd/sbin/pure-ftpwho";

#######################
# DEFAULT NEW-USER PARAMS #
#######################

$DefaultUser = ""; # Default User Logon
$DefaultPass = ""; # Default User Password
$DefaultUid = ""; # Default User ID ( must be a real user acct )
$DefaultGid = "2000"; # Default Group ID ( must be a real group acct )
$DefaultDir = "/home"; # Default User Dir ( use /./ at the end to chroot )
$DefaultUL = "0"; # Default Upload Throttle ( 0 disables it )
$DefaultDL = "0"; # Default Download Throttle ( 0 disables it )
$Defaultip = "*"; # Default IP restrictions ( * = any IP )
$DefaultQS = "200"; # Default Quota Size ( 0 disables it )
$Defaultcmt = ""; # Default Comment for user

// UA
$DefaultQF = "0"; # Default Quota Files ( 0 disables it )
$PWC = "55"; # Vorsatz fuerr Crypt Password
?>

启动
# service purefptd start

测试
# ftp localhost
........


2.2.User manager for PureFTPd
# wget http://machiel.generaal.net/files/pureftpd/ftp_v1.4.0.tar.gz
# tar -zxvf ftp_v1.4.0.tar.gz -C /var/www/
# vi /var/www/ftp/config.php
$LANG = "Chinese";
$DBHost = “127.0.0.1”;
$DBLogin = “ftp”;
$DBPassword = “123456”;
$DBDatabase = “ftpusers”;
$FTPAddress = “127.0.0.1:21”;

修改数据库脚本
# vi /var/www/ftp/script.mysql
=====================script.mysql ===================
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('127.0.0.1','ftp',PASSWORD('123456'),'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 ('Administrator',MD5('123456'));

CREATE TABLE users (
User char(16) NOT NULL default '',
Password char(32) binary NOT NULL default '',
Uid int(11) NOT NULL default '2000',
Gid int(11) NOT NULL default '2000',
Dir char(128) NOT NULL default '',
QuotaFiles int(10) NOT NULL default '1000',
QuotaSize int(10) NOT NULL default '100',
ULBandwidth int(10) NOT NULL default '80',
DLBandwidth int(10) NOT NULL default '80',
status enum('0','1') NOT NULL default '1',
ipaccess varchar(15) NOT NULL default '*',
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

INSERT INTO users VALUES ('test',MD5('test'),2000,2000,'/var/ftp/test/',500,30,80,5);
=====================script.mysql ===================

创建数据库
# mysql –u root < /var/www/ftp/script.mysql

# vi /usr/local/etc/pureftpd-mysql.conf
#MYSQLSocket /var/lib/mysql/mysql.sock
MYSQLServer 127.0.0.1
MYSQLPort 3306
MYSQLUser ftp
MYSQLPassword tmppasswd
MYSQLDatabase 123456
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
MYSQLDefaultUID 2000
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
MYSQLDefaultGID 2000
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"

启动
# service purefptd start

测试
# ftp localhost
........

3.pureftpd配置文件详解

# 如果你想要使用配置文件代替命令行选项来运行 Pure-FTPd ,请运行下面的命令:
#
# /usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
#
# RPM 缺省使用另外一个配置文件:
# /etc/sysconfig/pure-ftpd
#
# 请不要忘了浏览一下 http://www.pureftpd.org/documentation.html 的
# 文档,查看全部的选项列表。

# 限制所有用户在其主目录中
ChrootEveryone yes

# 如果前一个指令被设置为了 "no",下面组的成员(GID)就不受主目录的限制了。而其他的用户还是
# 会被限制在自己的主目录里。如果你不想把任何用户限制在自己的主目录里,只要注释掉 ChrootEveryone
# 和 TrustedGID 就可以了。
# TrustedGID 100

# 兼容ie等比较非正规化的ftp客户端
BrokenClientsCompatibility no

# 服务器总共允许同时连接的最大用户数
MaxClientsNumber 50

# 做为守护(doemon)进程运行(Fork in background)
Daemonize yes

# 同一IP允许同时连接的用户数(Maximum number of sim clients with the same IP address)
MaxClientsPerIP 8

# 如果你要记录所有的客户命令,设置这个指令为 "yes"。
# This directive can be duplicated to also log server responses.
VerboseLog no

# 即使客户端没有发送 '-a' 选项也列出隐藏文件( dot-files )。
DisplayDotFiles yes

# 不允许认证用户 - 仅作为一个公共的匿名FTP。
AnonymousOnly no

# 不允许匿名连接,仅允许认证用户使用。
NoAnonymous no

# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# 缺省的功能( facility 是 "ftp"。 "none" 将禁止日志。
SyslogFacility ftp

# 定制用户登陆后的显示信息(Display fortune cookies)
# FortunesFile /usr/share/fortune/zippy

# 在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。在一个访问量很大
# 的站点中,设置这个指令为 "yes" ,如果你没有一个能工作的DNS的话。
DontResolve yes

# 客户端允许的最大的空闲时间(分钟,缺省15分钟)
MaxIdleTime 15

# LDAP 配置文件 (参考 README.LDAP)
# LDAPConfigFile /etc/pureftpd-ldap.conf

# MySQL 配置文件 (参考 README.MySQL)
# MySQLConfigFile /etc/pureftpd-mysql.conf

# Postgres 配置文件 (参考 README.PGSQL)
# PGSQLConfigFile /etc/pureftpd-pgsql.conf

# PureDB 用户数据库 (参考 README.Virtual-Users)
# PureDB /etc/pureftpd.pdb

# pure-authd 的socket 路径(参考 README.Authentication-Modules)
# ExtAuth /var/run/ftpd.sock

# 如果你要启用 PAM 认证方式, 去掉下面行的注释。
# PAMAuthentication yes

# 如果你要启用 简单的 Unix系统 认证方式(/etc/passwd), 去掉下面行的注释。
# UnixAuthentication yes

# 请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和
# UnixAuthentication 这些指令只能被使用一次,不过,他们能被混合在一起用。例如:如果你使用了
# MySQLConfigFile 和 UnixAuthentication,那么 SQL 服务器将被访问。如果因为用户名未找
# 到而使 SQL 认证失败的话,就会在/etc/passwd 和 /etc/shadow 中尝试另外一种认证,如果因
# 为密码错误而使 SQL 认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链
# 接了起来。

# 'ls' 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。
LimitRecursion 2000 8

# 允许匿名用户创建新目录?
AnonymousCanCreateDirs no

# 如果系统被 loaded 超过下面的值,匿名用户会被禁止下载。
MaxLoad 4

# 被动连接响应的端口范围。- for firewalling.
# PassivePortRange 30000 50000

# 强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT.
# Symbolic host names are also accepted for gateways with dynamic IP
# addresses.
# ForcePassiveIP 192.168.0.1

# 匿名用户的上传/下载的比率。
# AnonymousRatio 1 10

# 所有用户的上传/下载的比率。
# This directive superscedes the previous one.
# UserRatio 1 10

# 不接受所有者为 "ftp" 的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件。
AntiWarez yes

# 服务监听的IP 地址和端口。(缺省是所有IP地址和21端口)
# Bind 127.0.0.1,21

# 匿名用户的最大带宽(KB/s)。
# AnonymousBandwidth 8

# 所有用户的最大带宽(KB/s),包括匿名用户。
# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.
# UserBandwidth 8

# 新建目录及文件的属性掩码值。<文件掩码>:<目录掩码> .
# 177:077 if you feel paranoid.
Umask 133:022

# 认证用户允许登陆的最小组ID(UID) 。
MinUID 100

# 仅允许认证用户进行 FXP 传输。
AllowUserFXP yes

# 对匿名用户和非匿名用户允许进行匿名 FXP 传输。
AllowAnonymousFXP no

# 用户不能删除和写点文件(文件名以 '.' 开头的文件),即使用户是文件的所有者也不行。
# 如果 TrustedGID 指令是 enabled ,文件所属组用户能够访问点文件(dot-files)。
ProhibitDotFilesWrite no

# 禁止读点文件(文件名以 '.' 开头的文件) (.history, .ssh...)
ProhibitDotFilesRead no

# 永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如: file.1, file.2, file.3, ...
AutoRename no

# 不接受匿名用户上传新文件( no = 允许上传)
AnonymousCantUpload no

# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP,
# 而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外
# 一个IP上提供纯匿名的FTP服务。
#TrustedIP 10.1.1.1

# 如果你要为日志每一行添加 PID 去掉下面行的注释。
# LogPID yes

# 使用类似于Apache的格式创建一个额外的日志文件,如:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件能被 www 流量分析器处理。
# AltLog clf:/var/log/pureftpd.log

# 使用优化过的格式为统计报告创建一个额外的日志文件。
# AltLog stats:/var/log/pureftpd.log

# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)
# AltLog w3c:/var/log/pureftpd.log

# 不接受 CHMOD 命令。用户不能更改他们文件的属性。
# NoChmod yes

# 允许用户恢复和上传文件,却不允许删除他们。
# KeepAllFiles yes

# 用户主目录不存在的话,自动创建。
# CreateHomeDir yes

# 启用虚拟的磁盘限额。第一个数字是最大的文件数。
# 第二个数字是最大的总的文件大小(单位:Mb)。
# 所以,1000:10 就限制每一个用户只能使用 1000 个文件,共10Mb。
# Quota 1000:10

# 如果你的 pure-ftpd 编译时加入了独立服务器( standalone 支持,你能够改变 pid 文件
# 的位置。缺省位置是 /var/run/pure-ftpd.pid 。
# PIDFile /var/run/pure-ftpd.pid

# 如果你的 pure-ftpd 编译时加入了 pure-uploadscript 支持,这个指令将会使 pure-ftpd
# 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,这样 pure-uploadscript
# 就能读然后调用一个脚本去处理新的上传。
# CallUploadScript yes

# 这个选项对允许匿名上传的服务器是有用的。当 /var/ftp 在 /var 里时,需要保留一定磁盘空间
# 来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。
MaxDiskUsage 99

# 如果你不想要你的用户重命名文件的话,就设置为 'yes' 。
# NoRename yes

# 是 'customer proof' : 工作区(workaround)反对普通的客户错误,类似于:'chmod 0 public_html' 的错误。
# 那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。
# 如果你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,如果你是一个主机提供商
# 的话,启用它。
CustomerProof yes

# 每一个用户的并发限制。只有在添加了 --with-peruserlimits 编译选项进行编译后,这个指令才起
# 作用。(大部分的二进制的发布版本就是例子)
# 格式是 : <每一个用户最大允许的进程>:<最大的匿名用户进程>
# 例如: 3:20 意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程。
# PerUserLimits 3:20

 

你可能感兴趣的:(数据库,mysql,pureftp,搭建配置详解)