免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: b.s.d
打印 上一主题 下一主题

[FreeBSD] [发表]FreeBSD全能服务器安装手册v0.0.7 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-06-20 11:48 |只看该作者
FreeBSD全能服务器安装手册之文件服务器篇
--管理界面篇



##################################设置ftp管理界面##############################
require 'language.php';

$LANG = $ZH_CN;                                        //Language (Options are $DUTCH, $ENGLISH, $PT_BR, $RUSSIAN
                                         //$SPANISH, $COREAN, $FRENCH, $HUNGARIAN, $GERMAN
                                         // $TURKISH, $DANISH , $NORWEGIAN or $ZH_CN)
$LocationImages =  "images";                           // Location of images
$DBHost = "localhost";                      // Ip-adres of MySQL server
                                       // (Dont change this if you are using the default database)
$DBLogin = "ftp";                          // Username of MySQL user
$DBPassword = "password";                       // Password of MySQL user
$DBDatabase = "ftpusers";                   // Name of database
$FTPaddress = "192.168.0.205:21";            // Domain name or ip-address of your ftp server
$DEFUserID = "2000"; // nobody              // Default user id of virtual ftp user.
$DEFGroupID = "2000";   // guest            // Default group is of virtual ftp user.

###############################FTP管理界面源代码##############################
注意:共四个页面、一个样式、图片不付、存放图片的文件夹名为images
(admin.php、config.php、index.php、language.php、style.css)

%%%%%%%%%%%%%%%%%%%% admin.php%%%%%%%%%%%%%%%%%%%%%%
<?php

  session_start();

  require 'config.php';

  if ($_SESSION['Login'] != '1')
  {
    header("location: index.php");
  }else
  {

    if(!$mysql_ftp = @mysql_connect("$DBHost","$DBLogin","$DBPassword"))
    {
      echo $Translate[2][$LANG];
    }

    @mysql_select_db($DBDatabase);


    $table_archief  = "SELECT * FROM users ORDER BY User ASC";
    $query_archief  = mysql_query($table_archief);
    $length_archief = mysql_numrows($query_archief);

    function compare_array($word,$array)
    {

      $iCounter = 0;
      while ($iCounter < count($array))
      {
         if($word == $array[$iCounter])
         {
           return $iCounter;
           break;
         }
         $iCounter++;
      }
      return -1;
    }


    $filename = $UsersFile;
    $fh = fopen($filename,"r");

    $iNrofunixusers = 0;

    while (!feof ($fh))
    {

       $line = fgets($fh,4096);
       $data = explode(":",$line);

       $user = trim($data[0]);
       $user_id = trim($data[2]);


       if ($user[0] != '#' &&
           strlen($user) != 0 &&
           strlen($user_id) != 0)
       {
          if(compare_array($user,$BlacklistUsers) == -1) /* no hit */
          {
            $unix_users[$iNrofunixusers] [0] = $user;
            $unix_users[$iNrofunixusers] [1] = $user_id;
            $iNrofunixusers++;
          }
       }
    }
    fclose($fh);


    $filename = $GroupFile;
    $fh = fopen($filename,"r");
    $iNrofunixgroups = 0;

    while (!feof ($fh))
    {

       $line = fgets($fh,4096);
       $data = explode(":",$line);

       $group = trim($data[0]);
       $group_id = trim($data[2]);

       if ($group[0] != '#' &&
           strlen($group) != 0 &&
           strlen($group_id) != 0)
       {
          if(compare_array($group,$BlacklistGroups) == -1) /* no hit */
          {
            $unix_groups[$iNrofunixgroups] [0] = $group;
            $unix_groups[$iNrofunixgroups] [1] = $group_id;
            $iNrofunixgroups++;
          }
       }
    }
    fclose($fh);

    if($_GET['new'] == 1)
      $new = 1;

    $data_saved=1;

    if(isset($_POST['save']))
    {

      $empty_password = 0;
      $vallid_password = 1;

      /* Default values, not used in this version but fields exist in  database table */
      $quotafiles   = "0";
      $quotasize    = "0";

      /* check if password if filled */
      if (strlen($_POST['password_box']) == 0 || ($_POST['password_box'] == "empty"))
        $empty_password = 1;

      /* check for vallid password */
      if ($_POST['confirm_password_box'] != $_POST['password_box'])
        $vallid_password = 0;

      $iExistUser=0;
      $iCounter=0;

      /* Find out of user exist */
      while ($iCounter < $length_archief)
      {
        $bericht_nr = mysql_result($query_archief,$iCounter,"User");
        if ($bericht_nr == $_POST['user_box'])
        {
          $iExistUser=1;
          break;
        }
        $iCounter++;
      }


      if ($iExistUser == 1)
      {

        /*  update current ftp account */

        if ($vallid_password == 0)
        {
          echo ("<script language=\"JavaScript\" type=\"text/javascript\">\n");
                     echo ("<!--\n\n");
                     echo ("  alert(\"".$Translate[3][$LANG]."\");\n\n");
                     echo ("-->\n");
                     echo ("</script>\n");
        }else
        {
          if ($empty_password == 1)
          {
            echo ("<script language=\"JavaScript\" type=\"text/javascript\">\n");
                       echo ("<!--\n\n");
                       echo ("  alert(\"".$Translate[4][$LANG]."\");\n\n");
                echo ("-->\n");
                       echo ("</script>\n");
            
            /*echo ("Uid=".$_POST['uid_box']."<br>
                   Gid=".$_POST['gid_box']."<br>
                   Dir=".$_POST['dir_box']."<br>
                   QuotaFiles=".$_POST['quotafiles_box']."<br>
                   QuotaSize=".$_POST['quotasize_box']."<br>
                   ULBandwidth=".$_POST['ulbandwidth_box']."<br>
                   DLBandwidth=".$_POST['dlbandwidth_box']."<br>
                   User=".$_POST['user_box']."<br>\n");*/
            

            if(!mysql_query("UPDATE users SET Uid='".$_POST['uid_box']."',
                                              Gid='".$_POST['gid_box']."',
                                              Dir='".$_POST['dir_box']."',
                                              QuotaFiles='".$_POST['quotafiles_box']."',
                                              QuotaSize='".$_POST['quotasize_box']."',
                                              ULBandwidth='".$_POST['ulbandwidth_box']."',
                                              DLBandwidth='".$_POST['dlbandwidth_box']."'
                                              WHERE User='".$_POST['user_box']."'",$mysql_ftp))
            {
              echo $Translate[5][$LANG];
            }
          }else
          {

论坛徽章:
0
22 [报告]
发表于 2006-06-20 11:49 |只看该作者
if(!mysql_query("UPDATE users SET Password='".md5($_POST['password_box'])."',
                                              Uid='".$_POST['uid_box']."',
                                              Gid='".$_POST['gid_box']."',
                                              Dir='".$_POST['dir_box']."',
                                              QuotaFiles='".$_POST['quotafiles_box']."',
                                              QuotaSize='".$_POST['quotasize_box']."',
                                              ULBandwidth='".$_POST['ulbandwidth_box']."',
                                              DLBandwidth='".$_POST['dlbandwidth_box']."'
                                              WHERE User='".$_POST['user_box']."'",$mysql_ftp))
            {
              echo $Translate[5][$LANG];
            }else
            {
              echo ("<script language=\"JavaScript\" type=\"text/javascript\">\n");
                         echo ("<!--\n\n");
                         echo ("  alert(\"".$Translate[6][$LANG]."\");\n\n");
                  echo ("-->\n");
                         echo ("</script>\n");
            }

          }
        }

      }else
      {
        // echo ("empty_password  = $empty_password <br>\n");
        // echo ("vallid_password = $vallid_password <br>\n");

        /* Create new User */
        if ($vallid_password == 0 || $empty_password == 1)
        {
          echo ("<script language=\"JavaScript\" type=\"text/javascript\">\n");
                     echo ("<!--\n\n");
                     echo ("  alert(\"".$Translate[3][$LANG]."\");\n\n");
                     echo ("-->\n");
                     echo ("</script>\n");
                     $data_saved = 0;
        }else
        {
          if(!mysql_query("INSERT INTO users (User,Password,Uid,Gid,Dir,QuotaFiles,QuotaSize,ULBandwidth,DLBandwidth)
                                             VALUES ('".$_POST['user_box']."',
                                                     '".md5($_POST['password_box'])."',
                                                     '".$_POST['uid_box']."',
                                                     '".$_POST['gid_box']."',
                                                     '".$_POST['dir_box']."',
                                                     '".$_POST['quotafiles']."',
                                                     '".$_POST['quotasize']."',
                                                     '".$_POST['ulbandwidth_box']."',
                                                     '".$_POST['dlbandwidth_box']."')",$mysql_ftp))
          {
            echo $Translate[5][$LANG];
          }
        }
      }
      $table_archief  = "SELECT * FROM users ORDER BY User ASC";
      $query_archief  = mysql_query($table_archief);
      $length_archief = mysql_numrows($query_archief);
    }


    if(isset($_GET['delete']))
    {

      if(!mysql_query("DELETE FROM users WHERE User='".$_GET['user_box']."'",$mysql_ftp))
      {
         echo $Translate[5][$LANG];
      }else
      {
        $table_archief  = "SELECT * FROM users ORDER BY User ASC";
        $query_archief  = mysql_query($table_archief);
        $length_archief = mysql_numrows($query_archief);
      }
      $new=1;
    }

    function help($help_text)
    {
      global $LocationImages;
      echo ("<img class=help src=\"$LocationImages/info.gif\" height=\"16\" width=\"16\"");
      echo (" title=\"$help_text\" hspace=\"1\" align=\"middle\" border=\"0\">");
    }


    echo ("<html>\n");
    echo ("<head>\n");
    echo ("<title>".$Translate[0][$LANG]." (".$Translate[1][$LANG].")</title>\n");
    echo ("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\n");
?>

<script language="JavaScript" type="text/javascript">
<!--

function danger_url(user,urlv)
{
  var user_input = confirm('<?=$Translate[7][$LANG]?> "'+user+'" <?=$Translate[8][$LANG]?>');
  if (user_input == true)
  {
        location =  urlv;
  }

}

-->
</script>


<?php

   print("<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\" />\n");
   echo ("</head>\n");
   echo ("<body bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#000000\" >\n");


   // phpinfo();



   echo ("<form action=\"$_SERVER[PHP_SELF]\" method=\"post\" name=\"newuserform\">\n");
   echo ("<div align=\"center\">\n");


   echo ("<table bgcolor=\"3F4F70\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" width=\"850\">\n");
   echo ("<tr bgcolor=\"#FFFFFF\">\n");
   echo ("<td>\n");

   echo ("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"850\">\n");
     echo ("<tr>\n");
     echo ("<td>\n");
     echo ("<font size=\"+1\">&nbsp;".$Translate[0][$LANG]."</font>\n");
     echo ("</td>\n");
     echo ("<td align=\"right\">");
     echo ("<a href=\"$_SERVER[PHP_SELF]?new=1\">");
     echo ("<img hspace=\"1\" src=\"$LocationImages/new_ftpuser.gif\" width=\"16\" height=\"21\" align=\"absmiddle\" border=\"0\">");
     echo ("&nbsp;".$Translate[9][$LANG]."&nbsp;</a>");
     echo ("</td>\n");
     echo ("</tr>\n");
   echo ("</table>\n");
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#FFFFFF\">\n");
   echo ("<td>\n");
   echo ("<table width=\"850\" border=\"0\">\n");

   echo ("<tr bgcolor=\"#336699\">\n");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[10][$LANG]."</b></font></td>");
    // echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[11][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[12][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[13][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[14][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[35][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[36][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[15][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[16][$LANG]."</b></font></td>");
   echo ("<td width=\"\" align=\"left\"><font color=#ffffff><b>".$Translate[17][$LANG]."</b></font></td>");
   echo ("</tr>\n");


   $iCounter = 0;

   while ($iCounter < $length_archief)
   {

     $user         = mysql_result($query_archief,$iCounter,"User");
     $password     = mysql_result($query_archief,$iCounter,"Password");
     $uid          = mysql_result($query_archief,$iCounter,"Uid");
     $gid          = mysql_result($query_archief,$iCounter,"Gid");
     $dir          = mysql_result($query_archief,$iCounter,"Dir");
     $quotafiles   = mysql_result($query_archief,$iCounter,"QuotaFiles");
     $quotasize    = mysql_result($query_archief,$iCounter,"QuotaSize");
     $ulbandwidth  = mysql_result($query_archief,$iCounter,"ULBandwidth");
     $dlbandwidth  = mysql_result($query_archief,$iCounter,"DLBandwidth");

     echo ("<tr bgcolor=\"#C3D6E6\">\n");

     echo ("<td align=\"left\"><a href=\"$_SERVER[PHP_SELF]?id=$user\">");
     echo ("<img src=\"$LocationImages/ftpuser.gif\" width=\"16\" height=\"18\" alt=\"".$Translate[19][$LANG]."\" border=\"0\">$user</a></td>\n");

     echo ("<td align=\"left\">".$uid."</td>\n");
     echo ("<td align=\"left\">".$gid."</td>\n");
     echo ("<td align=\"left\">".$dir."</td>\n");
     echo ("<td align=\"left\">".$quotafiles."</td>\n");
     echo ("<td align=\"left\">".$quotasize."</td>\n");
     echo ("<td align=\"left\">".$ulbandwidth."</td>\n");
     echo ("<td align=\"left\">".$dlbandwidth."</td>\n");
     echo ("<td align=\"center\" width=\"100\">");


     /* Edit ftp account */
     echo ("<a href=\"$_SERVER[PHP_SELF]?id=$user\">");
     echo ("<img src=\"$LocationImages/edit.gif\"  width=\"16\" height=\"18\" border=\"0\" ");

论坛徽章:
0
23 [报告]
发表于 2006-06-20 11:50 |只看该作者
echo ("title=\"".$Translate[19][$LANG]."\" ");
     echo ("alt=\"".$Translate[19][$LANG]."\"></a>&nbsp;&nbsp;");

     /* Delete ftp account */
     echo ("<a href=\"$_SERVER[PHP_SELF]\" onClick=\"danger_url('$user',this.href+'?delete=1&user_box=$user');return false;\">");
     echo ("<img src=\"$LocationImages/delete.gif\" width=\"15\" height=\"16\" border=\"0\" ");
     echo ("title=\"".$Translate[20][$LANG]."\" ");
     echo ("alt=\"".$Translate[20][$LANG]."\"></a>&nbsp;&nbsp;");
       // <img src="connect2.gif" width="16" height="18">

     /* Open ftp account */
     echo ("<a href=\"ftp://$user@".$FTPAddress."\" target=\"_blank\">");
     echo ("<img src=\"$LocationImages/connect.gif\" width=\"16\" height=\"18\" border=\"0\" ");
     echo ("title=\"".$Translate[21][$LANG]."\" ");
     echo ("alt=\"".$Translate[21][$LANG]."\"></a>");

     echo ("</td>\n");
     echo ("</tr>\n");
     $iCounter++;
   }

   echo ("</table>\n");
   echo ("</td>\n");
   echo ("</tr>\n");
   echo ("</table>\n");

   $password = "empty";

   if(!empty($_GET['id']))
   {
       $iCounter=0;

       while ($iCounter < $length_archief)
       {

         $bericht_nr = mysql_result($query_archief,$iCounter,"User");
         if ($bericht_nr == $_GET['id'])
         {
           $user         = $bericht_nr;
           // $password     = mysql_result($query_archief,$iCounter,"Password");
           $uid          = mysql_result($query_archief,$iCounter,"Uid");
           $gid          = mysql_result($query_archief,$iCounter,"Gid");
           $dir          = mysql_result($query_archief,$iCounter,"Dir");
           $quotafiles   = mysql_result($query_archief,$iCounter,"QuotaFiles");
           $quotasize    = mysql_result($query_archief,$iCounter,"QuotaSize");
           $ulbandwidth  = mysql_result($query_archief,$iCounter,"ULBandwidth");
           $dlbandwidth  = mysql_result($query_archief,$iCounter,"DLBandwidth");
           break;
         }
         $iCounter++;
       }
   }else if(empty($new))
   {

     // $_GET['id']
     // $_POST['']
     $user         = $_POST['user_box'];
     $password     = "empty";
     $uid          = $_POST['uid_box'];
     $gid          = $_POST['gid_box'];
     $dir          = $_POST['dir_box'];
     $ulbandwidth  = $_POST['ulbandwidth_box'];
     $dlbandwidth  = $_POST['dlbandwidth_box'];

   }else
   {
     $user         = $Translate[22][$LANG];
     $password     = "";
     $uid          = $DEFUserID;
     $gid          = $DEFGroupID;
     $dir          = "/";
     $ulbandwidth  = "80";
     $dlbandwidth  = "5";

   }

   if(isset($_POST['select_user']) &&
      $_POST['select_user'] != $select_user_old &&
      !isset($_POST['save']))
   {

      $uid = $_POST['select_user'];
      $password = $_POST['password_box'];
   }

   if(isset($_POST['select_group']) &&
      $_POST['select_group'] != $select_group_old &&
      !isset($_POST['save']))
   {
      $gid = $_POST['select_group'];
      $password = $_POST['password_box'];
   }



  session_register("select_group_old");
  session_register("select_user_old");




   echo ("<br><br>");
   echo ("<table width=\"850\" border=\"0\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"#000000\">\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[10][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   echo ("<input type=\"text\" name=\"user_box\" size=\"10\" maxlength=\"16\" value=\"$user\">\n");
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[11][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   // echo ("<input type=\"text\" name=\"password_box\" size=\"20\" maxlength=\"64\" value=\"$password\">\n");
   echo ("<input type=\"password\" name=\"password_box\" size=\"20\" maxlength=\"64\" value=\"$password\">\n");
   // echo ("$password <br>\n");
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[23][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   // echo ("<input type=\"text\" name=\"password_box\" size=\"20\" maxlength=\"64\" value=\"$password\">\n");
   echo ("<input type=\"password\" name=\"confirm_password_box\" size=\"20\" maxlength=\"64\" value=\"$password\">\n");

   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[12][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");





   echo ("<select name=\"select_user\" onchange='document.newuserform.uid_box.value=this.value;' style='width: 100px;'>");
   echo ("<option value=\"\">select user</option>");
   $iCounter = 0;
   $iFound_uid = 0;
   while ($iCounter < $iNrofunixusers)
   {
      echo ("<option value=\"".$unix_users[$iCounter][1]."\"");
      if ($uid == $unix_users[$iCounter][1])
      {
        echo (" selected=\"selected\"");
        $select_user_old = $unix_users[$iCounter][1];
        $iFound_uid = 1;

      }
      echo (">".$unix_users[$iCounter][0]."</option>");
      $iCounter++;
   }


   echo ("</select>\n");

      echo ("<img src=\"$LocationImages/arrow_right.gif\" height=\"10\" width=\"10\"");
      echo (" hspace=\"1\" align=\"middle\" border=\"0\"> ");

   echo ("<input type=\"text\" name=\"uid_box\" size=\"11\" maxlength=\"11\" value=\"$uid\">\n");
   help($Translate[26][$LANG]);
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[13][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");

   echo ("<select name=\"select_group\" onchange='document.newuserform.gid_box.value=this.value;' style='width: 100px;'>");
   echo ("<option value=\"\">select group</option>");
   $iCounter = 0;

   $iFound_gid = 0;
   while ($iCounter < $iNrofunixgroups)
   {
     echo ("<option value=\"".$unix_groups[$iCounter][1]."\"");
     if ($gid == $unix_groups[$iCounter][1])
     {
        echo (" selected=\"selected\"");
        $select_group_old = $unix_groups[$iCounter][1];
        $iFound_gid = 1;

     }
     echo (">".$unix_groups[$iCounter][0]."</option>");
     $iCounter++;
   }


   echo ("</select>\n");

      echo ("<img src=\"$LocationImages/arrow_right.gif\" height=\"10\" width=\"10\"");
      echo (" hspace=\"1\" align=\"middle\" border=\"0\"> ");

   echo ("<input type=\"text\" name=\"gid_box\" size=\"11\" maxlength=\"11\" value=\"$gid\">\n");
   help($Translate[27][$LANG]);
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[14][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   echo ("<input type=\"text\" name=\"dir_box\" size=\"40\" maxlength=\"128\"

论坛徽章:
0
24 [报告]
发表于 2006-06-20 11:50 |只看该作者
value=\"$dir\">\n");
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[35][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   echo ("<input type=\"text\" name=\"quotafiles_box\" size=\"10\" maxlength=\"10\" value=\"$quotafiles\">\n");
   help($Translate[37][$LANG]);
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[36][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   echo ("<input type=\"text\" name=\"quotasize_box\" size=\"10\" maxlength=\"10\" value=\"$quotasize\">\n");
   help($Translate[38][$LANG]);
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[24][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   echo ("<input type=\"text\" name=\"ulbandwidth_box\" size=\"10\" maxlength=\"10\" value=\"$ulbandwidth\">\n");
   help($Translate[28][$LANG]);
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td width=\"140\">".$Translate[25][$LANG]."</td>\n");
   echo ("<td>\n&nbsp;");
   echo ("<input type=\"text\" name=\"dlbandwidth_box\" size=\"10\" maxlength=\"10\" value=\"$dlbandwidth\">\n");
   help($Translate[29][$LANG]);
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("<tr bgcolor=\"#D4D0C8\">\n");
   echo ("<td colspan=\"2\" align=\"center\">\n");
   echo ("<input name=\"save\" type=\"submit\" value=\"".$Translate[32][$LANG]."\">\n");
   echo ("</td>\n");
   echo ("</tr>\n");

   echo ("</table>\n");
   echo ("</div>\n");


   if ($iFound_uid == 0)
     $select_user_old = "";

   if ($iFound_gid == 0)
     $select_group_old = "";


   // echo ("select_user_old = $select_user_old<br>\n");
   // echo ("select_group_old = $select_group_old<br>\n");

   echo ("</body>\n");
   echo ("</html>\n");
  }
?>


%%%%%%%%%%%%%%%%%%%% config.php%%%%%%%%%%%%%%%%%%%%%%
<?php
  /* 'User Management for PureFTPd server' is made by M.Mastenbroek 2002 - 2004
   *  For more info look at http://machiel.generaal.net
   *  Version 1.3.1
   */

  require 'language.php';

  $LANG = $ZH_CN;                     // Language (Options are $DUTCH, $ENGLISH, $PT_BR, $RUSSIAN
                                      //           $SPANISH, $COREAN, $FRENCH, $HUNGARIAN, $GERMAN
                                      //           $TURKISH, $DANISH , $NORWEGIAN or $ZH_CN)

$LocationImages =  "images";        // Location of images

$DBHost = "localhost";              // Ip-adres of MySQL server
                                      // (Don抰 change this if you are using the default database)

$DBLogin = "ftp";                   // Username of MySQL user

  $DBPassword = "e89120d9dfeb";          // Password of MySQL user

  $DBDatabase = "ftpusers";           // Name of database

  $FTPAddress = "222.36.42.111:21"; // Domain name or ip-address of your ftp server

  $DEFUserID = "2000"; // nobody     // Default user id of virtual ftp user.

  $DEFGroupID = "2000";   // guest      // Default group is of virtual ftp user.

  $UsersFile = "/etc/passwd";        // The unix user file

  $GroupFile = "/etc/group";         // The unix group file

  /* This list of users will not appear in the dropdown menu. */
  $BlacklistUsers = array ('adm','bin','bind','daemon','gopher','halt','kmem','lp',
                           'mailnull','man','named','nfsnobody','nscd','operator',
                           'pop','root','rpc','rpcuser','rpm','shutdown','smmsp',
                           'sshd','sync','toor','tty','uucp','vcsa','xfs');

  /* This list of groups will not appear in the dropdown menu. */
  $BlacklistGroups = array ('adm','bin','bind','daemon','dialer','dip','disk','floppy','gopher','kmem',
                           'lock','lp','mailnull','man','named','mem','network','news',
                           'nscd','ntp','operator','pcap','root','rpc','rpcuser','rpm','slocate','smmsp',
                           'sshd','staff','sys','tty','utmp','uucp','vcsa','wheel','xfs');


?>

%%%%%%%%%%%%%%%%%%%% index.php%%%%%%%%%%%%%%%%%%%%%%

<?php

  session_start();

  require 'config.php';

  if(!mysql_connect("$DBHost", "$DBLogin", "$DBPassword"))
  {
    echo $Translate[2][$LANG];
  } else
  {
    @mysql_select_db("$DBDatabase");
  }

  $table_gebruikers  = "SELECT * FROM admin ORDER BY Username ASC";
  $query_gebruikers  = mysql_query($table_gebruikers);
  $length_gebruikers = mysql_num_rows($query_gebruikers);

  if ($_POST['Submit'])
  {

    $LoginNaam = addslashes($_POST['LoginNaam']);
    $LoginPassword = addslashes($_POST['LoginPassword']);

    $Query = mysql_query("SELECT * FROM admin WHERE Username = '$LoginNaam' AND Password = '".md5($LoginPassword)."'");
    $Results = mysql_num_rows($Query);

    if ($Results == '1')
    {
       $_SESSION['Login'] = 1;
       session_register("Login");
       header("location: admin.php?new=1");
    }
  }

?>

<html>
<head>
<title><?=$Translate[30][$LANG]." (".$Translate[0][$LANG]." - ".$Translate[1][$LANG].")"?></title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF" text="#000000" marginwidth="0" marginheight="0">
<div align="center"><br>
  <br>
  <br>
  <form method="post" action="index.php">
    <input type="hidden" name="Submit" value="1">

    <?php
      if ($Results != '1' && isset($_POST['Submit']))
      {
     //   echo("<tr>\n");
     //   echo("<td bgcolor=\"#FFFFFF\" align=\"center\">\n");
        echo("<font color=\"#FF0000\">".$Translate[31][$LANG]."</font>\n<br>\n<br>\n");
     //   echo("</td>\n");
     //   echo("</tr>\n");
      }
    ?>


    <table border="0" bgcolor="#000000" cellpadding="1" cellspacing="0">
    <tr>
    <td>
    <table border="0" bgcolor="#CCCCCC" cellpadding="0" cellspacing="0">
      <tr>
        <td height="0"></td>
      </tr>
      <tr>
        <td>
          <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tr>
              <td colspan="2" background="<?=$LocationImages?>/top.gif"><img src="<?=$LocationImages?>/left_top.gif" width="15" height="15"><img src="<?=$LocationImages?>/login.gif" width="28" height="11"></td>
              <td width="15"><img src="<?=$LocationImages?>/right_top.gif" width="15" height="15"></td>
            </tr>
            <tr>
              <td width="15" background="<?=$LocationImages?>/left.gif">&nbsp;</td>
              <td>
                <table border="0" width="100%">
                  <tr>
                    <td height="7"></td>
                    <td></td>
                    <td></td>
                  </tr>
                  <tr>
                    <td width="40" align="center"> <img

论坛徽章:
0
25 [报告]
发表于 2006-06-20 11:51 |只看该作者
src="<?=$LocationImages?>/user.gif" width="16" height="24"></td>
                    <td><?=$Translate[10][$LANG]?><br>
                      <select name="LoginNaam">
                      <?php
                         $iCounter = 0;
                         while ($iCounter < $length_gebruikers)
                         {
                           $naam = mysql_result($query_gebruikers,$iCounter,"Username");
                           echo ("<option>$naam</option>\n");
                           $iCounter++;
                         }
                      ?>
                      </select>
                    </td>
                    <td width="17">&nbsp;</td>
                  </tr>
                  <tr>
                    <td height="10"></td>
                    <td></td>
                    <td></td>
                  </tr>
                  <tr>
                    <td width="40" align="center"> <img src="<?=$LocationImages?>/key.gif" width="28" height="32"></td>
                    <td><?=$Translate[11][$LANG]?>:<br>
                      <input type="password" name="LoginPassword" size="20">
                    </td>
                    <td width="17">&nbsp;</td>
                  </tr>
                </table>
              </td>
              <td width="15" background="<?=$LocationImages?>/right.gif">&nbsp;</td>
            </tr>
            <tr>
              <td colspan="2" background="<?=$LocationImages?>/top.gif"><img src="<?=$LocationImages?>/left_bottom.gif" width="15" height="15"></td>
              <td width="15" ><img src="<?=$LocationImages?>/right_bottom.gif" width="15" height="15"></td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td>
          <table border="0" width="100%" cellspacing="3">
            <tr>
              <td align="right">
                <input type="submit" name="submit" value="登录">
                      &nbsp;
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
        </td>
      </tr>
    </table>
    <p>&nbsp;</p>
  </form>
</div>
</body>
</html>


%%%%%%%%%%%%%%%%%%% language.php%%%%%%%%%%%%%%%%%%%%%
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<?php
  $ZH_CN         = 12; /* ZH_CN translated by Kevin Xu */
  $Translate[0][$ZH_CN]                = "PureFTPd服务用户管理";
  $Translate[1][$ZH_CN]          = "Version 1.3.1";
  $Translate[2][$ZH_CN]         = "数据库服务没有启动,请稍后再试。";
  $Translate[3][$ZH_CN]         = "您的密码不正确,当前所做的修改将不能保存。";
  $Translate[4][$ZH_CN]                = "密码将被设置为默认值并保存所有修改。";
  $Translate[5][$ZH_CN]           = "不合法的查询,请联系管理员。";
  $Translate[6][$ZH_CN]           = "修改已经保存。";
  $Translate[7][$ZH_CN]           = "FTP用户";
  $Translate[8][$ZH_CN]           = "将被删除。";
  $Translate[9][$ZH_CN]           = "新建用户";
  $Translate[10][$ZH_CN]            = "用户名";
  $Translate[11][$ZH_CN]            = "密码";
  $Translate[12][$ZH_CN]            = "用户id";
  $Translate[13][$ZH_CN]            = "用户组id";
  $Translate[14][$ZH_CN]            = "用户主目录";
  $Translate[15][$ZH_CN]            = "上传速度(Kb/s)";
  $Translate[16][$ZH_CN]            = "下载速度(Kb/s)";
  $Translate[17][$ZH_CN]            = "设置";
  $Translate[19][$ZH_CN]            = "编辑";
  $Translate[20][$ZH_CN]           = "删除";
  $Translate[21][$ZH_CN]           = "打开";
  $Translate[22][$ZH_CN]           = "用户名";
  $Translate[23][$ZH_CN]           = "密码确认";
  $Translate[24][$ZH_CN]           = "上传速度(Kb/s)";
  $Translate[25][$ZH_CN]           = "下载速度(Kb/s)";
  $Translate[26][$ZH_CN]          = "FTP用户等同于UNIX系统中哪个系统用户。";
  $Translate[27][$ZH_CN]           = "FTP用户组等同于UNIX系统中哪个系统组。";
  $Translate[28][$ZH_CN]           = "FTP用户的最大上传速度(Kb/s)。";
  $Translate[29][$ZH_CN]           = "FTP用户的最大下载速度(Kb/s)。";
  $Translate[30][$ZH_CN]           = "登录页面";
  $Translate[31][$ZH_CN]           = "错误的用户和密码。";
  $Translate[32][$ZH_CN]           = "保存";
  $Translate[33][$ZH_CN]           = "";
  $Translate[34][$ZH_CN]           = "";
  $Translate[35][$ZH_CN]           = "文件限额";
  $Translate[36][$ZH_CN]           = "磁盘限额(Mb)";
  $Translate[37][$ZH_CN]           = "FTP用户上传最大文件数。";
  $Translate[38][$ZH_CN]           = "FTP用户上传最大磁盘空间(Mb)。";
?>


%%%%%%%%%%%%%%%%%%%% style.css%%%%%%%%%%%%%%%%%%%%%%%


a {
    font-face: Verdana, Arial, Helvetica, sans-serif;
    text-decoration:none;
    color: #000000;
    font-size: 14px;
}

a:visited {
    text-decoration: none;
    color: default;
}

a:hover {
    font-face: Verdana, Arial, Helvetica, sans-serif;
    text-decoration: underline;
    color: #FF0000;
    font-size: 14px;
}

.help {
    cursor: help
}

论坛徽章:
0
26 [报告]
发表于 2006-06-20 11:52 |只看该作者
FreeBSD全能服务器安装手册之文件服务器篇
--用户密码自主管理篇




##############################增加FTP密码自助修改功能#########################

%%%%%%%%%%%%%%%%%%%%%config.php%%%%%%%%%%%%%%%%%%%%%

<?
$local="localhost";
$u_name="ftp";
$cpasswd="e89120d9dfeb";
$db_name="ftpusers";
//用户名、密码、数据库名字请自行修改为自己的
?>

<?
function local(){
   global $local;
   return $local;
}
function u_name(){
   global $u_name;
   return $u_name;
}
function passwd(){
   global $cpasswd;
   return $cpasswd;
}
function db_name(){
   global $db_name;
   return $db_name;
}
?>

%%%%%%%%%%%%%%%%%%%%connect.php%%%%%%%%%%%%%%%%%%%%%

<?
$connectino=mysql_connect(local(),u_name(),passwd()) or die ("数据库连接失败");
$select=mysql_select_db(db_name()) or die ("数据库打开失败");
?>

%%%%%%%%%%%%%%%%%%%index.php%%%%%%%%%%%%%%%%%%%%%%%
<?php
require("config.php");

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

       if(empty($_POST['passwd'])){
         $flag=1;
         echo "<script>alert('错误:原密码不能为空!');history.go(-1)</script>";
      }
       if(empty($_POST['passwd1'])){
         $flag=1;
         echo "<script>alert('错误:新密码不能为空!');history.go(-1)</script>";
      }
       if(empty($_POST['passwd2'])){
         $flag=1;
         echo "<script>alert('错误:确认新密码不能为空!');history.go(-1)</script>";
      }
       if((strlen($_POST["passwd1"])<1)||(strlen($_POST["passwd1"])>100)){
         $flag=1;
         echo "<script>alert('错误:您的新密码长度应该在8-16个字符之间');history.go(-1)</script>";   
      }
       if((strlen($_POST["passwd2"])<1)||(strlen($_POST["passwd2"])>100)){
         $flag=1;
         echo "<script>alert('错误:您的新密码长度应该在8-16个字符之间');history.go(-1)</script>";   
      }
       if($_POST["passwd1"]!=$_POST["passwd2"]){
         $flag=1;
         echo "<script>alert('错误:两次 新密码输入不一致 !');history.go(-1)</script>";
      }
      $passwd_old=md5($_POST['passwd']);
       $passwd_new=md5($_POST['passwd1']);

if($flag==0){
         $sql="select * from users where User='".$_POST['User']."' and Password='".$passwd_old."'";
         $result=mysql_query($sql);
         $myrow1=mysql_num_rows($result);
         if($myrow1==0){
            echo "<script>alert('原密码错误,请重新输入!');history.go(-1)</script>";
         }else{
            $sql ="update users set Password='".$passwd_new."' where User='".$_POST['User']."'";
            $resulta=mysql_query($sql);
            echo "修改成功!";
         }
      }
   }
}else{
   ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>--修改密码</title>
</head>

<body>
<form name="form1" method="post" action="index.php?action=edit">
<table width="300" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#666666">
   <tr>
     <td><table width="300" border="0" cellspacing="1" cellpadding="0">
         <tr>
           <td height="22"><font color="#ffffff" class="pt9"><strong>修改FTP服务器登陆密码</strong></font></td>
         </tr>
        <tr>
           <td bgcolor="#FFFFFF"><span class="pt9">  用户名:</span>
         <input name="User" style="border-style:solib;border-color:'#333333';border-width:1;" type="text" size="20"></td>
         </tr>
         <tr>
           <td bgcolor="#FFFFFF"><span class="pt9">  原密码:</span>
         <input name="passwd" style="border-style:solib;border-color:'#333333';border-width:1;" type="password" size="20"></td>
         </tr>
         <tr>
           <td bgcolor="#FFFFFF"><span class="pt9">  新密码:</span>
         <input name="passwd1" style="border-style:solib;border-color:'#333333';border-width:1;" type="password" size="20"></td>
         </tr>
         <tr>
           <td bgcolor="#FFFFFF"><span class="pt9"> 密码确认:</span>   
         <input name="passwd2" style="border-style:solib;border-color:'#333333';border-width:1;" type="password" size="20"> </td>
         </tr>
         <tr>
           <td height="22" bgcolor="#999999">      
             <input type="submit" name="Submit" value="提交"> 
             <input type="reset" name="Submit2" value="还原"></td>
         </tr>
     </table></td>
   </tr>
</table>
</form>
</body>
</html>
<?php
}
?>


%%%%%%%%%%%%%%%%%建立对应连接或虚拟主机%%%%%%%%%%%%%%%%%
编辑httpd.conf
ee /usr/local/etc/apache/httpd.conf

添加虚拟主机 passwd.chb.com

<VirtualHost 192.168.0.205>
DocumentRoot /home/passwd
ServerName passwd.chb.com
<Directory "/home/passwd ">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
当然DNS里也要添加相应指向
测试FTP密码自助修改功能
http://passwd.chb.com

论坛徽章:
0
27 [报告]
发表于 2006-06-20 11:53 |只看该作者
FreeBSD全能服务器安装手册之文件服务器篇
--安装参数详解篇




--with-everything: 编译一个几乎所有特性都开启的“大”服务器。

--with-paranoidmsg: 当该参数被开启,不论何种原因登录失败都将显示同样的信息给用户。不开启该参数是,密码问题将显示“验证失败”,被禁止用户将显示“对不起,我不信任你”。

--with-virtualchroot:通常一个用户使用chrooted(使用-A 和 -a 参数)命令不会转出他的home目录。开启该功能之后将使其成为可能:符号连接总是一起作用,甚至他们指向的目录不在用户的home目录内。这对于共享路径是一个非常拥有的功能(例如,每一个home目录下都有一个符号连接到/var/incoming)。该功能默认不开启。

--with-tls \

--with-largefile: 支持在32位架构下下载大于2 gigabytes 的文件。通过FTP传输一个如此之大的文件是一个较为奇怪的主意。并且你的文件系统,你的系统内核、你的FTP客户端也需要支持才行。并且当该功能被开启后,下载将会比不开启变慢(或需要耗费更多的CPU)。简单的说,不要应为好玩而开启该功能,除非你真的计划下载大于gigabytes的文件。

--with-welcomemsg: (为兼容)其它FTP服务器pure-ftp可以阅读 'welcome.msg' 。这是一个安全的缺陷(匿名用户可以上载'welcome.msg'文件到随机显示)。Pure-ftpd 默认使用 '.banner'文件。

--with-uploadscript: 自从0.98版开始, Pure-FTPd 开始关注上传。当一个上传成功完成之后,任何额外的程序或脚本可以被自动启动。该功能需要一个称为“pure-uploadscript”的程序安装在Pure-FTPd包内。

--with-cookie: 在用户登录的时候显示随机或定制的信息。

--with-virtualhosts: 支持虚拟主机。这意味着每个IP地址可以有不同的匿名FPT区域。如果服务器只有一个IP地址,就不需要该功能。但是如果有多个IP地址,并且需要一个客户端连接到IP xxx 去获得/etc/pure-ftpd/xxx/而不是~ftp/,就可以开启该功能。

--with-virtualroot \ //虚拟root支持

--with-diraliases: 支持路径的别名。

--with-quotas: 开启虚拟限额,可以限制一个用户可以在他的帐号下存储的最大数字,也可以限制总的大小。

--with-sysquotas: 支持系统限额(非Pure-ftpd的虚拟限额)。只有在计划使用系统限额的时候启用。

--with-ratios: 支持上传/下载比。

--with-ftpwho: 支持'pure-ftpwho' 命令。开启这个功能需要额外的内存。当pure-ftp运行在standalone模式时比较好,在inetd模式下启用较慢。

--with-throttling: 支持带宽限制。


其它参数


--with-altlog: 除了系统输出,还支持一些特殊的文件格式,目前已实现了:CLF, Stats, W3C 和 xferlog 格式
CLF (通用日志格式)是Apache, WebFS, Roxen以及其它最常用 web 服务器的基本格式;该日志文件仅仅记录文件传输,可以被web流量统计软件(Analog, Webalizer, etc.) 所分析。Stats格式是一种专门为日志文件分析软件设计的特殊输出格式。W3C格式是一种商业日志分析软件(所有支持IIS日志的分析器)的标准格式。Xferlog 是一种源于wu-ftpd的格式。


--with-brokenrealpath: 一些 Solaris 版本中realpath()运行不可靠。如果altlog和(或)pure-uploadscript没有很好的运行,请用这个参数重新编译。


--with-certfile=<file>:  该file用来做SSL认证,默认为 /etc/ssl/private/pure-ftpd.pem .


--with-extauth: 支持额外的校验模块。大多数用户不需要此参数。.


所支持语言
--with-language=english
--with-language=german
--with-language=romanian
--with-language=french
--with-language=polish
--with-language=spanish
--with-language=danish
--with-language=italian
--with-language=brazilian-portuguese
--with-language=slovak
--with-language=dutch
--with-language=korean
--with-language=swedish
--with-language=norwegian
--with-language=russian
--with-language=traditional-chinese
--with-language=simplified-chinese
--with-language=hungarian
--with-language=catalan
--with-language=czech: change the language of server messages.
默认为英语。


--with-ldap: 支持原始的LDAP路径。当该功能被开启,系统帐号将被忽略。你同时需要使用OpenLDAP。如果OpenLDAP被安装在一个特定的位置,你可以使用--with-ldap=<directory> 的参数。

--with-minimal: 为了有效运用现代FTP客户端的功能,Pure-FTPd采用基本的FTP协议加扩展(SITE IDLE,SITE CHMOD, MLSD, ...)的方式 。使用 --with-minimal 参数,这些扩展间不会被编译。同样的,也就不会有standalone server, 不会有lookup for user/group names, 不会有 humor也不会有 ASCII 的支持。但是执行文件将会比默认安装更小。该参数你至少需要GCC 3.3 以上来编译。如果你还想减少(执行)文件大小,可以采用--without-globbing 关联--with-minimal参数。如果你建立一个嵌入系统,可以这样使用;在其它场合,为了避免客户的抱怨(特别是使用windows客户端的客户),请忘记它吧

--with-mysql: 使用MySQL来提供用户数据库。当开启该参数,系统帐号被忽略。使用该功能MySQL 客户端的库文件将被安装。如果MySQL安装在特殊位置,可以使用--with-mysql=<directory> 语法。

--with-nonroot: 设置服务以非root特权用户启动。任何普通用户都可以运行服务。这对于在服务器上只有一个受限帐号的情况非常有用。但是一些特性将不能使用,而且密码只能通过LDAP,SQL或PureDB进行校验。当虚拟 chroot 被开启,用户将被限制在服务启动的目录。这是一种不安全的模式,一般用于普通(非root)用户建立临时性的服务器。在standalone模式下,2121端口将被侦听。如果想采用nonroot模式,需要编译并安装该软件(./configure --prefix=... && make install-strip) . /sbin, /bin and /man 目录需要被写入 prefix,同时还需要增加运行pure-ftpd用户在 /etc 目录的读写权限。

--with-pam: 使用紧密校验模式。Don't use this option if your login/passwd pairs are always refused (but the real fix would be to
fix your PAM configuration). 需要创建一个 /etc/pam.d/pure-ftpd 文件来运用PAM校验。'pam' 路径中包含该文件的一个样本。

--with-peruserlimits: 开启每用户同时在线限制,在繁忙的服务器上避免该参数。

--with-pgsql: 使用 Postgres 提供用户数据库。当开启该参数,系统帐号将被忽略,Postgres客户端库将被安装。如果Postgres安装与特殊位置,可以使用--with-pgsql=<directory> 语法。
--with-probe-random-dev: Pure-FTPd 使用 /dev/arandom, /dev/urandom 或者/dev/random 设备来提供严格的随机数字。这些设备通常在编译时被探测。如果想编译一个二进制包在其它主机上运行,该参数将在运行时被探测。该参数在Linux和BSD系统上无效,但可以使用在Solaris 和 QNX上。

--with-puredb: 支持虚拟用户,一个本地的用户数据库,不用于系统帐号。

--with-boring: 显示 "professionnal-looking" 信息。

--with-privsep: 开启权限分离。

--withrendez-vous: 允许在MacOS X上支持Rendezvous。

--without-ascii: 不支持 7-bits 传输 (ASCII)。如果有客户使用windows客户端程序发送脚本和HTML文件,不要使用 该参数或让他们对你大叫。

--without-banner: 不使用初始标语,这是一种通过隐瞒获得的愚蠢的安全。

--without-capabilities: 如果性能库 (libcap) 被找到,Pure-FTPd 将使用其提供安全性。该参数不测试这个库是否存在。如果性能库没有正常工作,可以到ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/ 下载。

--without-globbing: 不包括全局代码。能够减少内存消耗但经常不能工作。大多数用户不需要使用--without-globbing。Globbing是一个不错的功能。

--without-humor: 如果你没有查看过源代码而使用这个参数,就只好祝你幸运了。

--without-inetd: 如果Pure-FTPd总是运行在standalone模式下,这个参数可以节约一些代码字节。不要同时使用 --without-inetd和

--without-standalone参数,可能会导致服务不能运行。这些参数在Pure-FTPd的二进制分发包上都没有使用,所以inetd和standalone都被支持。

--without-iplogging: 为了保守机密而不记录任何IP地址,除非是政治敏感的服务器。

--without-nonalnum: 非法文件名检查。只支持基本的字符。不要盲目的使用这个参数,或者接受用户的抱怨。

--without-unicode: 不接受非拉丁字符。如果服务器文件名不含特殊字符则推荐使用。

--without-sendfile: 在Linux, Solaris, HPUX 和 FreeBSD 内核, Pure-FTPd采用特殊系统调用(sendfile)尝试减少CPU和内存的使用。在大多数文件系统中该方式运行良好,但该优化并不能在所有文件系统中正常工作。用户曾经报告过SMBFS(Samba)在FreeBSD以及TmpFS和NTFS在Linux(服务器报告错误为“broken pipe”或“Error during write to data connection”)上通过Pure-FTPd下载文件失败。如果计划在上述文件系统中运行服务,就不得不使用

--without-sendfile 参数来定义一个工作区。同样来自PA-Risc Linux 的系统也需要这个参数。

--without-shadow: 忽略shadow密码,即使他们被自动探测到。这通常是一个坏主意,除非使用的是PAM, LDAP 或 SQL。Pure-FTPd 支持shadow密码有效期 (包括帐号和密码)。.

--without-standalone:  FTP 服务器能够正常地以 standalone 模式运行(没有任何超级服务)。如果不需要该功能并且想要节省一些代码字节的话,就可以开启该参数。一个类似于g2s, xinetd或tcpserver 的超级服务将强制运行该服务,但是推荐使用standalone模式。

--without-usernames: 从不在在路径列表里输出用户和组名,而代之以UIDs和GIDs。这将提高安全和性能,但会有用户觉得不够友好。

--without-capabilities: 如果性能库 (libcap) 被找到,Pure-FTPd 将使用其提供安全性。该参数不测试这个库是否存在。如果性能库没有正常工作,可以到ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/ 下载。

--without-usernames: 从不在在路径列表里输出用户和组名,而代之以UIDs和GIDs。这将提高安全和性能,但会有用户觉得不够友好。

"--prefix=" 改变安装路径,默认为 "/usr/local/".

论坛徽章:
0
28 [报告]
发表于 2006-06-20 11:54 |只看该作者
FreeBSD全能服务器安装手册之域名服务器篇之DNS(配置文件)篇

################################设置bind9.3.*##################################
BIND介绍
BIND(Berkeley Internet Name Domain)即伯克利因特网名字域系统,它是互联网软件联合会(ISC)的开放源代码软件包,BIND提供了解析器和名字服务器软件,解析器做实际的查询工作而名字服务器则提供响应, UNIX目前使用的DNS服务器主要是依靠BIND软件来实现的。

  BIND已经有三个主要版本:BIND4、BIND8和BIND9。

  BIND4在20世纪80年代末期面世,BIND 8发布于1997年,而BIND9则发布于2000年中期。没有BIND 5、6和7的版本,BIND 8是如此意义重大的一个更新版本,以至于大家觉得是使用一个老版本号两倍的版本号,而事实上并非真的如此,BIND 8与4.4 BSD是一起发布,因而所有版本号都升为8;目前BIND最新的版本是BIND9.3.0。

  BIND 8融入了许多能够提高效率、稳定性和安全性的先进技术。BIND9甚至走得更远,具有多处理器支持、线程安全操作、实时安全性(公开密钥加密)、IPv6支持、增量区传送和一些其他特性。

  BIND9是彻底重新设计和重新实现的,它将代码中针对操作系统的特定部分独立出来,因此能更容易地将BIND移植到非UNIX系统上。BIND9的内部机制有了显著不同,但是其配置步骤却保持不变。

  BIND系统由三部分组成:回答查询的称为named的守护进程;联系DNS分布式数据库的服务器解析主机查询的库例程;DNS的命令行接口:nslookup、dig和host。以DNS的术语来说,类似named的一个守护进程(或者运行它的机器)称为“名字服务器”,与其联系的客户端程序称为“解析器”。

  named配置文件的格式在BIND4和BIND 8之间发生了彻底的变化,新格式类似于gated.conf的格式。配置文件名也变了:在BIND4中是/etc/named.boot,而在BIND 8和9中/etc/named.conf,缓存文件和数据文件的格式保持不变。
##############################################################################################################################################################
%%%%%%%%%%%%%%%%%建立正反向解析目录%%%%%%%%%%%%%%

mkdir /etc/namedb/rev
mkdir /etc/namedb/hosts

%%%%%%%%%%%%%%%改变正反向解析目录属性%%%%%%%%%%%%%%

chown bind:bind /etc/namedb/rev
chown bind:bind /etc/namedb/hosts
chmod –R 755 /var/named/etc/namedb/rev
chmod –R 755 /var/named/etc/namedb/hosts
%%%%%%%%%%%%%生成正反向解析文件的例子文件%%%%%%%%%%%%
cd /etc/namedb
sh make-localhost

%%%%%%%%%%%%%%%%生成这正反向解析文件%%%%%%%%%%%%%%
cp /etc/namedb/master/localhost.rev /etc/namedb/rev/61.181.32.rev
cp /etc/namedb/master/localhost.rev /etc/namedb/hosts/tjhaina.net.hosts

%%%%%%%%%%%%%生成DNS服务器的key文件%%%%%%%%%%%%%%%
/usr/sbin/rndc-confgen > /etc/namedb/rndc.conf


%%%%%%%%%%%%%将key文件导入named.conf文件%%%%%%%%%%%%%
cd /etc/namedb
tail -n10 rndc.conf | head -n9 | sed -e s/#\ //g >> named.conf
(这个命令我也不知道为什么这么写!希望大家一起讨论)


%%%%%%%%%%%%%%%%设置DNS服务器的主域%%%%%%%%%%%%%%%
ee /etc/namedb/named.conf

zone "32.181.61.IN-ADDR.ARPA" {
        type master;
        file "/var/named/etc/namedb/rev/61.181.32.rev";
};
zone "tjhaina.net" {
        type master;
        file "/var/named/etc/namedb/hosts/tjhaina.net.hosts";
};

%%%%%%%%%%%%删除或注释掉DNS服务器的监听地址%%%%%%
ee /etc/namedb/named.conf

删除
20  listen-on               { 127.0.0.1; };
注释掉
//  listen-on               { 127.0.0.1; };
rndc reload
(由于bind9在默认的情况下只是给自己,所以要去除监听地址listen-on       { 127.0.0.1; };)

%%%%%%%%%%%%%设置DNS服务器反向解析文件%%%%%%%

ee /etc/namedb/rev/61.181.32.rev

$TTL    3600

@       IN      SOA     ns1.tjhaina.net. root.ns1.tjhaina.net.  (
                                20050430        ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
        IN      NS      ns1.tjhaina.net.
205     IN                 PTR     ns1.tjhaina.net.
205         IN                 PTR          www.tjhaina.net.
205是你的IP地址
(增加反向解析PTR记录  注意:不建议全部的域名及二级域名增加PTR记录)



%%%%%%%%%%%%%设置DNS服务器的正向解析文件%%%%%%%

ee /etc/namedb/hosts/tjhaina.net.hosts


$TTL    3600

@       IN      SOA     ns1.tjhaina.net. root.ns1.tjhaina.net.  (
                                20050621        ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
                IN      NS      ns1.tjhaina.net.
ns1                     IN      A       192.168.0.205
www             IN      A       192.168.0.205
mail                        IN                A       192.168.0.205
tjhaina.net.   IN      MX      10   mail.tjhaina.net.

(注意:MX记录的添加要先做一个mail的A记录再做MX记录。MX记录添加的原则是用你的域名指向你的mail的二级域名。不过还有其他的添加方法大家自己可以找一下相关资料)

%%%%%%%%%%%%%设置本机DNS服务器地址%%%% %%%%%%%%%%%%
ee /etc/resolv.conf

添加

nameserver        127.0.0.1
nameserver        202.99.104.68
nameserver        202.99.96.68
nameserver        61.139.9.10
nameserver        202.102.128.68
nameserver        202.103.0.117
nameserver        202.103.44.5

%%%%%%%%%%%%%启动DNS服务器%%%%%%%%%%%%%%%%%%%%%
/usr/sbin/named -gc /etc/namedb/named.conf &
(& 表示后台运行)
/usr/sbin/rndc status
(查看DNS的启动情况)

(所以选这么多DNS是考虑到了冗余设计防止万一出错)
%%%%%%%%%%%%使DNS服务器和系统一起启动%%%%%%%%
ee /etc/rc.conf
添加
named_enable="YES"

rndc reload

论坛徽章:
0
29 [报告]
发表于 2006-06-20 11:55 |只看该作者
FreeBSD全能服务器安装手册之域名服务器篇之DNS(数据库)篇


#################################下载并解压缩安装包################################
cd /usr/ports/dns/bind9

//下载bind9.3.1
make fetch

cd /usr/ports/distfiles/

//解压缩bind9.3.*
tar zxvf bind-9.3.*.tar.gz

chown -R root:wheel bind-9.3.*


###############################生成mysqldb.c文件##################################
cd /usr/ports/distfiles/bind-9.3.*/bin/named/
//生成mysqldb.c 注意:必须采用touch命令生成文件,因为有些时候用其他命令生成的文件是不能被程序识别的。
touch mysqldb.c

//编辑mysqldb.c

/* 增加以下内容(此为mysqldb.c的原版文档亦可从以下连接直*http://jaist.dl.sourceforge.net/ ... /mysql-bind-0-1.tgz)*/
#include <config.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <mysql.h>

#include <isc/mem.h>
#include <isc/print.h>
#include <isc/result.h>
#include <isc/util.h>

#include <dns/sdb.h>
#include <dns/result.h>

#include <named/globals.h>

#include "mysqldb.h"


static dns_sdbimplementation_t *mysqldb = NULL;

struct dbinfo {
  MYSQL *mysql;
  char *database;
  char *table;
  char *host;
  char *user;
  char *passwd;
};

static void
mysqldb_destroy(const char *zone, void *driverdata, void **dbdata);

/*
* Canonicalize a string before writing it to the database.
* "dest" must be an array of at least size 2*strlen(source) + 1.
*/
static void
quotestring(const char *source, char *dest) {
  while (*source != 0) {
    if (*source == '\'')
      *dest++ = '\'';
    *dest++ = *source++;
  }
  *dest++ = 0;
}

/*
* Connect to the database.
*/
static isc_result_t
db_connect(struct dbinfo *dbi) {
  dbi->mysql = mysql_init(0);
  if (!mysql_real_connect(dbi->mysql, dbi->host, dbi->user, dbi->passwd, dbi->database, 0, NULL, 0))
    return (ISC_R_FAILURE);
  return (ISC_R_SUCCESS);
}

/*
* Check to see if the connection is still valid.  If not, attempt to
* reconnect.
*/
static isc_result_t
maybe_reconnect(struct dbinfo *dbi) {
  if (dbi->mysql != NULL)
    return (ISC_R_SUCCESS);

  return (db_connect(dbi));
}

/*
* This database operates on absolute names.
*
* Queries are converted into SQL queries and issued synchronously.  Errors
* are handled really badly.
*/
static isc_result_t
mysqldb_lookup(const char *zone, const char *name, void *dbdata,
       dns_sdblookup_t *lookup)
{
  isc_result_t result;
  struct dbinfo *dbi = dbdata;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char str[1500]="";
  char *canonname;
  
  UNUSED(zone);

  canonname = isc_mem_get(ns_g_mctx, strlen(name) * 2 + 1);
  if (canonname == NULL)
    return (ISC_R_NOMEMORY);
  quotestring(name, canonname);
  snprintf(str, sizeof(str),
   "SELECT TTL,RDTYPE,RDATA FROM %s WHERE lower(NAME) = lower('%s')", dbi->table, canonname);
  isc_mem_put(ns_g_mctx, canonname, strlen(name) * 2 + 1);
  
  result = maybe_reconnect(dbi);
  if (result != ISC_R_SUCCESS)
    return (result);
  
  if (mysql_query(dbi->mysql, str)) {
    return (ISC_R_FAILURE);
  }

  if (!(res = mysql_store_result(dbi->mysql))) {
    return (ISC_R_NOTFOUND);
  }

  while ((row = mysql_fetch_row(res))) {
    char *ttlstr = row[0];
    char *type = row[1];
    char *data = row[2];
    dns_ttl_t ttl;
    char *endp;
   
    ttl = (ttlstr) ? strtol(ttlstr, &endp, 10) : 86400;
   
    if (*endp != '\0') {
      mysql_free_result(res);
      return (DNS_R_BADTTL);
    }
    result = dns_sdb_putrr(lookup, type, ttl, data);
    if (result != ISC_R_SUCCESS) {
      mysql_free_result(res);
      return (ISC_R_FAILURE);
    }
  }
  
  mysql_free_result(res);
  return (ISC_R_SUCCESS);
}

/*
* Issue an SQL query to return all nodes in the database and fill the
* allnodes structure.
*/
static isc_result_t
mysqldb_allnodes(const char *zone, void *dbdata, dns_sdballnodes_t *allnodes) {
  struct dbinfo *dbi = dbdata;
  MYSQL_RES *res;
  MYSQL_ROW row;
  isc_result_t result;
  char str[1500]="";

  UNUSED(zone);
  
  snprintf(str, sizeof(str),
   "SELECT TTL,NAME,RDTYPE,RDATA FROM %s ORDER BY NAME",
   dbi->table);
  
  result = maybe_reconnect(dbi);
  if (result != ISC_R_SUCCESS)
    return (result);
  
  mysql_select_db(dbi->mysql,dbi->database);
  if (mysql_query(dbi->mysql, str)) {
    return (ISC_R_FAILURE);
  }
  if (!(res = mysql_store_result(dbi->mysql))) {
    return (ISC_R_NOTFOUND);
  }
  while ((row = mysql_fetch_row(res))) {
    char *ttlstr = row[0];
    char *name = row[1];
    char *type = row[2];
    char *data = row[3];
    dns_ttl_t ttl;
    char *endp;

    ttl = (ttlstr) ? strtol(ttlstr, &endp, 10) : 86400;
   
    if (*endp != '\0') {
      mysql_free_result(res);
      return (DNS_R_BADTTL);
    }
    result = dns_sdb_putnamedrr(allnodes, name, type, ttl, data);
    if (result != ISC_R_SUCCESS) {
      mysql_free_result(res);
      return (ISC_R_FAILURE);
    }
  }
  
  mysql_free_result(res);
  return (ISC_R_SUCCESS);
}

/*
* Create a connection to the database and save any necessary information
* in dbdata.
*
* argv[0] is the name of the database
* argv[1] is the name of the table
* argv[2] (if present) is the name of the host to connect to
* argv[3] (if present) is the name of the user to connect as
* argv[4] (if present) is the name of the password to connect with
*/
static isc_result_t
mysqldb_create(const char *zone, int argc, char **argv,
       void *driverdata, void **dbdata)
{
  struct dbinfo *dbi;
  isc_result_t result;
  
  UNUSED(zone);
  UNUSED(driverdata);
  
  if (argc < 2)
    return (ISC_R_FAILURE);
  
  dbi = isc_mem_get(ns_g_mctx, sizeof(struct dbinfo));
  if (dbi == NULL)
    return (ISC_R_NOMEMORY);
  dbi->mysql = NULL;
  dbi->database = NULL;
  dbi->table = NULL;
  dbi->host = NULL;
  dbi->user = NULL;
  dbi->passwd = NULL;
  
#define STRDUP_OR_FAIL(target, source)\
do {\
target = isc_mem_strdup(ns_g_mctx, source);\
if (target == NULL) {\
result = ISC_R_NOMEMORY;\
goto cleanup;\
}\
} while (0);
  
  STRDUP_OR_FAIL(dbi->database, argv[0]);
  STRDUP_OR_FAIL(dbi->table, argv[1]);
  if (argc > 2)
    STRDUP_OR_FAIL(dbi->host, argv[2]);
  if (argc > 3)
    STRDUP_OR_FAIL(dbi->user, argv[3]);
  if (argc > 4)
    STRDUP_OR_FAIL(dbi->passwd, argv[4]);
  
  result = db_connect(dbi);
  if (result != ISC_R_SUCCESS)
    goto cleanup;
  
  *dbdata = dbi;
  return (ISC_R_SUCCESS);
  
cleanup:
  mysqldb_destroy(zone, driverdata, (void **)&dbi);
  return (result);
}

/*
* Close the connection to the database.
*/
static void
mysqldb_destroy(const char *zone, void *driverdata, void **dbdata) {
  struct dbinfo *dbi = *dbdata;
  
  UNUSED(zone);
  UNUSED(driverdata);
  
  if (dbi->mysql != NULL)
    mysql_close(dbi->mysql);
  if (dbi->database != NULL)
    isc_mem_free(ns_g_mctx, dbi->database);
  if (dbi->table != NULL)
    isc_mem_free(ns_g_mctx, dbi->table);
  if (dbi->host != NULL)
    isc_mem_free(ns_g_mctx, dbi->host);
  if (dbi->user != NULL)
    isc_mem_free(ns_g_mctx, dbi->user);
  if (dbi->passwd != NULL)
    isc_mem_free(ns_g_mctx, dbi->passwd);
  if (dbi->database != NULL)
    isc_mem_free(ns_g_mctx, dbi->database);
  isc_mem_put(ns_g_mctx, dbi, sizeof(struct dbinfo));
}

/*
* Since the SQL database corresponds to a zone, the authority data should
* be returned by the lookup() function.  Therefore the authority() function
* is NULL.
*/
static dns_sdbmethods_t mysqldb_methods = {
mysqldb_lookup,
NULL, /* authority */
mysqldb_allnodes,
mysqldb_create,
mysqldb_destroy
};

/*
* Wrapper around dns_sdb_register().
*/
isc_result_t
mysqldb_init(void) {
  unsigned int flags;
  flags = 0;
  return (dns_sdb_register("mysql", &mysqldb_methods, NULL, flags,
   ns_g_mctx, &mysqldb));
}

/*
* Wrapper around dns_sdb_unregister().
*/
void
mysqldb_clear(void) {
  if (mysqldb != NULL)
    dns_sdb_unregister(&mysqldb);
}




####################################################################################


#############################生成mysqldb.h文件#####################################
cd /usr/ports/distfiles/bind-9.3.*/bin/named/include/
touch mysqldb.h
ee mysqldb.h

#include <isc/types.h>
isc_result_t mysqldb_init(void);
void mysqldb_clear(void);

###############################改变文件的运行权限###################################

chmod 755 /usr/ports/distfiles/bind-9.3.*/bin/named/mysqldb.c

chmod 755 /usr/ports/distfiles/bind-9.3.*/bin/named/include/mysqldb.h

#################################修改Makefile.in####################################


ee /usr/ports/distfiles/bind-9.3.*/bin/named/Makefile.in


从26行开始
# Add database drivers here.
#
DBDRIVER_OBJS =
DBDRIVER_SRCS =
DBDRIVER_INCLUDES =
DBDRIVER_LIBS =


改成


DBDRIVER_OBJS = mysqldb.@O@
DBDRIVER_SRCS = mysqldb.c
DBDRIVER_INCLUDES = -I'/usr/local/include/mysql'
DBDRIVER_LIBS = -L'/usr/local/lib/mysql' -lmysqlclient




#################################修改main.c ####################################
ee /usr/ports/distfiles/bind-9.3.*/bin/named/main.c


添加
#include <mysqldb.h>


################################注册mysqldb_init();################################

寻找: register
         * Add calls to register sdb drivers here.
         */
        /* xxdb_init(); */
        mysqldb_init();
        ns_server_create(ns_g_mctx, &ns_g_server);



寻找: unregister

################################注册mysqldb_clear();################################
        /*
         * Add calls to unregister sdb drivers here.
         */
        /* xxdb_clear(); */
        mysqldb_clear();
        isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,
                      ISC_LOG_NOTICE, "exiting");
        ns_log_shutdown();




#################################安装bind9.3.2######################################
cd /usr/ports/distfiles/bind-9.3.*

./configure

make

make install
make clean



#################################配置bind9.3.2######################################

/usr/local/sbin/rndc-confgen > /etc/namedb/rndc.conf
cd /etc/namedb
tail -n10 rndc.conf | head -n9 | sed -e s/#\ //g >> named.conf

###############################建立bind数据库######################################
mysql -uroot -ppassword

CREATE DATABASE bind9;

GRANT select,insert,update,delete,create,drop ON bind9.* TO bind9user@localhost IDENTIFIED BY 'password';

use bind9;

CREATE TABLE mydomain (
  name varchar(255) default NULL,
  ttl int(11) default NULL,
  rdtype varchar(255) default NULL,
  rdata varchar(255) default NULL
) TYPE=MyISAM;

###############################插入事例数据文件#####################################
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'SOA', 'mydomain.com. www.mydomain.com. 200309181 28800 7200 86400 28800');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns0.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns1.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.');
INSERT INTO mydomain VALUES ('w0.mydomain.com', 259200, 'A', '192.168.1.1');
INSERT INTO mydomain VALUES ('w1.mydomain.com', 259200, 'A', '192.168.1.2');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('mail.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ns0.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ns1.mydomain.com', 259200, 'Cname', 'w1.mydomain.com.');
INSERT INTO mydomain VALUES ('www.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ftp.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');




#############################在named.conf中加入主域################################
ee /var/named/etc/namedb/named.conf
zone "mydomain.com" {
  type master;
  notify no;
  database "mysql bind9 mydomain localhost bind9user password";
};


%%%%%%%%%%%%删除或注释掉DNS服务器的监听地址%%%%%%
ee /var/named/etc/namedb/named.conf

删除
20  listen-on               { 127.0.0.1; };
注释掉
//  listen-on               { 127.0.0.1; };
rndc reload
(由于bind9在默认的情况下只是给自己,所以要去除监听地址listen-on       { 127.0.0.1; };)

%%%%%%%%%%%%%设置本机DNS服务器地址%%%% %%%%%%%%%%%%
ee /etc/resolv.conf  

添加

nameserver                      127.0.0.1
nameserver                      211.98.2.4
nameserver                         202.99.104.68
nameserver                         202.99.96.68
nameserver                         202.102.128.68
nameserver                         202.103.0.117
nameserver                         202.103.44.5

(所以选这么多DNS是考虑到了冗余设计防止万一出错)
###################################停止系统默认的bind###############################
mv /usr/sbin/named /usr/sbin/named.dist
mv /usr/sbin/rndc /usr/sbin/rndc.dist
mv /usr/sbin/dnssec-keygen /usr/sbin/dnssec-keygen.dist
mv /usr/sbin/dnssec-signzone /usr/sbin/dnssec-signzone.dist
mv /usr/sbin/named-checkconf /usr/sbin/named-checkconf.dist
mv /usr/sbin/named-checkzone /usr/sbin/named-checkzone.dist
mv /usr/sbin/rndc-confgen /usr/sbin/named-checkzone.dist
##################################启用新安装的bind###################################
ln -s /usr/local/sbin/named /usr/sbin
ln -s /usr/local/sbin/rndc /usr/sbin
ln -s /usr/local/sbin/dnssec-keygen /usr/sbin
ln -s /usr/local/sbin/dnssec-signzone /usr/sbin
ln -s /usr/local/sbin/named-checkconf /usr/sbin
ln -s /usr/local/sbin/named-checkzone /usr/sbin
ln -s /usr/local/sbin/rndc-confgen /usr/sbin
ln -s /var/named/etc/namedb/rndc.conf /etc/rndc.conf


####################################运行bind########################################
/usr/local/sbin/named -gc /etc/namedb/named.conf &

####################################测试bind运行情况################################
www# nslookup
> w1.mydomain.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   w1.mydomain.com
Address: 192.168.1.2
>
%%%%%%%%%%%%使DNS服务器和系统一起启动%%%%%%%%
touch /usr/local/etc/rc.d/named.sh
ee /usr/local/etc/rc.d/named.sh
增加
/usr/local/sbin/named -gc /etc/namedb/named.conf &
chmod 755 named.sh
############################设置系统服务启动顺序#####################################
cd /usr/local/etc/rc.d/
mv webmin.sh 001.webmin.sh
mv mysql.-server.sh 002.mysql.-server.sh
mv apache.sh 003.apache.sh
mv named.sh 004.named.sh

%%%%%%%%%%%%%%%%%%%%%删除无用启动脚本%%%%%%%%%%%%%%%%%%%%
rm webmin.sh
rm mysql.-server.sh
rm apache.sh
rm named.sh

论坛徽章:
0
30 [报告]
发表于 2006-06-20 11:56 |只看该作者
FreeBSD全能服务器安装手册之邮件服务器篇
--选择邮件系统的准则

电子邮件服务器选购
目前, 市场上有多种 Internet 邮件服务器产品供选择, 这些邮件服务器产品价格各异, 所提供的功能也有不少差别。 对于网络管理员来说, 如何根据自身业务的需求, 选择功能完备、价格合理的邮件服务器产品, 是一个多因素的综合决策问题。 选择邮件服务器时, 虽然需要考虑的因素有许多, 但主要应该着重考察产品的系统支持能力、服务协议支持能力、多邮件服务器支持能力、用户管理能力、邮箱 管理能力、客户端软件支持能力、通信能力、安全防护能力、系统管理能力、版本、 价格、升级与售后服务等以下十二个因素。
一、 系统支持能力

无论选择何种计算机产品, 系统的支持能力都是首先必须考虑的问题, 硬件产品如此, 软件产品同样如此。对于邮件服务器来说, 在系统支持能力方面应该考察以下 三个问题:

1) 服务器运行平台支持能力

对于一个软件服务器产品来说, 其运行平台的支持能力无非是单平台和跨平台两种。 如果一个网络管理员管理的网络支持多种操作系统并存运行, 且具有多个各自独立管理的邮件服务器, 则在必须考虑各个邮件服务器 协同工作和统一管理的方便时, 建议优先考虑跨平台产品。 否则, 可以仅考虑满足自己所使用平台的产品。

2) 业务处理能力

一些邮件服务器产品常常分为企业版本和标准版本,两者的产品价格有很大差别。前者主要供具有大量用户和有众多业务需要处理的集团用户使用,后者供中小规模的 集团用户使用。

3) 系统处理能力

邮件服务器的系统处理能力, 是指它在利用系统硬件平台和软件平台进行信息处理的能力。 针对支持多 CPU 的服务器平台, 目前一些邮件服务器可以对系统的进程 数量、每个进程所容许的客户连接数量、每个进程所允许的线程数量进行设置。

4) 负载均衡支持能力

为了适应用户业务量扩充的需要, 现在一些邮件服务器产品还具备一定程度的同平台下多服务器负载均衡支持能力。在这种工作模式下, 网络管理员可以根据业务需 求的增长, 随时添加邮件服务器, 经过适当的系统配置以后, 可以让多台服务器共同分担邮件业务处理工作。

二、 服务协议支持能力

邮件服务器是一种 Internet 网络服务软件产品, 而支撑着 Internet 众多网络服务的是各种服务协议。在选择邮件服务器产品的时候, 考察它在支持服务协议方面的能力, 是衡量产品性能的重要指标。

与邮件服务器产品有关的网络服务协议主要有以下6个:

1) SMTP 协议

SMTP 协议是简单的邮件传输协议(Simple Mail Transfer Protocol) 的缩写。这是最早出现的, 也是被普遍使用的最基本 Internet 邮件服务协议。

2) POP3 协议

POP 协议是邮局协议 (Post Office Protocol) 的缩写, 是一种允许用户从邮件服务器收发邮件的协议。与 SMTP 协议相结合, POP3 是目前最常用的电子邮件服务协议。

3) IMAP4 协议

IMAP 协议是 Internet 消息访问协议 (Internet Message Access Protocol) 的缩写, 现在常用的是版本 4, 它为用户提供了有选择的从邮件服务器接收邮件的功能、基于服务器的信息处理功能和共享信箱功能。 IMAP4 在用户登录到邮件服务器以后, 允许采取多段处理方式查询邮件。首先, 用户可以仅读取电子邮箱中的邮件信头(Message header); 然后, 用户可以选 择下载指定的邮件或者全部邮件。 IMAP4 在邮件服务器一端为用户保留邮件。

4) HTTP 协议和 HTML 语言

HTTP 协议是超级文本传输协议 (HyperText Transfer Protocol) 的缩写, 支持这个协议的邮件服务器, 可以提供通过 Web 的电子邮件收发服务。

5) MIME 协议

MIME 是多用途 Internet 邮件扩展 (Multipurpose Internet Mail Extensions) 协议的缩写。作为对 SMTP 协议的扩充, MIME 规定了通过 SMTP 协议传输非文本电子邮件附件的标准。目前, MIME 的用途早已经超越了收发电子邮件的范围, 成为在 Internet 上传输多媒体信息的基本协议之一。

6) LDAP 协议

