免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 24250 | 回复: 44
打印 上一主题 下一主题

[FreeBSD] FreeBSD扫盲之pureftpd+web界面管理 [复制链接]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-09 18:44 |只看该作者 |倒序浏览
1:安装pureftpd
pw groupadd ftpusers -g 1001
pw adduser ftpusers -u 1001 -g ftpusers -d /usr/www -s /sbin/nologin
chown ftpusers:ftpusers /usr/www
##其中用户、组、/usr/www等可根据自己的实际情况选择

tar jxvf pure-ftpd-1.0.20.tar.bz2
cd pure-ftpd-1.0.20
./configure --prefix=/usr/local/pureftpd --with-mysql --with-paranoidmsg --with-shadow --with-welcomemsg --with-uploadscript --with-quotas --with-cookie --with-virtualhosts --with-virtualroot --with-diraliases --with-sysquotas --with-ratios --with-ftpwho --with-throttling  --with-altlog --with-language=simplified-chinese
make
make install
#########################################
以前用pureftpd的时候还不知道最好用ports安装,所以一直自己编译安装,现在要装,最好用ports安装。
cd /usr/ports/ftp/pure-ftpd
ee Makefile
改成这样就行了:
  1. CONFIGURE_ARGS=         --with-everything \
  2.                         --with-paranoidmsg \
  3.                         --with-virtualchroot \
  4.                         --with-tls \
  5.                         --with-largefile \
  6.                         --sysconfdir=${PREFIX}/etc
复制代码

然后make install clean即可。
注:多谢benbenblood 兄提示,原来写的不够清楚,容易误导大家 :em06:
######################################

mkdir /usr/local/pureftpd/etc
cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/pure-ftpd.conf
cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/pure-config.pl
chmod u+x /usr/local/pureftpd/sbin/pure-config.pl


ee /usr/local/pureftpd/etc/pure-ftpd.conf
可参考其他文章进行设置,需要注意的是:
BrokenClientsCompatibility  YES
#如果不设置的话,用IE登陆时.ftpquota会不计数,用户的磁盘配额将不起作用。
# MySQL configuration file (see README.MySQL)
# pureftpd-mysql.conf文件的位置
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
##这个文件的地方一定要写对

2:安装pureftpd_php_manager
tar zxvf pureftpd_php_manager.tar.gz
cp -R pureftpd_php_manager /usr/www/phpmanager
#或者直接mv,/usr/www目录为apache的主目录,如果不同请更换
find /usr/www/phpmanager -type d -exec chmod 755 {} \;
find /usr/www/phpmanager -type f -exec chmod 644 {} \;
cd /usr/www/phpmanager/
cp pureftpd-mysql.conf.sample /usr/local/pureftpd/etc/pureftpd-mysql.conf


ee /usr/local/pureftpd/etc/pureftpd-mysql.conf

#MYSQLSocket     /var/lib/mysql/mysql.sock
MYSQLServer     localhost
MYSQLPort       3306
MYSQLUser       pureftpd
##注意此处的用户要和后面在数据库中添加的一致
MYSQLPassword   abcdefg
##注意此处的密码要和后面在数据库中添加的一致
MYSQLDatabase   pureftpd
##注意此处的数据库名字要和后面在数据库中添加的一致
MYSQLCrypt      md5
##如果是默认的pureftpd_php_manager则不能用md5,要用crypt或者cleartext,不管是crypt还是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")
###############################################

ee /usr/www/phpmanager/pureftp.config.php

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

        // Your exactly located mysql config file for pureftpd
        $PUREFTP_CONFIG_FILE    = '/usr/local/pureftpd/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 #
#######################

        $DefaultUser = "";              # Default User Logon
        $DefaultPass = "";                      # Default User Password
        $DefaultUid = "1001";                   # Default User ID ( must be a real user acct )
##此处填上安装pureftpd的时候添加的用户id
    $DefaultGid = "1001";                       # Default Group ID ( must be a real group acct )
##此处填上安装pureftpd的时候添加的用户组id
    $DefaultDir = "/usr/www";                           # Default User Dir ( use /./ at the end to chroot )
        $DefaultUL = "2000";                            # Default Upload Throttle ( 0 disables it )
        $DefaultDL = "2000";                            # Default Download Throttle ( 0 disables it )
        $Defaultip = "*";                               # Default IP restrictions  ( * = any IP )
        $DefaultQS = "2000";                    # Default Quota Size ( 0 disables it )
        $Defaultcmt = "";                               # Default Comment for user

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


   
mysql -u root -p

mysql>;
drop database pureftpd;

CREATE DATABASE pureftpd;

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;

grant all privileges on pureftpd.* to pureftpd@localhost identified by 'abcdefg';
##grant all privileges on 你刚建立的数据库名称.* to 你要建的mysql用户名称@localhost identified by 'mysql新用户密码'

FLUSH PRIVILEGES;   
##重载受权表

3:启动pureftpd
/usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf

为了以后方便的进行Ftp服务的管理,我自己在/usr/local/etc/rc.d中新建了一个pureftpd.sh文件。

ee /usr/local/etc/rc.d/pureftpd.sh

#!/bin/sh

case "$1" in
       start)
               if [ -f /usr/local/pureftpd/etc/pure-ftpd.conf ]; then
                       /usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf >; /dev/null 2>;&1 && echo -n 'pure-ftpd Begin!'
               fi
               ;;
       stop)
               /usr/bin/killall pure-ftpd >; /dev/null 2>;&1 && echo -n 'pure-ftpd Stop!'
               ;;
       *)
               echo ""
               echo "Usage: `basename $0` { start | stop }"
               echo ""
               exit 64
               ;;
esac


设置该文件的可执行权限
chmod u+x /usr/local/etc/rc.d/pureftpd.sh
以后可以用下列命令启动PureFTPd服务
/usr/local/etc/rc.d/pureftpd.sh start
用下列命令停止PureFTPd服务
/usr/local/etc/rc.d/pureftpd.sh stop

让它开机自动启动,在/etc/rc.conf里面加入pureftpd_enable="YES"或者不加也可以。

4:web界面管理
安装了pureftpd_php_manager以后就可以通过http://你的域名或ip/phpmanager/index.php来添加、删除用户了。[/code]

要下载pureftpd_php_manager.tar.gz,请在下面没有显示出的图片上点鼠标右键,将那个链接复制,用flashget、迅雷等软件下载,把后面的.jpg去掉即可。

[ 本帖最后由 大大狗 于 2006-12-18 14:31 编辑 ]

pureftpd_php_manager.tar.gz.jpg

25.59 KB, 下载次数: 5867

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
2 [报告]
发表于 2005-08-09 18:51 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

