|
|
本文主要讲述的是安装pureftpd的过程,目标是实现ftpd服务,并且具备磁盘配额,用户实时添加等功能,并不一定适合大形网站,并有可能存在某些安全隐患,只能作交流于参考!
参考大量文献后,总结而来,虽不能算100%原创,但转载时,仍请注明出自 LinuxSir.org,非常感激您的合作! .
一,系统支持
系统中需要安装有 Mysql+Apache+PHP+(Dns可选).
二,准备软件
Ftpd Server :
pure-ftpd-1.0.20.tar.gz
pureftpd_php_manager:
pureftpd_php_manager.tar.gz
三,定制安装
1:解压缩
到下载的两个文件所在目录.
#cd download
#tar zxvf pure-ftpd-1.0.20.tar.gz
#tar zxvf pureftpd_php_manager.tar.gz
2:编译
#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-mysql=/usr/local/mysql \ 此处的 /usr/local/mysql 请改为你的mysql实际安装路径.如果出现类似configure: error: Your MySQL client libraries aren't properly installed 的错误,请将mysql目录下的 include/mysql下的mysql.h文件以及lib/mysql下的全部文件,连接(直接复制过去或许也可)到 /usr/lib 目录下
3:安装
#make
#make check
#make install
#cd configuration-file
#chmod u+x pure-config.pl
#cp pure-config.pl /usr/local/sbin/
#cp pure-ftpd.conf /usr/local/etc/
将pureftpd_php_manager目录拷贝到网站目录下
cp -R pureftpd_php_manager /opt/www/pureftpd_php_manager
四,配置服务
1:编辑/usr/local/etc/pure-ftpd.conf文件
找到
#CreateHomeDir yes
改为
CreateHomeDir yes
#作用是,用户登录,如果主目录不存在,便自动建立.
#此处的设置并不是变大就可以让新建立的文件拥有更多的权限,而是相反,比如这里设置的133:022对应的上传成功后的文件属性为755:644,特别更正此处。
Umask 133:022
#设定新文件的默认属性.此处作用不确定.有待商榷!
找到
# MySQLConfigFile /etc/pureftpd-mysql.conf
#改为
MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
#设定ftpd服务的参数取得为pureftpd-mysql.conf
文件设置
#######################
存盘退出.
2:编辑/usr/local/etc/pureftpd-mysql.conf文件
它的大概样子是这样的
- ##############################################
- # #
- # Sample Pure-FTPd Mysql configuration file. #
- # See README.MySQL for explanations. #
- # #
- ##############################################
- # Optional : MySQL server name or IP. Don't define this for unix sockets.
- MYSQLServer localhost
- #服务器地址
- # Optional : MySQL port. Don't define this if a local unix socket is used.
- MYSQLPort 3306
- #服务器端口
- # Optional : define the location of mysql.sock if the server runs on this host.
- MYSQLSocket /opt/mysql/var/mysql.sock
- #这里换成你的真实地址
- # Mandatory : user to bind the server as.
- MYSQLUser root
- #登录服务器用户名
- # Mandatory : user password. You must have a password.
- MYSQLPassword 123456
- #登录服务器密码
- # Mandatory : database to open.
- MYSQLDatabase ftpd
- #配置文件所在的数据库
- # Mandatory : how passwords are stored
- # Valid values are : "cleartext", "crypt", "md5" and "password"
- # ("password" = MySQL password() function)
- # You can also use "any" to try "crypt", "md5" *and* "password"
- MYSQLCrypt cleartext
- #验证方式
- # In the following directives, parts of the strings are replaced at
- # run-time before performing queries :
- #
- # \L is replaced by the login of the user trying to authenticate.
- # \I is replaced by the IP address the user connected to.
- # \P is replaced by the port number the user connected to.
- # \R is replaced by the IP address the user connected from.
- # \D is replaced by the remote IP address, as a long decimal number.
- #
- # Very complex queries can be performed using these substitution strings,
- # especially for virtual hosting.
- # Query to execute in order to fetch the password
- MYSQLGetPW SELECT Password FROM users WHERE User="\L" AND status="1"
- #登录服务器的用户密码验证字段,status="1"为此用户必需为激活模式.
- # Query to execute in order to fetch the system user name or uid
- MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
- #用户的UID
- # Optional : default UID - if set this overrides MYSQLGetUID
- #MYSQLDefaultUID 1000
- # Query to execute in order to fetch the system user group or gid
- MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
- #用户的Gid
- # Optional : default GID - if set this overrides MYSQLGetGID
- #MYSQLDefaultGID 1000
- # Query to execute in order to fetch the home directory
- MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
- #用户的主目录
- # Optional : query to get the maximal number of files
- # Pure-FTPd must have been compiled with virtual quotas support.
- MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
- #用户的最大文件数量
- # Optional : query to get the maximal disk usage (virtual quotas)
- # The number should be in Megabytes.
- # Pure-FTPd must have been compiled with virtual quotas support.
- MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
- #用户的最大磁盘空间
- # Optional : ratios. The server has to be compiled with ratio support.
- MySQLGetRatioUL SELECT ULBandwidth FROM users WHERE User="\L"
- MySQLGetRatioDL SELECT DLBandwidth FROM users WHERE User="\L"
- #上边两项为,用户上传与下载的速度,单位 Kb/s
- # Optional : bandwidth throttling.
- # The server has to be compiled with throttling support.
- # Values are in KB/s .
- # MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
- # MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
- # Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS :
- # 1) You know what you are doing.
- # 2) Real and virtual users match.
- # MySQLForceTildeExpansion 1
- # If you upgraded your tables to transactionnal tables (Gemini,
- # BerkeleyDB, Innobase...), you can enable SQL transactions to
- # avoid races. Leave this commented if you are using the
- # traditionnal MyIsam databases or old (< 3.23.x) MySQL versions.
- # MySQLTransactions On
复制代码
保存退出
请按您的实际情况修改.或者直接找错后复制过去.
3:修改:/opt/www/pureftpd_php_manager/pureftp.config.php文件
- ######################
- ####### SETUP ########
- ######################
- // 设置pureftpd-mysql.conf的位置,这个要注意,不要写错哦
- $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/sbin/pure-ftpwho";
- #######################
- # DEFAULT NEW-USER PARAMS #
- #######################
- $DB_TABLE='users'; #新增加变量,定义数据表名
- $DefaultUser = "ftpuser"; # 默认用户
- $DefaultPass = "passwd"; # 默认初始用户密码
- $DefaultUid = "48"; # 默认的uid(设置为apache的uid,你的或许不是48,为PHP建立的目录能够正常使用而设置)
- $DefaultGid = "48"; # 默认的gid(设置为apache的gid,你的或许不是48,为PHP建立的目录能够正常使用而设置)
- $DefaultDir = "/var/ftproot/ftpusershome"; # 默认的用户主目录
- $DefaultUL = "0"; # 默认用户上传速率限制(KB/S)
- $DefaultDL = "0"; # 默认用户下载速率限制(KB/S)
- $Defaultip = "*"; # 设置用户可以从哪些IP登陆
- $DefaultQS = "50"; # 用户默认的quota
- $Defaultcmt = ""; # 默认备注信息
- $DefaultQF = "0"; # 默认文件数目quota
- $PWC = "55"; # Vorsatz fuerr Crypt Password
复制代码
保存退出
4:修改/opt/www/pureftpd_php_manager/index.php文件
找到
- echo '<tr><th>UID</th><td class=TD><input type="text" name="requireduid" value="'.stripslashes($USERARRAY['Uid']).'" class="input"></td></tr>';
复制代码
改为
- echo '<tr><th></th><td class=TD><input type="hidden" name="requireduid" value="'.stripslashes($USERARRAY['Uid']).'" class="input"></td></tr>';
复制代码
找到
- echo '<tr><th>UID</th><td class=TD><input type="text" name="requireduid" value="'.stripslashes($USERARRAY['Uid']).'" class="input"></td></tr>';
复制代码
改为
- echo '<tr><th></th><td class=TD><input type="hidden" name="requiredgid" value="'.stripslashes($USERARRAY['Gid']).'" class="input"></td></tr>';
复制代码
找到
- $SQL = "UPDATE `$DB_TABLE` SET status='$status'".$PW_QUERY.",Uid='$Uid',Gid='$Gid',Dir='$Dir',ULBandwidth='$ULThrottle',DLBandwidth='$DLThrottle',comment='$comment',ipaccess='$ipaccess',QuotaSize='$QuotaSize',QuotaFiles='$QuotaFiles' WHERE User LIKE '$User' LIMIT 1";
复制代码
将Dir='$Dir'改为Dir='$userdir'
在其上边增加
[PHP]$userdir='/opt/ftp/'.$User;
if(!@opendir($userdir)){
mkdir($userdir, 0755);
@chgrp($userdir,"ftpusers");
@chown($userdir,"ftpusers");
////////$userdir为你希望的目录
}[/PHP]
找到
- $Q = DB_QUERY("INSERT INTO `$DB_TABLE` SET User='$User',status='$status'".$PW_QUERY.",Uid='$Uid',Gid='$Gid',Dir='$Dir',ULBandwidth='$ULThrottle',DLBandwidth='$DLThrottle',comment='$comment',ipaccess='$ipaccess',QuotaSize='$QuotaSize',QuotaFiles='$QuotaFiles'");
复制代码
将Dir='$Dir'改为Dir='$userdir'
在其上边增加
[PHP]$userdir='/opt/ftp/'.$User;
if(!@opendir($userdir)){
mkdir($userdir, 0755);
@chgrp($userdir,"ftpusers");
@chown($userdir,"ftpusers");
////////$userdir为你希望的目录
}[/PHP]
五,创建启动服务环境
1:创见用户和组
#groupadd ftpusers
#useradd ftpusers -g ftpusers
2创建数据库,以及数据表.
mysql>DROP TABLE IF EXISTS ftpd;
CREATE TABLE users (
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;
或者使用phpmyadmin创见上边的数据表和数据库数据库名为ftpd.
六,启动服务
1:启动服务需要给定一些参数,以告知服务配置文件的位置.
#/usr/local/pureftpd/sbin/pure-ftpd -l mysql:/usr/local/etc/pureftpd-mysql.conf &
服务正常启动的话,恭喜你,接近成功了.
2:登录后台管理页面(强烈建议您,为此页面增加验证功能)
http://localhost/pureftpd_php_manager/index.php
增加一个用户.
用刚刚增加的用户登录吧,您发现了什么呢?是否实现了所要的功能?如果是,那恭喜您.
参考文献:参考文献:
PureFTPd 系列中文文档之 README.MySQL PureFTPd 系列中文文档之PureFTPd 配置文件
最后祝您成功! |
|