LDAP 协议是轻量目录访问协议 (Lightweight Directory Access Protocol) 的缩写。通过将相关的内容存放在统一的目录之下, 目录服务为用户提供了基于客户/服务器工作方式的信息查询手段。

三、 多邮件服务器支持能力
支持多邮件服务器有两个方面的含义, 在物理上支持多个邮件服务器协同工作 和在逻辑上支持多个虚拟邮件服务器, 后者也称为多域邮件服务。
在物理上支持多个邮件服务器协同工作, 意味着该产品可以在复杂网络环境中, 构建多层次邮件服务。对于一个大型机构, 除了有企业级邮件服务器外, 还允许各个部门自行建立和管理部门级邮件服务器。企业级邮件服务器对外直接与 Internet 连接, 对内连接各个部门邮件服务器, 是纵向邮件服务的总汇节点。
所谓多域邮件服务, 就是通过一台物理服务器, 为多个独立注册 Internet 域名的机构或部门提供电子邮件服务。在外界看来, 这些机构或部门好象拥有自己专用的邮件服务器。所以, 它又称为虚拟邮件服务器。

四、 其他服务支持能力

1) 邮件寻呼服务

提供这种服务的邮件服务器在收到用户的电子邮件时, 可以根据发信人的要求, 将电子邮箱收到新邮件的情况或简单内容发送到收信人的寻呼机上或是手机上。