5:用户密码问题md5?crypt?
没有修改过的pureftpd_php_manager/index.php文件内容为:
  1. <?
  2. // Aenderungen 25.5. Uwe Ahrendt
  3. // www.bildpartner.de

  4. // READ THE README !!!
  5. /****************************************************
  6. * PureFTP - PHP USer Manager by solariz                       
  7. * Soruce (c) 2002 - www.solariz.de                                       
  8. ****************************************************
  9. * Please read the General Public License                       
  10. * ENGLISH: http://www.gnu.org/licenses/gpl.html       
  11. * GERMAN : http://www.gnu.de/gpl-ger.html                       
  12. ****************************************************
  13. CheckOut:  http://www.solariz.de
  14. */

  15. include("pureftp.config.php");

  16. #################################################################
  17. ############### NO NEED FOR CHANGES BELOW HERE ##################
  18. #################################################################
  19. // Config einlesen
  20.         if(!file_exists($PUREFTP_CONFIG_FILE)) DIE("FATAL ERROR: Pure FTPD Config file not found.<br />;$PUREFTP_CONFIG_FILE");
  21.         $USERARRAY = array();
  22.         $raw = file($PUREFTP_CONFIG_FILE);
  23.         foreach($raw AS $zeile):
  24.                 if(!ereg("^#",$zeile)): #skip comments
  25.                         // Einlesen der einzelnen Zeilen als Variable
  26.                                 $tmp = split(" ",trim($zeile));
  27.                                 // UNIX Tab workaround
  28.                                 if(count($tmp) < 2)
  29.                                         $tmp = explode("\t",trim($zeile));
  30.                                 $var = strtoupper(trim($tmp[0]));
  31.                                 for($n=1;$n<count($tmp);++$n) {
  32.                                         if(!empty($tmp[$n])) {
  33.                                                 $$var = trim($tmp[$n]);
  34.                                                 break;
  35.                                         }#end if
  36.                                 }#end for
  37.                         // Einlesen der Tabelle
  38.                                 if(empty($DB_TABLE) AND eregi("FROM\ [[:alnum:]]{1,20}\ WHERE",$zeile)):
  39.                                         $tmp2 = split("FROM ",$zeile);
  40.                                         $tmp2 = split(" WHERE",trim($tmp2[1]));
  41.                                         $DB_TABLE = trim($tmp2[0]);
  42.                                         unset($tmp2);
  43.                                 EndIF;
  44.                 EndIf;
  45.         EndForEach;
  46.         if(empty($MYSQLSERVER)) $MYSQLSERVER = "localhost";
  47.         if(empty($DB_TABLE))        DIE("ERROR: Config error in pureftpd config file. No table specified.");
  48. // UA
  49.         if ($MYSQLCRYPT == "crypt") {$PW = TRUE;} else {$PW = FALSE;}

  50. // Aktual Version
  51.         $VERSION = "2.23";
  52.         $BUILD                = "1017";

  53. // Setein header
  54.         PAGE_HEADER();

  55. // SQL Connection herstellen
  56.         DB_OPEN();
  57.        

  58. // FORM SUBIT AUSWERTUNG // Globals
  59.         $action                = get_var("action");
  60.         $user                = get_var("user");

  61. if( $action == "edit" || $action == "add" ) {
  62.         // ADD value setter

  63.                 if($action == "add"):
  64.                                 $USERARRAY['User']                = $DefaultUser;
  65. // UA                       
  66.                                 if ($PW) {$USERARRAY['Password']        = crypt($DefaultPass,$PWC); }
  67.                                         else {$USERARRAY['Password']        = $DefaultPass; }
  68.                                 $USERARRAY['Password']        = $DefaultPass;
  69.                                 $USERARRAY['Uid']                = $DefaultUid;
  70.                                 $USERARRAY['Gid']                = $DefaultGid;
  71.                                 $USERARRAY['Dir']                = $DefaultDir;
  72.                                 $USERARRAY['ULBandwidth']        = $DefaultUL;
  73.                                 $USERARRAY['DLBandwidth']        = $DefaultDL;
  74.                                 $USERARRAY['ipaccess']        = $Defaultip;
  75.                                 $USERARRAY['QuotaSize']        = $DefaultQS;
  76. // UA
  77.                                 $USERARRAY['QuotaFiles']        = $DefaultQF;
  78.                 $USERARRAY['comment']        = $Defaultcmt;
  79.                                 else:
  80.                                 unset($USERARRAY);
  81.                 EndIf;

  82.                 if(!empty($user) AND $user != "0") {
  83.                                 $USERARRAY=@MYSQL_FETCH_ARRAY(DB_QUERY("SELECT * FROM `$DB_TABLE` WHERE User LIKE '$user'"));
  84.                 }#end if
  85.                 if(!is_array($USERARRAY)) DIE("User Not found or DB error.<br />;".mysql_error());

  86.         echo '<form method=post action="'.$SELF_URL.'" onSubmit="return checkrequired(this)">;';

  87.         if(!empty($user))        echo '<input type="hidden" name="requireduser" value="'.stripslashes($USERARRAY['User']).'">;';
  88.         else                                                echo '<input type="hidden" name="addnew" value="True">;';
  89.         echo '<input type="hidden" name="action" value="save">;';
  90.         echo '<table width="100%" class=TABLE>;';
  91.         echo '<tr>;<th>;Status</th>;<td class=TD>;<input type="radio" name="status" value="0"';
  92.         if($USERARRAY['status'] == 0) echo ' checked';
  93.         echo '>; Inactive&&&<input type="radio" name="status" value="1"';
  94.         if($USERARRAY['status'] == 1) echo ' checked';
  95.         echo '>; Active</td>;</tr>;';

  96.         if(!empty($user))        {
  97.                 echo '<tr>;<th>;Delete user ?</th>;<td class=TD>;<input type="checkbox" name="delete">; Yes, i am know exactly what i am doing! (NO UNDO)</td>;</tr>;';
  98.                 echo '<tr>;<th>;Username</th>;<td class=TD>;'.stripslashes($USERARRAY['User']).'</td>;</tr>;';
  99.         }

  100.         else

  101.         echo '<tr>;<th>;Username</th>;<td class=TD>;<input type="text" name="requireduser" class="input">;</td>;</tr>;';
  102.           echo '<tr>;';
  103.         echo '<th>;Password</th>;';
  104. // UA
  105.         if ($PW) {
  106.                 echo '<td class=TD>;<input type="text" name="requiredpass" value="<crypted>;" class="input">;</td>;</tr>;';
  107.         } else {
  108.                 echo '<td class=TD>;<input type="text" name="requiredpass" value="'.stripslashes($USERARRAY['Password']).'" class="input">;</td>;</tr>;';
  109.         }
  110.         echo '<tr>;<th>;UID</th>;<td class=TD>;<input type="text" name="requireduid" value="'.stripslashes($USERARRAY['Uid']).'" class="input">;</td>;</tr>;';
  111.         echo '<tr>;<th>;GID</th>;<td class=TD>;<input type="text" name="requiredgid" value="'.stripslashes($USERARRAY['Gid']).'" class="input">;</td>;</tr>;';
  112.         echo '<tr>;<th>;DIR</th>;<td class=TD>;<input type="text" name="requireddir" value="'.stripslashes($USERARRAY['Dir']).'" class="input">;</td>;</tr>;';
  113.     echo '<tr>;<th>;UL Throttle kb/s</th>;<td class=TD>;<input type="text" name="requiredulthrottle" value="'.stripslashes($USERARRAY['ULBandwidth']).'" class="input">;</td>;</tr>;';
  114.     echo '<tr>;<th>;DL Throttle kb/s</th>;<td class=TD>;<input type="text" name="requireddlthrottle" value="'.stripslashes($USERARRAY['DLBandwidth']).'" class="input">;</td>;</tr>;';
  115.         echo '<tr>;<th>;IP ACCESS</th>;<td class=TD>;<input type="text" name="requiredipaccess" value="'.stripslashes($USERARRAY['ipaccess']).'" class="input">;<br />;<small>;Type in <b>;*</b>; for any IP</td>;</tr>;';
  116. // UA
  117.         echo '<tr>;<th>;QuotaSize in MB</th>;<td class=TD>;<input type="text" name="requiredQuotaSize" value="'.stripslashes($USERARRAY['QuotaSize']).'" class="input">;<br />;<small>;Type in <b>;0</b>; for NO VirtualQuotaSize</td>;</tr>;';
  118. // UA
  119.         echo '<tr>;<th>;QuotaFiles Anzahl</th>;<td class=TD>;<input type="text" name="requiredQuotaFiles" value="'.stripslashes($USERARRAY['QuotaFiles']).'" class="input">;<br />;<small>;Type in <b>;0</b>; for NO VirtualQuotaFiles</td>;</tr>;';
  120.         echo '<tr>;<th>;COMMENT</th>;<td class=TD>;<textarea name="comment" rows="6" cols="20" class="input">;'.stripslashes($USERARRAY['comment']).'</textarea>;</td>;</tr>;';
  121.         echo '</table>;';
  122.         echo '<center>;<input type="submit" value="Save" class="button" width="100%">;</center>;</form>;';
  123. }#end edit

  124. elseif($action == "save") {
  125.         $addnew                = addslashes( get_var("addnew") );
  126.         $User                = addslashes(get_var("requireduser"));
  127.        
  128.         // UA - MG Optimized ;)
  129.         $Password = addslashes(get_var("requiredpass"));

  130.         IF($Password == '<crypted>;')        $Password = '';
  131.         ELSEif($PW)                                                $Password = crypt($Password, $PWC);

  132.         $Uid                = addslashes(get_var("requireduid"));
  133.         $Gid                = addslashes(get_var("requiredgid"));
  134.         $Dir                = addslashes(get_var("requireddir"));
  135.     $ULThrottle        = addslashes(get_var("requiredulthrottle"));
  136.     $DLThrottle        = addslashes(get_var("requireddlthrottle"));
  137.         $QuotaSize        = addslashes(get_var("requiredQuotaSize"));
  138. // UA
  139.         $QuotaFiles        = addslashes(get_var("requiredQuotaFiles"));
  140.         $comment        = addslashes(get_var("comment"));
  141.         $status                = addslashes(get_var("status"));
  142.         $delete                = addslashes(get_var("delete"));
  143.         $ipaccess   = addslashes(get_var("requiredipaccess"));
  144.         if(empty($User) ||  empty($Uid) || empty($Gid) || empty($Dir)) DIE("Invalid or missing data entered...");
  145.         if(empty($delete)) {
  146.                 // Mini workarounds
  147.                         if($Password)        $PW_QUERY = ",Password='$Password'";
  148.                         if(!$status)                $status = (string) '0';
  149.                         if(!$ULBandwidth)        $ULBandwidth = (string) '0';
  150.                         if(!$DLBandwidth)        $DLBandwidth = (string) '0';
  151.                         if(!$QuotaSize)                $QuotaSize = (string) '0';
  152.                         if(!$QuotaFiles)        $QuotaFiles = (string) '0';
  153.                 if($addnew == False) {
  154.                         $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";
  155.                         $Q                = DB_QUERY($SQL);
  156.                         if($Q)        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nalert(\"User updated.\");\n//-->;\n</SCRIPT>;\n";
  157.                 }#end if
  158.                 else{
  159.                         $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'");
  160.                         if($Q)        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nalert(\"User added.\");\n//-->;\n</SCRIPT>;\n";
  161.                 }#end if

  162.         }#end if
  163.         elseif($User && !empty($delete)){#DELETE
  164.                         $Q                = DB_QUERY("DELETE FROM `$DB_TABLE` WHERE User LIKE '$User' LIMIT 1");
  165.                         if($Q)        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nalert(\"User deleted.\");\n//-->;\n</SCRIPT>;\n";
  166.         }#end if
  167.         echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nopener.location.reload();close();\n//-->;\n</SCRIPT>;\n";
  168. }#end else (save)

  169. ######
  170. elseif($action == "ftpwho") {

  171. echo '<table border="4">;';
  172. exec($FTP_WHO." -s", $ftpresult );
  173. $arraySize = sizeof($ftpresult);
  174. $x = 0;
  175. echo '<table width="100%" class=TABLE>;';
  176. echo '<th class=THsmall>;PID</td>;';
  177. echo '<th class=THsmall>;user</td>;';
  178. echo '<th class=THsmall>;min\'s</td>;';
  179. echo '<th class=THsmall>;state</td>;';
  180. echo '<th class=THsmall>;file</td>;';
  181. echo '<th class=THsmall>;IP</td>;';
  182. echo '<th class=THsmall>;current</td>;';
  183. echo '<th class=THsmall>;total</td>;';
  184. echo '<th class=THsmall>;%</td>;';
  185. echo '<th class=THsmall>;bw.</td>;';
  186. while($x < $arraySize):
  187.          $ftpwho = $ftpresult[$x];
  188.          list($pid, $user, $mins, $state, $file, $host, $port,$h, $current, $total, $percent, $bandwidth ) = explode("|", $ftpwho );
  189.          $mins = round($mins / 60);
  190.          if (empty($file) or !isset($file)) {
  191.                  ( $file = "---" );
  192.                  ++$ftp_activity;
  193.          }
  194.          else {
  195.                 if(strlen($file) >; 10)
  196.                         $file_short = substr($file,0,10);
  197.                         $file = "<a href=\"#\" onClick=\"javascript:alert('$file');\">;$file_short...</a>;";
  198.          }#end else
  199.          $host = gethostbyname($host);
  200.                 echo '<tr>;';
  201.                 echo '<td class=TDsmall>;' .$pid. '</td>;';
  202.                 echo '<td class=TDsmall>;' .$user. '</td>;';
  203.                 echo '<td class=TDsmall>;' .$mins. '</td>;';
  204.                 echo '<td class=TDsmall>;' .$state. '</td>;';
  205.                 echo '<td class=TDsmall>;' .$file. '</td>;';
  206.                 echo '<td class=TDsmall>;' .$host. '</td>;';
  207.                 echo '<td class=TDsmall>;' .$current. '</td>;';
  208.                 echo '<td class=TDsmall>;' .$total. '</td>;';
  209.                 echo '<td class=TDsmall>;' .$percent. '</td>;';
  210.                 echo '<td class=TDsmall>;' .$bandwidth. ' kb/s</td>;';
  211.                 echo '</tr>;';
  212.           $x++;
  213. EndWhile;
  214. echo '</table>;';
  215. if(!$ftp_activity) echo 'No users currenty using the FTP.<br>;';

  216. echo '<p>;<center>;<input type=button value=" Close " onclick=self.close()>;';
  217. echo '<input type=button value=" Refresh " onClick=" JavaScript : window.location.reload()">;</center>;';


  218. }#end else (ftpwho)
  219. ######
  220. elseif($action == "info") {
  221. ?>;
  222.         <font color=silver face="Verdana,Arial">;
  223.         <b>;sOLARiZ PureFTPd Manager</b>;<br>;
  224.         Version <?=$VERSION?>; Build <?=$BUILD?>;
  225.         <table width="100%" cellpadding=0 cellspacing=0 bgcolor="#C0C0C0">;
  226.                 <tr>;<td bgcolor="#005279">;<b>;<font color=silver>;About</b>;</td>;</tr>;
  227.                 <tr>;<td>;
  228.                                 <ul>;
  229.                                 <a href="http://www.pureftpd.org" target=_blank>;<img src="gfx/pure-ftpd.png" align=right border=0>;</a>;
  230.                                 Ok, whats to say about this small script ?<br>;
  231.                                 Not much. The Basic version was written due the need of a simply User management for the PureFTPd Daemon.
  232.                                 Now it's more than a simple management script.
  233.                                 </ul>;
  234.                 </td>;</tr>;
  235.                 <tr>;<td bgcolor="#005279">;<b>;<font color=silver>;History</b>;</td>;</tr>;
  236.                 <tr>;<td>;
  237.                                 <ul>;<font face=Arial size=1>;
  238.                                 <?
  239.                                         $raw = file("history.txt");
  240.                                         foreach($raw AS $hline):
  241.                                                         echo stripslashes($hline)."<br>;\n";
  242.                                         EndForEach;
  243.                                 ?>;
  244.                                 </font>;</ul>;
  245.                 </td>;</tr>;
  246.                 <tr>;<td bgcolor="#005279">;<b>;<font color=silver>;Thanks to</b>;</td>;</tr>;
  247.                 <tr>;<td>;
  248.                         <ul>;
  249.                         <li>;<i>;Uwe Ahrendt - www.bildpartner.de</i>; cryptmod & QuotaFiles support
  250.                         <li>;<i>;erevo.com</i>; for detailed bug reporting
  251.                         <li>;<i>;CrowMan</i>; for STATUS modification
  252.                         </ul>;
  253.                 </td>;</tr>;
  254.         </table>;

  255. <?
  256. }
  257. ELSE {
  258. // User auslesen und in Table darstellen
  259.         $viewpw = get_var("viewpw");
  260.         $Q=DB_QUERY("SELECT * FROM `$DB_TABLE` ORDER BY User");
  261.         echo '<table width="100%" class=TABLE>;';
  262.         echo '<tr>;<th>;LOGIN</th>;';
  263.         if($viewpw) echo '<th>;PASSWORD</th>;';
  264. // UA
  265.         echo '<th>;UID</th>;<th>;GID</th>;<th>;DIR</th>;<th>;UL/ks</th>;<th>;DL/ks</th>;<th>;Quota Size</th>;<th>;Quota Files</th>;<th>;IP Access</th>;<th>;Status</th>;<th>;&</th>;</tr>;';
  266.         WHILE($R=MYSQL_FETCH_ARRAY($Q)) {
  267.                 echo '<tr>;';
  268.                 echo '<td class=TD>;'.$R['User'].'</td>;';
  269.                 if($viewpw) echo '<td class=TDPW>;'.$R['Password'].'</td>;';
  270.                 echo '<td class=TD>;'.$R['Uid'].'</td>;';
  271.                 echo '<td class=TD>;'.$R['Gid'].'</td>;';
  272.                 echo '<td class=TD>;'.$R['Dir'].'</td>;';
  273.                 if($R['ULBandwidth'])        echo '<td class=TD>;'.$R['ULBandwidth'].'</td>;';
  274.                 ELSE                                                                echo '<td class=TD>;-</td>;';
  275.                 if($R['DLBandwidth'])        echo '<td class=TD>;'.$R['DLBandwidth'].'</td>;';
  276.                 ELSE                                                                echo '<td class=TD>;-</td>;';
  277.                 if($R['QuotaSize'])        echo '<td class=TD>;'.$R['QuotaSize'].' MB</td>;';
  278.                 ELSE                                                        echo '<td class=TD>;-</td>;';
  279. // UA
  280.                 if($R['QuotaFiles'])        echo '<td class=TD>;'.$R['QuotaFiles'].'</td>;';
  281.                 ELSE                                                        echo '<td class=TD>;-</td>;';
  282.                 echo '<td class=TD>;'.$R['ipaccess'].'</td>;';
  283.                 if($R['status'] == '0')                echo '<td class="inactive">;inactive</td>;';
  284.                 elseif($R['status'] == '1')        echo '<td class="active">;active</td>;';
  285.                 echo "<td width=30 class=TD>;<input type=submit class=button value=edit onClick=\"javascript:fenster('$SELF_URL?action=edit&user=".$R['User']."')\">;</td>;";
  286.                 echo "</tr>;\n";
  287.         }#end while
  288.         echo '</table>;';
  289.         ?>;
  290.                 <table width="100%" class=TABLE2>;
  291.                         <tr>;
  292.                                 <td align=left>;
  293.                                         PureFTP User Management.<br />;
  294.                                         v<?=$VERSION?>; written 2002 by sOLARiZ <br />;
  295.                                         [<a href="javascript:fenster('<?=$SELF_URL?>;?action=info')">;<font color=silver size=1>;Information</font>;</a>;]<br />;
  296.                                 </td>;
  297.                                 <td>;&</td>;
  298.                                 <td align=right valign=top>;
  299.         <?
  300.         // Nav Button stuff
  301.                 echo "<table cellspacing=0 cellpadding=0>;<tr>;";
  302.                 // Add User Button
  303.                                 ECHO "<td>;<input type=\"image\" src=\"gfx/addusr.gif\" class=button onClick=\"javascript:fenster('$SELF_URL?action=add')\">;</td>;";
  304.                 // View Password Button
  305.                                 echo '<form method=post action="'.$PHP_SELF.'">;';
  306.                                 if($viewpw)        echo '<input type="hidden" value=0 name="viewpw">;';
  307.                                 ELSE                                echo '<input type="hidden" value=1 name="viewpw">;';
  308.                                 ECHO '<td>;<input type="image" src="gfx/passwd.gif" value="View Passwords" alt="Toggle Passworddisplay"';
  309.                                 if(!$viewpw) echo ' class=button';
  310.                                 ECHO '>;</td>;';
  311.                                 echo '</form>;';
  312.                 // Status Button
  313.                                 ECHO "<td>;<input type=\"image\" src=\"gfx/status.gif\" class=button onClick=\"javascript:fenster('$SELF_URL?action=ftpwho')\">;</td>;";
  314.                 // Update Button
  315.                                 ECHO "<td>;<input type=\"image\" src=\"gfx/updates.gif\" class=button onClick=\"javascript:fenster('http://www.solariz.de/updates/pureftpdm.php?ver=$VERSION&ab=$BUILD')\">;</td>;";                               
  316.                 echo "</tr>;</table>;";
  317. ########

  318.         echo '</td>;</tr>;</table>;';
  319. }#end else

  320. // SQL Verbindung schliessen
  321.         DB_CLOSE();


  322. // Seite abschliessen
  323. PAGE_FOOTER();







  324. // EOC <--*







  325. // Funktionen

  326.         function PAGE_HEADER() {
  327.                 ?>;<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">;
  328.                         <html lang="en">;
  329.                         <html>;
  330.                         <head>;
  331.                                 <title>; PuRE FTPD - User Managemant </title>;
  332.                                 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">;
  333.                                 <meta name="Generator" content="http://www.EditPlus.com">;
  334.                                 <meta name="Author" content="Marco 'solariz' G鰐ze">;
  335.                                 <meta name="Keywords" content="solariz, pureftp, user, management">;
  336.                                 <meta name="Description" content="Pure FTP User manager">;
  337.                                 <?include("styles.css")?>;
  338.                                 <script language="JavaScript">;
  339.                                 <!--
  340.                                         function fenster( path )
  341.                                         {
  342.                                          MeinFenster =
  343.                                          window.open( path , "usermanager" , "width=600,height=545,dependent=yes,resizable=yes,scrollbars");
  344.                                          MeinFenster.focus();
  345.                                         }

  346.                                         function checkrequired(which){
  347.                                         var pass=true
  348.                                         if (document.images){
  349.                                         for (i=0;i<which.length;i++){
  350.                                         var tempobj=which.elements[i]
  351.                                         if (tempobj.name.substring(0,8)=="required"){
  352.                                         if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)){
  353.                                         pass=false
  354.                                         break
  355.                                         }
  356.                                         }
  357.                                         }
  358.                                         }
  359.                                         if (!pass){
  360.                                         alert("Please fill in ALL fields !\nAfter that try to submit again.")
  361.                                         return false
  362.                                         }
  363.                                         else
  364.                                         return true
  365.                                         }
  366.                                 //-->;
  367.                                 </script>;
  368.                         </head>;
  369.                         <body text=black>;                       
  370.                 <?
  371.         }#end func

  372.         function PAGE_FOOTER() {
  373.                 ?>;</body>;
  374.                         </html>;<?
  375.         }#end func

  376.         function DB_OPEN() {
  377.                 GLOBAL $MYSQLSERVER,$MYSQLUSER,$MYSQLPASSWORD,$MYSQLDATABASE,$MYSQLCON;
  378.                         $MYSQLCON = @mysql_connect($MYSQLSERVER,$MYSQLUSER,$MYSQLPASSWORD);
  379.                         if(!$MYSQLCON OR @mysql_error()) DIE("Can't establish DB connection.<br />;".mysql_error());
  380.                         if(!@mysql_select_Db($MYSQLDATABASE)) DIE("Can't establish DB connection.<br />;".mysql_error());
  381.         }#end func

  382.         function DB_CLOSE() {
  383.                 GLOBAL $MYSQLCON;
  384.                 RETURN @mysql_close($MYSQLCON);
  385.         }#end func

  386.         function DB_QUERY($sql) {
  387.                 GLOBAL $MYSQLCON,$MYSQLDATABASE;
  388.                 $Q = @MySql_DB_query($MYSQLDATABASE,$sql,$MYSQLCON);
  389.                 if(@mysql_error()) DIE("<b>;MySQL Error during Query !</b>;<br />;<br />;[$sql]<br />;".mysql_error());
  390.                 return $Q;
  391.         }#end func

  392.         function get_var($var){
  393.                 GLOBAL $$var;
  394.                 GLOBAL $_POST,$_GET,$HTTP_POST_VAR,$HTTP_GET_VAR;
  395.                 $inhalt = $$var;
  396.                 # This function checks if the _GET or _POST var is set or if an old PHP version used
  397.                 if($_POST[$var]) RETURN $_POST[$var];
  398.                 elseif($HTTP_POST_VAR[$var]) RETURN $HTTP_POST_VAR[$var];
  399.                 elseif($_GET[$var]) RETURN $_GET[$var];
  400.                 elseif($HTTP_GET_VAR[$var]) RETURN $HTTP_GET_VAR[$var];
  401.                 elseif($inhalt) RETURN $inhalt;
  402.         }#end func
  403. ?>;

复制代码

这个文件下的话将不能将用户密码设置为md5,只需要修改为如下的内容即可:
<?
// Aenderungen 25.5. Uwe Ahrendt
// www.bildpartner.de

// READ THE README !!!
/****************************************************
* PureFTP - PHP USer Manager by solariz                       
* Soruce (c) 2002 - www.solariz.de                                       
****************************************************
* Please read the General Public License                       
* ENGLISH: http://www.gnu.org/licenses/gpl.html       
* GERMAN : http://www.gnu.de/gpl-ger.html                       
****************************************************
CheckOut:  http://www.solariz.de
*/

include("pureftp.config.php");

#################################################################
############### NO NEED FOR CHANGES BELOW HERE ##################
#################################################################
// Config einlesen
        if(!file_exists($PUREFTP_CONFIG_FILE)) DIE("FATAL ERROR: Pure FTPD Config file not found.<br />;$PUREFTP_CONFIG_FILE");
        $USERARRAY = array();
        $raw = file($PUREFTP_CONFIG_FILE);
        foreach($raw AS $zeile):
                if(!ereg("^#",$zeile)): #skip comments
                        // Einlesen der einzelnen Zeilen als Variable
                                $tmp = split(" ",trim($zeile));
                                // UNIX Tab workaround
                                if(count($tmp) < 2)
                                        $tmp = explode("\t",trim($zeile));
                                $var = strtoupper(trim($tmp[0]));
                                for($n=1;$n<count($tmp);++$n) {
                                        if(!empty($tmp[$n])) {
                                                $$var = trim($tmp[$n]);
                                                break;
                                        }#end if
                                }#end for
                        // Einlesen der Tabelle
                                if(empty($DB_TABLE) AND eregi("FROM\ [[]]{1,20}\ WHERE",$zeile)):
                                        $tmp2 = split("FROM ",$zeile);
                                        $tmp2 = split(" WHERE",trim($tmp2[1]));
                                        $DB_TABLE = trim($tmp2[0]);
                                        unset($tmp2);
                                EndIF;
                EndIf;
        EndForEach;
        if(empty($MYSQLSERVER)) $MYSQLSERVER = "localhost";
        if(empty($DB_TABLE))        DIE("ERROR: Config error in pureftpd config file. No table specified.");
// UA
        if ($MYSQLCRYPT == "crypt") {$PW = TRUE;} else {$PW = FALSE;}
        if ($MYSQLCRYPT == "md5") {$md5 = TRUE;} else {$md5 = FALSE;}

// Aktual Version
        $VERSION = "2.23";
        $BUILD                = "1017";

// Setein header
        PAGE_HEADER();

// SQL Connection herstellen
        DB_OPEN();
       

// FORM SUBIT AUSWERTUNG // Globals
        $action                = get_var("action");
        $user                = get_var("user");

if( $action == "edit" || $action == "add" ) {
        // ADD value setter

                if($action == "add"):
                                $USERARRAY['User']                = $DefaultUser;
// UA                       
                                if ($PW) {$USERARRAY['Password']        = crypt($DefaultPass,$PWC); }
                                        else if ($md5) {$USERARRAY['Password']        = md5($DefaultPass); }
                                        else {$USERARRAY['Password']        = $DefaultPass; }
                                $USERARRAY['Password']        = $DefaultPass;
                                $USERARRAY['Uid']                = $DefaultUid;
                                $USERARRAY['Gid']                = $DefaultGid;
                                $USERARRAY['Dir']                = $DefaultDir;
                                $USERARRAY['ULBandwidth']        = $DefaultUL;
                                $USERARRAY['DLBandwidth']        = $DefaultDL;
                                $USERARRAY['ipaccess']        = $Defaultip;
                                $USERARRAY['QuotaSize']        = $DefaultQS;
// UA
                                $USERARRAY['QuotaFiles']        = $DefaultQF;
                $USERARRAY['comment']        = $Defaultcmt;
                                else:
                                unset($USERARRAY);
                EndIf;

                if(!empty($user) AND $user != "0") {
                                $USERARRAY=@MYSQL_FETCH_ARRAY(DB_QUERY("SELECT * FROM `$DB_TABLE` WHERE User LIKE '$user'"));
                }#end if
                if(!is_array($USERARRAY)) DIE("User Not found or DB error.<br />;".mysql_error());

        echo '<form method=post action="'.$SELF_URL.'" onSubmit="return checkrequired(this)">;';

        if(!empty($user))        echo '<input type="hidden" name="requireduser" value="'.stripslashes($USERARRAY['User']).'">;';
        else                                                echo '<input type="hidden" name="addnew" value="True">;';
        echo '<input type="hidden" name="action" value="save">;';
        echo '<table width="100%" class=TABLE>;';
        echo '<tr>;<th>;Status</th>;<td class=TD>;<input type="radio" name="status" value="0"';
        if($USERARRAY['status'] == 0) echo ' checked';
        echo '>; Inactive&&&<input type="radio" name="status" value="1"';
        if($USERARRAY['status'] == 1) echo ' checked';
        echo '>; Active</td>;</tr>;';

        if(!empty($user))        {
                echo '<tr>;<th>;Delete user ?</th>;<td class=TD>;<input type="checkbox" name="delete">; Yes, i am know exactly what i am doing! (NO UNDO)</td>;</tr>;';
                echo '<tr>;<th>;Username</th>;<td class=TD>;'.stripslashes($USERARRAY['User']).'</td>;</tr>;';
        }

        else

        echo '<tr>;<th>;Username</th>;<td class=TD>;<input type="text" name="requireduser" class="input">;</td>;</tr>;';
          echo '<tr>;';
        echo '<th>;Password</th>;';
// UA
        if ($PW) {
                echo '<td class=TD>;<input type="text" name="requiredpass" value="<crypted>;" class="input">;</td>;</tr>;';
        } else {
                echo '<td class=TD>;<input type="text" name="requiredpass" value="'.stripslashes($USERARRAY['Password']).'" 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>;GID</th>;<td class=TD>;<input type="text" name="requiredgid" value="'.stripslashes($USERARRAY['Gid']).'" class="input">;</td>;</tr>;';
        echo '<tr>;<th>;DIR</th>;<td class=TD>;<input type="text" name="requireddir" value="'.stripslashes($USERARRAY['Dir']).'" class="input">;</td>;</tr>;';
    echo '<tr>;<th>;UL Throttle kb/s</th>;<td class=TD>;<input type="text" name="requiredulthrottle" value="'.stripslashes($USERARRAY['ULBandwidth']).'" class="input">;</td>;</tr>;';
    echo '<tr>;<th>;DL Throttle kb/s</th>;<td class=TD>;<input type="text" name="requireddlthrottle" value="'.stripslashes($USERARRAY['DLBandwidth']).'" class="input">;</td>;</tr>;';
        echo '<tr>;<th>;IP ACCESS</th>;<td class=TD>;<input type="text" name="requiredipaccess" value="'.stripslashes($USERARRAY['ipaccess']).'" class="input">;<br />;<small>;Type in <b>;*</b>; for any IP</td>;</tr>;';
// UA
        echo '<tr>;<th>;QuotaSize in MB</th>;<td class=TD>;<input type="text" name="requiredQuotaSize" value="'.stripslashes($USERARRAY['QuotaSize']).'" class="input">;<br />;<small>;Type in <b>;0</b>; for NO VirtualQuotaSize</td>;</tr>;';
// UA
        echo '<tr>;<th>;QuotaFiles Anzahl</th>;<td class=TD>;<input type="text" name="requiredQuotaFiles" value="'.stripslashes($USERARRAY['QuotaFiles']).'" class="input">;<br />;<small>;Type in <b>;0</b>; for NO VirtualQuotaFiles</td>;</tr>;';
        echo '<tr>;<th>;COMMENT</th>;<td class=TD>;<textarea name="comment" rows="6" cols="20" class="input">;'.stripslashes($USERARRAY['comment']).'</textarea>;</td>;</tr>;';
        echo '</table>;';
        echo '<center>;<input type="submit" value="Save" class="button" width="100%">;</center>;</form>;';
}#end edit

elseif($action == "save") {
        $addnew                = addslashes( get_var("addnew") );
        $User                = addslashes(get_var("requireduser"));
       
        // UA - MG Optimized ;)
        $Password = addslashes(get_var("requiredpass"));

        IF($Password == '<crypted>;')        $Password = '';
        ELSEif($PW)                                                $Password = crypt($Password, $PWC);
        elseif($md5) $Password = md5($Password);

        $Uid                = addslashes(get_var("requireduid"));
        $Gid                = addslashes(get_var("requiredgid"));
        $Dir                = addslashes(get_var("requireddir"));
    $ULThrottle        = addslashes(get_var("requiredulthrottle"));
    $DLThrottle        = addslashes(get_var("requireddlthrottle"));
        $QuotaSize        = addslashes(get_var("requiredQuotaSize"));
// UA
        $QuotaFiles        = addslashes(get_var("requiredQuotaFiles"));
        $comment        = addslashes(get_var("comment"));
        $status                = addslashes(get_var("status"));
        $delete                = addslashes(get_var("delete"));
        $ipaccess   = addslashes(get_var("requiredipaccess"));
        if(empty($User) ||  empty($Uid) || empty($Gid) || empty($Dir)) DIE("Invalid or missing data entered...");
        if(empty($delete)) {
                // Mini workarounds
                        if($Password)        $PW_QUERY = ",Password='$Password'";
                        if(!$status)                $status = (string) '0';
                        if(!$ULBandwidth)        $ULBandwidth = (string) '0';
                        if(!$DLBandwidth)        $DLBandwidth = (string) '0';
                        if(!$QuotaSize)                $QuotaSize = (string) '0';
                        if(!$QuotaFiles)        $QuotaFiles = (string) '0';
                if($addnew == False) {
                        $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";
                        $Q                = DB_QUERY($SQL);
                        if($Q)        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nalert(\"User updated.\");\n//-->;\n</SCRIPT>;\n";
                }#end if
                else{
                        $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'");
                        if($Q)        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nalert(\"User added.\");\n//-->;\n</SCRIPT>;\n";
                }#end if

        }#end if
        elseif($User && !empty($delete)){#DELETE
                        $Q                = DB_QUERY("DELETE FROM `$DB_TABLE` WHERE User LIKE '$User' LIMIT 1");
                        if($Q)        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nalert(\"User deleted.\");\n//-->;\n</SCRIPT>;\n";
        }#end if
        echo "<SCRIPT LANGUAGE=\"JavaScript\">;\n<!--\nopener.location.reload();close();\n//-->;\n</SCRIPT>;\n";
}#end else (save)

######
elseif($action == "ftpwho") {

echo '<table border="4">;';
exec($FTP_WHO." -s", $ftpresult );
$arraySize = sizeof($ftpresult);
$x = 0;
echo '<table width="100%" class=TABLE>;';
echo '<th class=THsmall>;PID</td>;';
echo '<th class=THsmall>;user</td>;';
echo '<th class=THsmall>;min\'s</td>;';
echo '<th class=THsmall>;state</td>;';
echo '<th class=THsmall>;file</td>;';
echo '<th class=THsmall>;IP</td>;';
echo '<th class=THsmall>;current</td>;';
echo '<th class=THsmall>;total</td>;';
echo '<th class=THsmall>;%</td>;';
echo '<th class=THsmall>;bw.</td>;';
while($x < $arraySize):
         $ftpwho = $ftpresult[$x];
         list($pid, $user, $mins, $state, $file, $host, $port,$h, $current, $total, $percent, $bandwidth ) = explode("|", $ftpwho );
         $mins = round($mins / 60);
         if (empty($file) or !isset($file)) {
                 ( $file = "---" );
                 ++$ftp_activity;
         }
         else {
                if(strlen($file) >; 10)
                        $file_short = substr($file,0,10);
                        $file = "<a href=\"#\" onClick=\"javascript:alert('$file');\">;$file_short...</a>;";
         }#end else
         $host = gethostbyname($host);
                echo '<tr>;';
                echo '<td class=TDsmall>;' .$pid. '</td>;';
                echo '<td class=TDsmall>;' .$user. '</td>;';
                echo '<td class=TDsmall>;' .$mins. '</td>;';
                echo '<td class=TDsmall>;' .$state. '</td>;';
                echo '<td class=TDsmall>;' .$file. '</td>;';
                echo '<td class=TDsmall>;' .$host. '</td>;';
                echo '<td class=TDsmall>;' .$current. '</td>;';
                echo '<td class=TDsmall>;' .$total. '</td>;';
                echo '<td class=TDsmall>;' .$percent. '</td>;';
                echo '<td class=TDsmall>;' .$bandwidth. ' kb/s</td>;';
                echo '</tr>;';
          $x++;
EndWhile;
echo '</table>;';
if(!$ftp_activity) echo 'No users currenty using the FTP.<br>;';

echo '<p>;<center>;<input type=button value=" Close " onclick=self.close()>;';
echo '<input type=button value=" Refresh " onClick=" JavaScript : window.location.reload()">;</center>;';


}#end else (ftpwho)
######
elseif($action == "info") {
?>;
        <font color=silver face="Verdana,Arial">;
        <b>;sOLARiZ PureFTPd Manager</b>;<br>;
        Version <?=$VERSION?>; Build <?=$BUILD?>;
        <table width="100%" cellpadding=0 cellspacing=0 bgcolor="#C0C0C0">;
                <tr>;<td bgcolor="#005279">;<b>;<font color=silver>;About</b>;</td>;</tr>;
                <tr>;<td>;
                                <ul>;
                                <a href="http://www.pureftpd.org" target=_blank>;<img src="gfx/pure-ftpd.png" align=right border=0>;</a>;
                                Ok, whats to say about this small script ?<br>;
                                Not much. The Basic version was written due the need of a simply User management for the PureFTPd Daemon.
                                Now it's more than a simple management script.
                                </ul>;
                </td>;</tr>;
                <tr>;<td bgcolor="#005279">;<b>;<font color=silver>;History</b>;</td>;</tr>;
                <tr>;<td>;
                                <ul>;<font face=Arial size=1>;
                                <?
                                        $raw = file("history.txt");
                                        foreach($raw AS $hline):
                                                        echo stripslashes($hline)."<br>;\n";
                                        EndForEach;
                                ?>;
                                </font>;</ul>;
                </td>;</tr>;
                <tr>;<td bgcolor="#005279">;<b>;<font color=silver>;Thanks to</b>;</td>;</tr>;
                <tr>;<td>;
                        <ul>;
                        <li>;<i>;Uwe Ahrendt - www.bildpartner.de</i>; cryptmod & QuotaFiles support
                        <li>;<i>;erevo.com</i>; for detailed bug reporting
                        <li>;<i>;CrowMan</i>; for STATUS modification
                        </ul>;
                </td>;</tr>;
        </table>;

<?
}
ELSE {
// User auslesen und in Table darstellen
        $viewpw = get_var("viewpw");
        $Q=DB_QUERY("SELECT * FROM `$DB_TABLE` ORDER BY User");
        echo '<table width="100%" class=TABLE>;';
        echo '<tr>;<th>;LOGIN</th>;';
        if($viewpw) echo '<th>;PASSWORD</th>;';
// UA
        echo '<th>;UID</th>;<th>;GID</th>;<th>;DIR</th>;<th>;UL/ks</th>;<th>;DL/ks</th>;<th>;Quota Size</th>;<th>;Quota Files</th>;<th>;IP Access</th>;<th>;Status</th>;<th>;&</th>;</tr>;';
        WHILE($R=MYSQL_FETCH_ARRAY($Q)) {
                echo '<tr>;';
                echo '<td class=TD>;'.$R['User'].'</td>;';
                if($viewpw) echo '<td class=TDPW>;'.$R['Password'].'</td>;';
                echo '<td class=TD>;'.$R['Uid'].'</td>;';
                echo '<td class=TD>;'.$R['Gid'].'</td>;';
                echo '<td class=TD>;'.$R['Dir'].'</td>;';
                if($R['ULBandwidth'])        echo '<td class=TD>;'.$R['ULBandwidth'].'</td>;';
                ELSE                                                                echo '<td class=TD>;-</td>;';
                if($R['DLBandwidth'])        echo '<td class=TD>;'.$R['DLBandwidth'].'</td>;';
                ELSE                                                                echo '<td class=TD>;-</td>;';
                if($R['QuotaSize'])        echo '<td class=TD>;'.$R['QuotaSize'].' MB</td>;';
                ELSE                                                        echo '<td class=TD>;-</td>;';
// UA
                if($R['QuotaFiles'])        echo '<td class=TD>;'.$R['QuotaFiles'].'</td>;';
                ELSE                                                        echo '<td class=TD>;-</td>;';
                echo '<td class=TD>;'.$R['ipaccess'].'</td>;';
                if($R['status'] == '0')                echo '<td class="inactive">;inactive</td>;';
                elseif($R['status'] == '1')        echo '<td class="active">;active</td>;';
                echo "<td width=30 class=TD>;<input type=submit class=button value=edit onClick=\"javascript:fenster('$SELF_URL?action=edit&user=".$R['User']."')\">;</td>;";
                echo "</tr>;\n";
        }#end while
        echo '</table>;';
        ?>;
                <table width="100%" class=TABLE2>;
                        <tr>;
                                <td align=left>;
                                        PureFTP User Management.<br />;
                                        v<?=$VERSION?>; written 2002 by sOLARiZ <br />;
                                        [<a href="javascript:fenster('<?=$SELF_URL?>;?action=info')">;<font color=silver size=1>;Information</font>;</a>;]<br />;
                                </td>;
                                <td>;&</td>;
                                <td align=right valign=top>;
        <?
        // Nav Button stuff
                echo "<table cellspacing=0 cellpadding=0>;<tr>;";
                // Add User Button
                                ECHO "<td>;<input type=\"image\" src=\"gfx/addusr.gif\" class=button onClick=\"javascript:fenster('$SELF_URL?action=add')\">;</td>;";
                // View Password Button
                                echo '<form method=post action="'.$PHP_SELF.'">;';
                                if($viewpw)        echo '<input type="hidden" value=0 name="viewpw">;';
                                ELSE                                echo '<input type="hidden" value=1 name="viewpw">;';
                                ECHO '<td>;<input type="image" src="gfx/passwd.gif" value="View Passwords" alt="Toggle Passworddisplay"';
                                if(!$viewpw) echo ' class=button';
                                ECHO '>;</td>;';
                                echo '</form>;';
                // Status Button
                                ECHO "<td>;<input type=\"image\" src=\"gfx/status.gif\" class=button onClick=\"javascript:fenster('$SELF_URL?action=ftpwho')\">;</td>;";
                // Update Button
                                ECHO "<td>;<input type=\"image\" src=\"gfx/updates.gif\" class=button onClick=\"javascript:fenster('http://www.solariz.de/updates/pureftpdm.php?ver=$VERSION&ab=$BUILD')\">;</td>;";                               
                echo "</tr>;</table>;";
########

        echo '</td>;</tr>;</table>;';
}#end else

// SQL Verbindung schliessen
        DB_CLOSE();


// Seite abschliessen
PAGE_FOOTER();







// EOC <--*







// Funktionen

        function PAGE_HEADER() {
                ?>;<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">;
                        <html lang="en">;
                        <html>;
                        <head>;
                                <title>; PuRE FTPD - User Managemant </title>;
                                <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">;
                                <meta name="Generator" content="http://www.EditPlus.com">;
                                <meta name="Author" content="Marco 'solariz' G鰐ze">;
                                <meta name="Keywords" content="solariz, pureftp, user, management">;
                                <meta name="Description" content="Pure FTP User manager">;
                                <?include("styles.css")?>;
                                <script language="JavaScript">;
                                <!--
                                        function fenster( path )
                                        {
                                         MeinFenster =
                                         window.open( path , "usermanager" , "width=600,height=545,dependent=yes,resizable=yes,scrollbars");
                                         MeinFenster.focus();
                                        }

                                        function checkrequired(which){
                                        var pass=true
                                        if (document.images){
                                        for (i=0;i<which.length;i++){
                                        var tempobj=which.elements
                                        if (tempobj.name.substring(0,8)=="required"){
                                        if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)){
                                        pass=false
                                        break
                                        }
                                        }
                                        }
                                        }
                                        if (!pass){
                                        alert("Please fill in ALL fields !\nAfter that try to submit again.")
                                        return false
                                        }
                                        else
                                        return true
                                        }
                                //-->;
                                </script>;
                        </head>;
                        <body text=black>;                       
                <?
        }#end func

        function PAGE_FOOTER() {
                ?>;</body>;
                        </html>;<?
        }#end func

        function DB_OPEN() {
                GLOBAL $MYSQLSERVER,$MYSQLUSER,$MYSQLPASSWORD,$MYSQLDATABASE,$MYSQLCON;
                        $MYSQLCON = @mysql_connect($MYSQLSERVER,$MYSQLUSER,$MYSQLPASSWORD);
                        if(!$MYSQLCON OR @mysql_error()) DIE("Can't establish DB connection.<br />;".mysql_error());
                        if(!@mysql_select_Db($MYSQLDATABASE)) DIE("Can't establish DB connection.<br />;".mysql_error());
        }#end func

        function DB_CLOSE() {
                GLOBAL $MYSQLCON;
                RETURN @mysql_close($MYSQLCON);
        }#end func

        function DB_QUERY($sql) {
                GLOBAL $MYSQLCON,$MYSQLDATABASE;
                $Q = @MySql_DB_query($MYSQLDATABASE,$sql,$MYSQLCON);
                if(@mysql_error()) DIE("<b>;MySQL Error during Query !</b>;<br />;<br />;[$sql]<br />;".mysql_error());
                return $Q;
        }#end func

        function get_var($var){
                GLOBAL $$var;
                GLOBAL $_POST,$_GET,$HTTP_POST_VAR,$HTTP_GET_VAR;
                $inhalt = $$var;
                # This function checks if the _GET or _POST var is set or if an old PHP version used
                if($_POST[$var]) RETURN $_POST[$var];
                elseif($HTTP_POST_VAR[$var]) RETURN $HTTP_POST_VAR[$var];
                elseif($_GET[$var]) RETURN $_GET[$var];
                elseif($HTTP_GET_VAR[$var]) RETURN $HTTP_GET_VAR[$var];
                elseif($inhalt) RETURN $inhalt;
        }#end func
?>;

这样的话在/usr/local/pureftpd/etc/pureftpd-mysql.conf里面就可以设置为md5了,crypt也可以,自己喜欢哪个就用哪个吧,呵呵

[ 本帖最后由 大大狗 于 2006-12-18 14:32 编辑 ]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
3 [报告]
发表于 2005-08-09 18:59 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

6:通过web界面让用户修改密码
使用ftp最烦的就是用户经常说密码忘记了,或者说想改个密码,忘记密码的话,可以通过web界面进去帮他们修改,他如果想自己修改密码,这都要麻烦你的话,你会烦死的,因此要想办法让他们能自己通过web来修改,只需要很简单的几个页面就可以了,当然只是实现了该功能,安全等等还需要自己再加强了。
mkdir /usr/www/editpasswd
ee config.php
内容为:
  1. <?
  2. $local="localhost";
  3. $u_name="pureftpd";
  4. $cpasswd="abcdefg";
  5. $db_name="pureftpd";
  6. //用户名、密码、数据库名字请自行修改为自己的
  7. ?>;

  8. <?
  9. function local(){
  10.         global $local;
  11.         return $local;
  12. }
  13. function u_name(){
  14.         global $u_name;
  15.         return $u_name;
  16. }
  17. function passwd(){
  18.         global $cpasswd;
  19.         return $cpasswd;
  20. }
  21. function db_name(){
  22.         global $db_name;
  23.         return $db_name;
  24. }
  25. ?>;
复制代码


ee connect.php
内容为:
  1. <?
  2. $connectino=mysql_connect(local(),u_name(),passwd()) or die ("数据库连接失败");
  3. $select=mysql_select_db(db_name()) or die ("数据库打开失败");
  4. ?>;
复制代码


ee index.php
内容为;
  1. <?php
  2. require("config.php");

  3. if(!empty($_GET["action"])) {
  4.     if($_GET["action"]=="edit"){
  5.                 require("connect.php");
  6.                 $flag=0;

  7.             if(empty($_POST['passwd'])){
  8.                         $flag=1;
  9.                         echo "<script>;alert('错误:原密码不能为空!');history.go(-1)</script>;";
  10.                 }
  11.         if(empty($_POST['passwd1'])){
  12.                         $flag=1;
  13.                         echo "<script>;alert('错误:新密码不能为空!');history.go(-1)</script>;";
  14.                 }
  15.             if(empty($_POST['passwd2'])){
  16.                         $flag=1;
  17.                         echo "<script>;alert('错误:确认新密码不能为空!');history.go(-1)</script>;";
  18.                 }
  19.         if((strlen($_POST["passwd1"])<8)||(strlen($_POST["passwd1"])>;16)){
  20.                         $flag=1;
  21.                         echo "<script>;alert('错误:您的新密码长度应该在8-16个字符之间');history.go(-1)</script>;";       
  22.                 }
  23.             if((strlen($_POST["passwd2"])<8)||(strlen($_POST["passwd2"])>;16)){
  24.                         $flag=1;
  25.                         echo "<script>;alert('错误:您的新密码长度应该在8-16个字符之间');history.go(-1)</script>;";       
  26.                 }
  27.         if($_POST["passwd1"]!=$_POST["passwd2"]){
  28.                         $flag=1;
  29.                         echo "<script>;alert('错误:两次 新密码输入不一致 !');history.go(-1)</script>;";
  30.                 }
  31.                 $passwd_old=crypt($_POST['passwd'],"$1$");
  32.         $passwd_new=crypt($_POST['passwd1'],"$1$");

  33. if($flag==0){
  34.                         $sql="select * from ftpd where User='".$_POST['User']."' and Password='".$passwd_old."'";
  35.                         $result=mysql_query($sql);
  36.                         $myrow1=mysql_num_rows($result);
  37.                         if($myrow1==0){
  38.                                 echo "<script>;alert('原密码错误,请重新输入!');history.go(-1)</script>;";
  39.                         }else{
  40.                                 $sql ="update ftpd set Password='".$passwd_new."' where User='".$_POST['User']."'";
  41.                                 $resulta=mysql_query($sql) or die("sdfsdf");
  42.                                 echo "修改成功!";
  43.                         }
  44.                 }
  45.         }
  46. }else{
  47.         ?>;
  48. <html>;
  49. <head>;
  50. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">;
  51. <title>;--修改密码</title>;
  52. </head>;

  53. <body>;
  54. <form name="form1" method="post" action="index.php?action=edit">;
  55.   <table width="300" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#666666">;
  56.     <tr>;
  57.       <td>;<table width="300" border="0" cellspacing="1" cellpadding="0">;
  58.           <tr>;
  59.             <td height="22">;<font color="#ffffff" class="pt9">;<strong>;修改FTP服务器登陆密码</strong>;</font>;</td>;
  60.           </tr>;
  61.                   <tr>;
  62.             <td bgcolor="#FFFFFF">;<span class="pt9">;  用户名:</span>;
  63.                         <input name="User" style="border-style:solib;border-color:'#333333';border-width:1;" type="text" size="20">;</td>;
  64.           </tr>;
  65.           <tr>;
  66.             <td bgcolor="#FFFFFF">;<span class="pt9">;  原密码:</span>;
  67.                         <input name="passwd" style="border-style:solib;border-color:'#333333';border-width:1;" type="password" size="20">;</td>;
  68.           </tr>;
  69.           <tr>;
  70.             <td bgcolor="#FFFFFF">;<span class="pt9">;  新密码:</span>;
  71.                         <input name="passwd1" style="border-style:solib;border-color:'#333333';border-width:1;" type="password" size="20">;</td>;
  72.           </tr>;
  73.           <tr>;
  74.             <td bgcolor="#FFFFFF">;<span class="pt9">; 密码确认:</span>;  
  75.                         <input name="passwd2" style="border-style:solib;border-color:'#333333';border-width:1;" type="password" size="20">; </td>;
  76.           </tr>;
  77.           <tr>;
  78.             <td height="22" bgcolor="#999999">;      
  79.               <input type="submit" name="Submit" value="提交">; 
  80.               <input type="reset" name="Submit2" value="还原">;</td>;
  81.           </tr>;
  82.       </table>;</td>;
  83.     </tr>;
  84.   </table>;
  85. </form>;
  86. </body>;
  87. </html>;
  88. <?php
  89. }
  90. ?>;
复制代码


这样就可以通过http://您的ip或域名/editpasswd/index.php来访问去修改密码了

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
4 [报告]
发表于 2005-08-09 19:03 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

7:安全
phpmanager目录绝对不能让人随便访问,否则要乱套了,一般我都是在apache中对这个目录进行限制。

ee /usr/local/etc/apache2/httpd.conf

<Directory "/usr/www/phpmanager">;
    deny from all
    Options None
    AllowOverride AuthConfig
    Order deny,allow
</Directory>;

ee /usr/www/phpmanager/.htaccess

AuthType Basic
AuthUserFile /usr/local/pureftpd.passwd
AuthName 想添加用户就得过我这一关,嘿嘿^_^
require valid-user
satisfy any


/usr/local/sbin/htpasswd -bc /usr/local/pureftpd.passwd jxtm lovefreebsd

/usr/local/etc/rc.d/apache2.sh restart重启apache

这样再以http://ip或域名/phpmanager/index.php来访问的时候会提示要用户名密码了,必须输入jxtm和lovefreebsd才可以进去的。

另外还可以写个shell来定期的修改用户名、密码,这样就更安全些,密码也要复杂些。

关于pureftpd,大概的就说这么多吧,至于具体的配置,google一下吧,很多帖子专门讲的就是它的每一行配置是什么意思的,可根据实际情况选择。

论坛徽章:
0
5 [报告]
发表于 2005-08-09 19:29 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

UP,精,
-----------------------------------
PS 剑心通明肯定还私藏了好东西,

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
6 [报告]
发表于 2005-08-09 19:50 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

正想做个FTP SERVER.
收藏!!

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
7 [报告]
发表于 2005-08-10 08:07 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

原帖由 "Unicorn_angel" 发表:
UP,精,
-----------------------------------
PS 剑心通明肯定还私藏了好东西,

没有没有,目前的应用还不多,主要是因为有很多杂事要做,没有固定的大段时间研究,所以进展比较慢,以后会好多了,我跟头说过了,呵呵

论坛徽章:
0
8 [报告]
发表于 2005-08-10 11:14 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

牺牲了工作时间搞论坛管理真实太伟大了!

论坛徽章:
0
9 [报告]
发表于 2005-08-10 14:11 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

[quote]原帖由 "mafa"]牺牲了工作时间搞论坛管理真实太伟大了![/quote 发表:

谁解斑猪苦,字字皆善心

论坛徽章:
0
10 [报告]
发表于 2005-08-10 14:20 |只看该作者

FreeBSD扫盲之pureftpd+web界面管理

very 具普及教育的意义:)哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP