pure-ftpd + mysql.......Management 安装配置实例

来源:互联网 发布:科比13数据 编辑:程序博客网 时间:2024/04/30 09:18
################## pure-ftpd ###########################

Aborigen Yin
tutu@bsdbase.com
2003.06.07

  pure-ftpd + mysql + PureFTP PHP User Management 安装配置实例

freeBSD 4.8 stable

#mysql apache请自行安装。
#文档中的一些路径是我的环境中使用的,请自行修改以符合你的实际情况;

#相关网址:
http://www.pureftpd.org (国内可能无法访问)
http://sourceforge.net/projects/pureftpd/ (国内现在可以访问了)

8.1.安装
cd /usr/local/src/distfiles
##172.16.100.245是我的文件服务器
wget ftp://172.16.100.245/pub/distfiles/pure-ftpd-1.0.14.tar.gz
tar xfz pure-ftpd-1.0.14.tar.gz -C ..
cd ../pure-ftpd-1.0.14
mkdir -p /usr/local/modules/support/pure-ftpd/etc
mkdir -p /usr/local/modules/support/pure-ftpd/var/run
mkdir -p /usr/local/modules/support/pure-ftpd/var/log
#用puredb;
#使用英文,WITH_LANG=simplified-chinese可以使用简体中文,不过在某些情况下,你可能更希望看到英文;

./configure --prefix=/usr/local/modules/support/pure-ftpd /
--with-everything /
--with-diraliases /
--with-paranoidmsg /
--with-virtualchroot /
--without-shadow /
--with-welcomemsg /
--with-quotas /
--with-sysquotas /
--without-inetd /
--without-banner /
--with-uploadscript /
--with-mysql=/usr/local/modules/support/mysql

#安装程序好象“忘记”这两个文件了
cp configuration-file/pure-ftpd.conf /usr/local/modules/support/pure-ftpd/etc
cp configuration-file/pure-config.pl /usr/local/modules/support/pure-ftpd/sbin
chmod 755 /usr/local/modules/support/pure-ftpd/sbin/pure-config.pl

8.2.配置主配置文件
#程序在/usr/local/modules/support/pure-ftpd/sbin/pure-ftpd,配置文件在/usr/local/modules/support/pure-ftpd/etc/pure-ftpd.conf
#注意一下参数,配置文件中默认的文件位置不对(其实放哪里看自己喜欢罢了);
#vi /usr/local/modules/support/pure-ftpd/etc/pure-ftpd.conf

#begin of pure-ftpd.conf
############################################################
#                                                          #
#         Configuration file for pure-ftpd wrappers        #
#                                                          #
############################################################
ChrootEveryone              yes
BrokenClientsCompatibility  yes
MaxClientsNumber            150
Daemonize                   yes
MaxClientsPerIP             20
VerboseLog                  no
DisplayDotFiles             no
AnonymousOnly               no
NoAnonymous                 no
SyslogFacility              ftp
DontResolve                 yes
MaxIdleTime                 5
MySQLConfigFile             /usr/local/modules/support/pure-ftpd/etc/pureftpd-mysql.conf
#PureDB                      /usr/local/modules/support/pure-ftpd/etc/pureftpd.pdb
LimitRecursion              2000 8
AnonymousCanCreateDirs      no
MaxLoad                     4
PassivePortRange            40000 50000
#ForcePassiveIP             192.168.0.1
AntiWarez                   yes
# Bind                      127.0.0.1,21
#AnonymousBandwidth          50
# UserBandwidth             8
Umask                       133:022
#MinUID                     100
MinUID                      100
AllowUserFXP                yes
AllowAnonymousFXP           no
ProhibitDotFilesWrite       no
ProhibitDotFilesRead        no
AutoRename                  no
AnonymousCantUpload         yes
#NoChmod                    yes
#Quota                      1000:10
PIDFile                     /usr/local/modules/support/pure-ftpd/var/run/pure-ftpd.pid
AltLog                      w3c:/usr/local/modules/support/pure-ftpd/var/log/pure-ftpd-w3c.log
MaxDiskUsage                95
CustomerProof           yes
#end of pure-ftpd.conf

###日志设置
###没有这一行,ftp日志就会发到/var/log/messages,很讨厌的说。
echo "ftp.*          /usr/local/modules/support/pure-ftpd/var/log/pure-ftpd.log" >> /etc/syslog.conf
###
touch /usr/local/modules/support/pure-ftpd/var/log/pure-ftpd-w3c.log
touch /usr/local/modules/support/pure-ftpd/var/log/pure-ftpd.log

#使日志设置生效;
killall -HUP syslogd