2) 邮件到传真机服务

有的邮件服务器还提供选件, 可以根据发信人的要求, 将电子邮箱收到的邮件发送到收信人指定的传真机上。

3) 邮件用户组服务

邮件用户组 (Mailing list) 服务又称为邮件列表, 是一种通过电子邮件进行专题信息交流的网络服务。

4) 网络新闻服务

网络新闻 (Network News) 是 Internet 上有共同爱好的用户, 为了相互交换意见组成的一种无形的用户交流网络。

5) 多语言服务

有的邮件服务器还提供多语言服务支持能力, 允许管理员和用户输入多种语言的定制文字信息, 并根据用户的国别特征自动选择相应的语言提供服务。

五、 用户管理能力

对于提供网络服务的系统管理员而言, 用户管理是最基本的管理。用户的管理首先是用户帐户的管理。 通常一个用户帐户包括一系列属性, 如帐户名称、帐户登录 密码、用户名称、帐户建立日期、帐户隶属的用户组、帐户电子邮箱的大小等。

考察一个邮件服务器的用户帐户管理功能, 首先应该注意其用户帐户类型的支持能力。目前邮件服务器支持的常见用户帐户类型包括普通帐户、别名帐户、转信帐户、自动信件回复帐户、匿名帐户和可编程机器人帐户等。

