发新话题
打印

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

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

################## 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

TOP

发新话题