#####
#用phpMyAdmin 创建用户配置 ###
user:pureftpd@localhost
passwd:wahaha
database:pureftpd

################为了使用 PureFTPD PHP User Management #####
###mysql 的设置是按照PureFTPD PHP User Management的readme作的。
##
################
http://www.solariz.de
http://www.solariz.de/Ffiledb/filedb.php?action=category&id=1

http://www.solariz.de/Ffiledb/download.php?id=1


#mysql 配置文件。
#vi /usr/local/modules/support/pure-ftpd/etc/pureftpd-mysql.conf
#
# If you want to use the Socket connect methode comment out the
# Lines with MMYSQLServer and MYSQLPort.
# If you want to use the Port methode comment out the MYSQLSocket line
#MYSQLSocket     /var/lib/mysql/mysql.sock
MYSQLServer     localhost
MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   wahaha
MYSQLDatabase   pureftpd
MYSQLCrypt      cleartext
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="/L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="/L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="/L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="/L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="/L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="/L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="/L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="/L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "/R")
#end of mysql configure.



#####数据库初始化 ####用phpmyadmin 执行
      use pureftpd;
      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;
####

####
8.5.虚拟用户管理

#为匿名用户设置帐户,必须有一个系统帐户ftp,匿名ftp才会生效;
#ftp用户的主目录就是匿名ftp的根;
#匿名ftp是为ftp://ftp.anti-spamming.com这个匿名服务器服务的;
userdel ftp
groupdel ftp
groupadd ftp
useradd -g ftp ftp

#虚拟用户统一用这个帐号和组;
pw groupadd virtual
mkdir -p /data/home/virtual
pw useradd virtual -g virtual -d /data/home/virtual -s /sbin/nologin
chown -R virtual:virtual /data/home/virtual
#为了方便管理,clone一个可以登陆的virtual帐号:
#vipw
virtual:x:503:503::/data/home/virtual:/sbin/nologin
vvuser:x:503:503::/data/home/virtual:/bin/sh
#end

#end
修改密码
passwd vvuser

################为了使用 PureFTPD PHP User Management #####
###mysql 的设置是按照PureFTPD PHP User Management的readme作的。
http://www.solariz.de
http://www.solariz.de/Ffiledb/filedb.php?action=category&id=1

http://www.solariz.de/Ffiledb/download.php?id=1
###
cd /usr/local/modules/support/apache/htdocs
fetch ftp://172.16.100.245/pub/distfiles/pureftpd_php_manager.tgz
tar xfz pureftpd_php_manager.tgz
rm -f pureftpd_php_manager.tgz
cd pureftpd_php_manager
#vi pureftp.config.php
<?php
######################
####### SETUP ########
######################

        // Your exactly located mysql config file for pureftpd
        //$PUREFTP_CONFIG_FILE  = '/etc/pureftpd-mysql.conf';
        $PUREFTP_CONFIG_FILE    = '/usr/local/modules/support/pure-ftpd/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";
        $FTP_WHO                                = "/usr/local/modules/support/pure-ftpd/sbin";

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

        $DefaultUser = "";              # Default User Logon
        $DefaultPass = "";                      # Default User Password
        $DefaultUid = "virtual";                        # Default User ID ( must be a real user acct )
       $DefaultGid = "virtual";                    # Default Group ID ( must be a real group acct )
       $DefaultDir = "/data/home/virtual";                           # 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 = "10240";                   # Default Quota Size ( 0 disables it )
        $Defaultcmt = "New ftp user";                           # Default Comment for user

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


http://172.16.100.249:9180/pureftpd_php_manager

###############               
   NOTE:
   If you want to use VirtualQuaotas your PureFTPD must be
   compiled with the "--with-quotas" option.
   Else it is better to comment out the line
   beginning with MySQLGetQTASZ in the  pureftpd-mysql.conf
   file or some errors can occure while launching pureftpd.

   2nd NOTE:
   To set up the PureFTP Who display tool you must set chmod 4711
   to yout pure-ftpwho command. Get sure that the Pure-FTPWho command
   is executable in this directory: /usr/local/sbin/
   If this isn't the directory where you're binary is installed please setup a
   symbolic Link.  ln -s /usr/local/sbin/pure-ftpwho <path and name of your
   pure-ftpwho file>


#################
##由于php_manager创建用户时并不创建对应的用户目录,使用如下脚本来进行用户创建工作,php_manager 只用于管理
#vi /usr/local/modules/support/pure-ftpd/bin/vvadduser

#!/bin/sh
#警告:没有任何错误检查
V_BASE="/data/home/virtual"
R_USER="virtual"
R_GROUP="virtual"