普通帐户是用户收发 电子邮件基本条件, 其帐户名称与邮件服务器的 Internet 主机域名, 构成了该用户的电子邮箱地址。

由于业务需要, 用户常常需要使用别名帐户 (Aliase Account)。 一个别名帐户通常 和一个或多个普通帐户相关联。 别名帐户收到电子邮件后, 会立即将其转发到与之相关 联的普通帐户。

当一个帐户被设置成为转信帐户 (Forwarding Account) 的时候, 它会将所接收的电子邮件自动转发到指定电子邮箱中。

被设置为自动信件回复帐户 (Autoresponder) 的电子邮箱,可以在收到信件后 按照事先设定的内容进行回复。

当需要通过公共电子邮箱提供信息查询服务的时候, 就需要用到匿名帐户 (Anonymous)。匿名帐户没有 密码。 任何人都可以阅读放入该邮箱的信件。

可编程机器人帐户 (Robot Account) 是目前一些邮件服务器提供的新功能。这里 的 "机器人" 是指可以被所接收电子邮件触发的计算机程序。当可编程机器人帐户的电子邮箱接收到信件的时候, 该程序立即启动, 按照程序设定的功能进行邮件自动处理。

考察邮件服务器的用户帐户管理功能, 还应该注意所提供的用户帐户建立方法。