#set by user.
V_USERNAME=""
V_PASSWD=""

HTTP_ROOT="public_html"
HTTPS_ROOT="https"
HTTP_CGI="cgi-bin"
HTTPS_CGI="cgi-bins"
V_SETTINGS="settings"

MYSQL_HOME=/usr/local/modules/support/mysql
MYSQL_CLIENT=$MYSQL_HOME/bin/mysql

MYSQL_USER=GET_FROM_CFG
MYSQL_PASSWD=GET_FROM_CFG
MYSQL_DB=GET_FROM_CFG
MYSQL_HOST=GET_FROM_CFG
MYSQL_PORT=GET_FROM_CFG

PURE_TABLE=ftpd
PURE_MYSQL_CFG=/usr/local/modules/support/pure-ftpd/etc/pureftpd-mysql.conf
#PURE_PW="/usr/local/modules/support/pure-ftpd/bin/pure-pw"

MYSQL_USER=`grep -v '#' $PURE_MYSQL_CFG | grep '^MYSQLUser' | awk '{ print $2 }' `
if [ -z $MYSQL_USER ]
then
        echo "Error:probe mysql user name from $PURE_MYSQL_CFG fail."
        exit 1
fi

MYSQL_PASSWD=`grep -v '#' $PURE_MYSQL_CFG | grep '^MYSQLPassword' | awk '{ print $2 }' `
if [ -z $MYSQL_PASSWD ]
then
        echo "Error:probe mysql password from $PURE_MYSQL_CFG fail."
        exit 1
fi

MYSQL_DB=`grep -v '#' $PURE_MYSQL_CFG | grep '^MYSQLDatabase' | awk '{ print $2 }' `
if [ -z $MYSQL_DB ]
then
        echo "Error:probe mysql database $PURE_MYSQL_CFG fail."
        exit 1
fi

MYSQL_HOST=`grep -v '#' $PURE_MYSQL_CFG | grep '^MYSQLServer' | awk '{ print $2 }' `
if [ -z $MYSQL_HOST ]
then
        echo "Error:probe mysql host from $PURE_MYSQL_CFG fail."
        exit 1
fi

MYSQL_PORT=`grep -v '#' $PURE_MYSQL_CFG | grep '^MYSQLPort' | awk '{ print $2 }' `
if [ -z $MYSQL_PORT ]
then
        echo "Error:probe mysql port from $PURE_MYSQL_CFG fail."
        exit 1
fi

if [ -z $1 ]
then
        #$PURE_PW mkdb
        echo "Usage: $0 <Virtual user name>"
        exit 1
fi

V_USERNAME=$1
O_TTY=`stty -g`
stty -echo
echo -n "Enter password for Virtual user $V_USERNAME:"
read _PW_A
echo -n "Enter password again:"
read _PW_B
stty $O_TTY
#echo "A=$_PW_A ,B=$_PW_B"
if [ "$_PW_A" != "$_PW_B" ]
then
        echo "Error:Password mismatch."
        exit 1
fi
V_PASSWD=$_PW_A

User=$V_USERNAME
Password=$V_PASSWD
Uid=$R_USER
Gid=$R_GROUP
# 0,for inactive,1 for active.
Dir="$V_BASE/$V_USERNAME/./"
status=0
# Default Upload Throttle ( 0 disables it )
ULThrottle=0
# Default Download Throttle ( 0 disables it )
DLThrottle=0
comment="New ftp user $V_USERNAME"
# Default IP restrictions  ( * = any IP )
ipaccess="*"
# Default Quota Size ( 0 disables it )
QuotaSize=100
# Default Quota file count ( 0 disables it )
QuotaFiles=4096

MYSQL_CONN="$MYSQL_CLIENT --silent --host=$MYSQL_HOST --port=$MYSQL_PORT --user=$MYSQL_USER --password=$MYSQL_PASSWD --database=$MYSQL_DB "
INSERT_USER="INSERT INTO $PURE_TABLE SET User='$User',status='$status',Password='$Password',Uid='$Uid',Gid='$Gid',Dir='$Dir',ULBandwidth='$ULThrottle',DLBandwidth='$DLThrottle',comment='$comment',ipaccess='$ipaccess',QuotaSize='$QuotaSize',QuotaFiles='$QuotaFiles';"
#No update support in adduser script.
UPDATE_USER="UPDATE $PURE_TABLE SET User='$User',status='$status',Password='$Password',Uid='$Uid',Gid='$Gid',Dir='$Dir',ULBandwidth='$ULThrottle',DLBandwidth='$DLThrottle',comment='$comment',ipaccess='$ipaccess',QuotaSize='$QuotaSize',QuotaFiles='$QuotaFiles';"

$MYSQL_CONN <<MADAY
$INSERT_USER
commit;

MADAY

if [ $? -ne 0 ]
then
        echo "Error:Database insert fail."
        echo "MYSQL_CONN=$MYSQL_CONN"
        echo "INSERT_USER=$INSERT_USER"
        echo "UPDATE_USER=$UPDATE_USER"
        exit 1
fi

#END of mysql insert.
#$PURE_PW useradd $V_USERNAME -u $R_USER -d $V_BASE/$V_USERNAME
#更新puredb;
#$PURE_PW mkdb
mkdir -p $V_BASE/$V_USERNAME/$HTTP_ROOT
#http web cgi 目录;
mkdir -p $V_BASE/$V_USERNAME/$HTTP_CGI
#https web 根目录;
mkdir -p $V_BASE/$V_USERNAME/$HTTPS_ROOT
#http web cgi 目录;
mkdir -p $V_BASE/$V_USERNAME/$HTTPS_CGI
#虚拟用户设置、日志文件目录;
mkdir -p $V_BASE/$V_USERNAME/$V_SETTINGS
mkdir -p $V_BASE/$V_USERNAME/$V_SETTINGS/apache/log
mkdir -p $V_BASE/$V_USERNAME/$V_SETTINGS/apache/ca
chmod 777 $V_BASE/$V_USERNAME/$V_SETTINGS/apache/log
chown -R $R_USER:$R_GROUP $V_BASE/$V_USERNAME
if [ $status -eq 0 ]
then
   echo "warning:User $V_USERNAME is inactive now,use PureFTP User PHP Management to modify it."
fi
echo "all over."
#end

chmod 755 /usr/local/modules/support/pure-ftpd/bin/vvadduser
ln -s /usr/local/modules/support/pure-ftpd/bin/vvadduser /usr/local/sbin

8.4.简单的启动关闭shell;
#vi /usr/local/modules/support/pure-ftpd/sbin/pure-config.pl
#指定pure-ftpd的位置。
my $PUREFTPD;
-x && ($PUREFTPD=$_, last) for qw(
   #指定pure-ftpd的位置。
        /usr/local/modules/support/pure-ftpd/sbin/pure-ftpd
);

#使用如下perl脚本将配置文件转化为命令行参数,并启动pure-ftpd;
/usr/local/modules/support/pure-ftpd/sbin/pure-config.pl /usr/local/modules/support/pure-ftpd/etc/pure-ftpd.conf

/usr/local/modules/support/pure-ftpd/sbin/pure-ftpd -A -b -c150 -B -C20 -fftp -H -I5 -lmysql:/usr/local/modules/support/pure-ftpd/etc/pureftpd-mysql.conf -L2000:8 -m4 -p40000:50000 -s -U133:022 -u100 -w -i -g/usr/local/modules/support/pure-ftpd/var/run/pure-ftpd.pid -Ow3c:/usr/local/modules/support/pure-ftpd/var/log/pure-ftpd-w3c.log -k95 -Z
##添加-4参数,可以使ftp只在tcpv4监听。

#开机自动执行的脚本:

#vi /usr/local/modules/support/pure-ftpd/bin/support-pure-ftpd-mgr.sh

#!/bin/sh
case "$1" in

start)
        if [ -x /usr/local/modules/support/pure-ftpd/sbin/pure-config.pl ]; then
                /usr/local/modules/support/pure-ftpd/sbin/pure-config.pl /usr/local/modules/support/pure-ftpd/etc/pure-ftpd.conf && echo 'Pure-ftpd server started.'
        else
           echo "Error:pure-config.pl can not exec."
           exit 1
        fi
        ;;

stop)
        kill `cat /usr/local/modules/support/pure-ftpd/var/run/pure-ftpd.pid 2>/dev/null` >/dev/nul 2>&1 && echo 'Pure-ftpd server stopped.'
        ;;
restart)
        echo .
        echo Restart Pure-ftpd server ......
        $0 stop                     
        sleep 5
        $0 start                     
        ;;
*)
        echo "$0 start | stop | restart"
        ;;

esac
#end of support-pure-ftpd-mgr.sh

chmod 755 /usr/local/modules/support/pure-ftpd/bin/support-pure-ftpd-mgr.sh
ln -s /usr/local/modules/support/pure-ftpd/bin/support-pure-ftpd-mgr.sh /usr/local/sbin/
ln -s /usr/local/sbin/support-pure-ftpd-mgr.sh /usr/local/etc/rc.d

#end