手工输入建立用户帐户是最基本的方法。为了与所使用的操作系统平台更好的相结合, 现在许多邮件服务器还提供了直接沿用或引入操作系统用户的方法。

用户帐户信息如何保存, 维护、备份是否方便是邮件服务器用户管理能力的另一个侧面。 邮件服务器的用户帐户信息保存方式主要有两种: 建立专用用户数据库和使用操作系统用户数据库。

一个功能完备的邮件服务器产品, 应该为管理员提供用户帐户管理的多种手段。现在许多邮件服务器产品除了允许管理员 在本机登录进行用户信息维护外, 还允许管理员使用 Web 浏览器通过网络远程登录进行用户管理操作。允许用户自行维护个人帐户信息, 也是邮件服务器不可缺少的功能。

六、 邮箱管理能力

考察邮件服务器的邮箱管理能力时, 应该特别注意产品在为用户建立邮箱时 的存储方式。 目前主要有三种类型: 第一种是集中存放。 第二种是为每个用户邮箱建立一个计算机文件子目录。 第三种是为每个用户邮箱建立一个计算机文件。

在考察邮箱存储方式时, 还应该注意是否支持跨越物理磁盘存放。 能够并行访问多个物理磁盘的系统, 可以提供更高的用户服务响应速度。

1) 单一邮箱和多邮箱

由于所采用的邮件服务协议不同, 邮件服务器为每个用户提供的邮箱或者邮箱文件夹是不一样的。

2) 邮箱容量控制

为每个用户提供多大的邮件存储空间, 不同的邮件服务器提供了不同的设置手段。制约邮箱容量的最终硬件条件是可以使用的磁盘空间。

3) 收信邮箱管理

如何管理用户收信邮箱中的信件, 不同的邮件服务器提供的功能也不相同。对于政府部门或商业机构来说, 通常将电子邮件视为机构的财产, 不允许雇员使用机构的电子邮件系统收发与业务无关的私人信件。因此, 机构希望邮件服务器的管理员保留对用户邮件的监察权。这并不牵涉侵犯个人隐私权的问题。但是对于直接向个人提供公众电子邮件服务的机构来说, 就应该注意这个问题。

4) 发信邮箱管理

发信邮箱也称为发信队列。对于等待发送的信件, 邮件服务器应该提供的可设置功能包括投送间隔、重发间隔和次数、保留时间、无法投递信件处理方法等。是否具备对用户所发送邮件监察的功能,也是选择邮件服务器需要考虑的因素之一。 有的邮件服务器还可选择是否将所发送邮件的副本,送入管理员指定的位置存放备查。

七、 客户端软件支持能力

邮件服务器所支持的客户端邮件收发软件, 主要与服务器所使用的服务协议有关。 通常支持的有 SMTP/POP3 客户和 IMAP 客户, 有的还支持 Web 浏览器客户。

八、 通信能力

选择邮件服务器的时候,在通信方面进行考察主要涉及三个方面:

1) 连接方式支持能力

为了收发电子邮件, 邮件服务器通常工作在通过专线与 Internet 始终保持连接的 模式下。 如果一个机构的局域网, 是通过电话拨号与 Internet 服务供应商 ISP 的服务线路连接, 机构在局域网建立的邮件服务器作为邮件转发的中继, 那么就需要邮件服务器具备电话拨号通信支持能力。

2) 接入控制能力
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP