Debian伺服器設置入門》系列教程

火星人 @ 2014-03-09 , reply:0






打造Debian伺服器系列






《Debian伺服器設置入門》系列教程

作者:kanaka [冷罡華]

聯繫:kanaka@yeah.net,leng@haier.com

版本:0.20

版權:GPL

最后修改:2002年11月15日


總目錄


更新記錄


2002年11月15日,0.2版.

  修改了一些錯誤;去掉了每章的版本號信息,統一全文版本;加上了總目錄和各章的目錄,方便閱讀.


2002年11月13日,0.1版全文寫作完畢.


總目錄








前 言


第一章 在Debian上配置Apache MySQL PHP4


第二章
在Debian上用Wu-ftpd配置FTP伺服器


第三章 在Debian上用Exim配置郵件伺服器


第四章 在Debian上配置Samba伺服器


第五章 在Debian上用

Bind配置DNS伺服器


 








 





《Debian伺服器設置入門》系列教程之前言


前 言









本章目錄



1 準備工作


2 一些廢話


3
系列文章


4 溝通













1 準備工作


1.1 你需要先安裝Debian 3.0(Woody)基本系統,我建議你僅僅安裝基本系統就可以了,保持一個清潔的Debian.然後你運行一下apt-get
update,以便系統生成可以安裝的軟體的列表.

  建議你保留你的計算機名字為Debian,域名為test.com.我就是這麼做的,我的文章裡面也會這麼寫,,如果你的計算機也做同樣設置,看起文章來會省點勁兒.


1.2 最起碼,你需要掌握這幾條命令的用法:apt-get
install / apt-get remove
/ apt-cache search .




2 一些廢話



2.1 由來



  我出生在農村,家裡窮,頭一次接觸計算機是1996年,那是大二的下學期,我們專業上開了Basic語言的課程.1998年我畢業了,這年冬天,我第一次接觸了GNU/Linux.那時接觸的是TurboLinux.第一次接觸Debian,是在2002年10月.相見恨晚吶!這是我見過的最優秀的發行版!完全的可定製!給你充分的自由!

  Debian的特性,安裝和配置軟體極為簡單.然而,網路上的眾多教程,很少有基於Debian作介紹的,對於初學者來說,他們需要基於Debian寫的教程;更重要的原因是,我遇到了一個叫做linuxsir.com的論壇,我由衷的說,這是我在國內見過的最優秀的論壇!大家努力營造了一個非常好的學習氣氛,它能連續不斷得給我感動.當我看到眾多Debian的初學者心急如焚時,我就決定,寫一些教程,遵循GPL,以我微薄之力,回饋linuxsir.com給我的幫助,並一同感謝全世界為了Debian默默耕耘的朋友,於是我就開始寫了.

  接觸Debian時間太短了,難免疏漏,請高手們不要客氣,給我指出來,以便我成長,呵呵.


2.2 本文的組織方法



  我將力求用最簡潔的語言,說明我想說的東西.我很反感那些晦澀的文章.但是為了照顧初學者,我會寫得盡量詳細.



2.2.1 控制台命令



  在Linux控制台上輸入的命令,用黑色背景、紅色文字

表示;系統回顯的內容用灰色,這樣最接近Linux控制台的顏色.在MySQL控制台裡面,輸入的命令用紫色,MySQL回顯的內容用灰色,以示區別.像這樣:






$

cp


cp: missing file arguments

Try `cp --help' for more information



$ mysql test



mysql>
select * from test.table1

ERROR 1146: Table 'test.table1' doesn't exist

mysql>

  另外,初學者注意:

  用$符號開頭的,是以普通用戶身份執行的命令;

  用#符號開頭的,是以root身份執行的命令.

  當然,在默認情況下,凡是普通用戶可以執行的命令,root都可以執行.



2.2.2 配置文件



  配置文件的內容,將用淺黃色背景,以免混淆.像這樣:






deb
ftp://202.118.66.14/debian sid main non-free contrib

deb-src ftp://202.118.66.14/debian sid main non-free contrib



deb http://security.debian.org/ stable/updates main contrib non-free


  上面列出了我所使用的sources.list,這個站點是debian在中國的某所大學的鏡像,非常快.另外大家注意我用的是sid,如果你用stable,可能我們下載得到的軟體的版本就會不同.






3 系列文章




  本文是一個系列,將包括下面的部分:


  第一章 Web伺服器 資料庫伺服器

  第二章 FTP伺服器

  第三章 郵件伺服器

  第四章 Samba伺服器

  第五章 域名伺服器



4 溝通



  有任何問題,請與作者聯繫,leng@haier.com,或者kanaka@yeah.net.





《Debian伺服器設置入門》系列教程之第一章:Web伺服器 資料庫伺服器

第一章 在Debian上配置Apache MySQL PHP4


本章目錄



1 選擇Apache MySQL PHP4


2 安裝


3 配置


4 綜合測試



5 結束語





1 選擇Apache MySQL PHP4



  你可能會問我:為什麼不選擇別的軟體,而非得選擇Apache MySQL PHP4的組合?呵呵,我要告訴你,著名的Free
Lamp組合,說的就是Linux/Apache/MySQL/PHP/Perl/Python,你可以到www.freelamp.com上面去看看.PHP在互聯網上的應用,正成燎原之勢.如果作Web開發,在我看來,別無選擇,就是PHP.詳細情況可以到www.php.net上面去了解.MySQL非常輕便,性能卓越.Apache就不必多說了,互聯網上沒有幾個Web站點不用它.



2 安裝



  在Debian上安裝軟體,真的是非常簡單.不需要configure,不用make,不用make
install,遍布全球的Debian的工作人員已經為你做好了一切.



  你可以一口氣把這些軟體全部裝上:






# apt-get
install apache php4 php4-gd php4-mysql mysql-server mysql-client

  其中,php-gd是一個非常棒的圖形庫,如果你不需要使用php生成動態圖片,就不用裝.

  這時,系統會自動列出一些相關的軟體,然後問你是不是要繼續(說Debian棒,這是其中一點:自動查找軟體關聯,自動補充安裝)——Debian給你一次反悔的機會,如果你現在不想裝了,那麼按n,就退出來了.

  當然我們在這裡要按回車,繼續安裝.現在Debian會到你的sources.list裡面指定的站點去下載這些軟體.下載完后,會自動進行配置,配置過程中會徵求你的意見,問你幾個問題.



  比如現在他就問你:你要在計算機啟動時就運行MySQL嗎?當然選Yes了,否則每次要用的時候才啟動,怪麻煩的.

  又問你:你想運行apacheconfig腳本嗎?默認是N,不過我們輸入Y讓它替我們配置一下.配置完后,問你是否保存配置,當然是了,呵呵.然後,他會問你是否要啟動Apache,好,啟動它.

  接著,系統會自動配置PHP.你選擇了php-gd和php-mysql,他會問你是否把gd.so和mysql.so的支持寫入php.ini,回答是.你看,Debian聰明吧.



3 配置



3.1 配置Apache



3.1.1 提供php支持



  Apache剛裝上的時候不提供php支持.當你點擊有.php腳本的連接,瀏覽器會下載這個腳本:-(

  修改/etc/apache/httpd.conf,以便提供php支持.運行:






#
nano /etc/apache/httpd.conf

  順便提一下,我非常喜歡這個叫做nano的編輯器,它很容易上手.

  使用nano的ctrl w功能找到下面這一行:






#
LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

  把這一行前面的井號去掉,以便apache載入這個libphp4.so模塊.



  然後,配置默認頁,找到:






DirectoryIndex
index.html index.htm index.shtml index.cgi

  改成:






DirectoryIndex
index.php index.php3 index.html index.htm index.shtml index.cgi

  然後再加上.php3擴展名的支持和php源碼支持,找到:






#

# And for PHP 4.x, use:

#

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

  把後面兩行修改成:






#

# And for PHP 4.x, use:

#

AddType application/x-httpd-php .php .php3

AddType application/x-httpd-php-source .phps

3.1.2
修改默認字符集



  讓Apache把簡體中文作為默認的字符集.找到這一行:






AddDefaultCharset
on

  修改成:






AddDefaultCharset
gb2312

  好,Apache就配置完了,按ctrl o保存后,再按ctrl x退出nano.

  為了使我們的修改生效,需要重新啟動Apache,運行:






#
apachecrl restart

3.2
MySQL配置



3.2.1 修改MySQL的口令



  MySQL默認沒有口令,為了安全起見,一定要修改你的口令!

  先來看看你的mysql是不是真的沒有口令:






$

mysqladmin version



  如果你能夠看到mysql的版本信息,證明目前MySQL沒有口令.



  好,運行mysqladmin password xxxxxx 修改口令:






#
mysqladmin password xxxxxx

  這裡xxxxxx是你的新口令.

  現在你需要運行 mysqladmin version --user=root --pass,然後輸入口令,才能查看版本號等信息.

  注意,上面命令中的--user=root --pass這一部分,可以簡寫為-u
root -p.我們來測試一下,看口令是否生效:






#

mysqladmin version -u root -p

Enter
password:

3.2.2
打開3306埠監聽



  這項工作要慎重.處於安全考慮,默認情況下,Debian把3306埠關閉了.,不少黑客通過它來攻擊你的系統.如果你不通過其他機器來存取資料庫,那麼不要打開這個埠.

  修改/etc/mysql/my.cnf,找到:






skip-networking

  把它註釋掉:






#
skip-networking

3.2.3
修改默認字符集

  

  讓MySQL把簡體中文作為默認的字符集.編輯/etc/init.d/mysql,找到這一行:






/usr/bin/safe_mysqld
> /dev/null 2>&1 &

  改成:






/usr/bin/safe_mysqld
> --default-character-set=gb2312 /dev/null 2>&1 &

  好,重新啟動MySQL:






#

/etc/init.d/mysql restart



3.3 PHP配置


  主要是要修改php的默認字符集,把它改成簡體中文.編輯/etc/php4/apache/php.ini:








#
nano /etc/php4/apache/php.ini



  找到 ;default_charset = "iso-8859-1"這一行:






;default_charset
= "iso-8859-1"

  把前面的分號去掉,並改成:
default_charset = "gb2312"






default_charset
= "gb2312"

4 綜合測試



  好了,安裝完了,我們來測試一下.

  這一部分,高手完全可以略過.我主要考慮到初學者,才寫了這些.



4.1 建立一個資料庫



  下面我們來創建一個簡單的資料庫,這個庫裡面只有一張表,叫做user,用來存放用戶名/明文密碼/出生日期/激活狀態.







#
mysql -u root -p

Enter password:


mysql> CREATE DATABASE
mytest;

Query OK, 1 row affacted (0.00 sec)


mysql> USE
mytest;

Database changed


mysql>

CREATE TABLE user (


->
username varchar(16) NOT NULL default '',

->
password varchar(16) binary NOT NULL default '',

->
birthday date NOT NULL
default '1975-12-31',


->
actived int(1) NOT NULL default
'0',


->
UNIQUE KEY username (username)

->
);


Query OK, 0 row affected (0.00 sec)


mysql> INSERT INTO user VALUES
('kanaka','kanakapswd','1975-09-18',0);

Query OK, 1 row affected (0.01 sec)



mysql>
INSERT INTO user VALUES
('atfa','atfapswd','1977-10-30',1);

Query OK, 1 row affected (0.00 sec)




mysql>
quit

Bye



4.2 編寫一個php腳本




  下面我們來編寫一個簡單的php腳本,來調用上面資料庫裡面的內容.文件名比如叫做mytest.php.







<?php



$dbname='mytest';

$tablename='user';

$page=0;

$rowperpage=20;



mysql_connect("localhost", "root", "您的密碼");



//下面這個viewData函數,是自己編的,用來顯示數據

//從某種程度上講,本程序起關鍵作用的就這麼一句:

viewData($dbname,$tablename,$page,$rowperpage);





////////////////////////////////////////////////

//

//
往下僅僅是定義了兩個函數而已,你可以不去看他
///

//

////////////////////////////////////////////////





//定義一個函數,用來返回查詢狀態

function echoQueryResult() {

global $queryStr, $errMsg;



if( $errMsg == "" ) $errMsg = "成功";

if( $queryStr != "" ) {

echo "<table cellpadding=5>n";

echo "<tr><td>查詢:</td><td>$queryStr</td></tr>n";

echo "<tr><td>結果:</td><td>$errMsg</td></tr>n";

echo "</table><p>n";

}

}





//定義一個函數,用來顯示數據


function viewData($dbname,$tablename,$page,$rowperpage) {

global $mysqlHandle, $PHP_SELF, $errMsg, $orderby;



echo "<h2>下面是您所查的數據:</h2>n";



$queryStr = stripslashes( $queryStr );

if( $queryStr == "" ) {

$queryStr = "SELECT * FROM $tablename";

if( $orderby != "" )

$queryStr .= " ORDER BY $orderby";

}



$pResult = mysql_db_query( $dbname, $queryStr );

$errMsg = mysql_error();



$GLOBALS[queryStr] = $queryStr;



if( $pResult == false ) {

echoQueryResult();

return;

}

if( $pResult == 1 ) {

$errMsg = "成功";

echoQueryResult();

return;

}



echo "<hr>n";



$row = mysql_num_rows( $pResult );

$col = mysql_num_fields( $pResult );



if( $row == 0 ) {

echo "沒有數據!表格是空的.";

return;

}



if( $rowperpage == "" ) $rowperpage = 20;

if( $page == "" ) $page = 0;

else $page--;

mysql_data_seek( $pResult, $page * $rowperpage );



echo "<table cellspacing=1 cellpadding=2>n";

echo "<tr>n";

echo '<th bgcolor="#FFCC66">';

echo "用戶名n";

echo "</th>n";

echo '<th bgcolor="#FFCC66">';

echo "口令n";

echo "</th>n";

echo '<th bgcolor="#FFCC66">';

echo "出生日期n";

echo "</th>n";

echo '<th bgcolor="#FFCC66">';

echo "是否激活n";

echo "</th>n";

echo "</tr>n";





for( $i = 0; $i < $rowperpage; $i ) {

$rowArray = mysql_fetch_row( $pResult );

if( $rowArray == false ) break;

echo "<tr>n";

$key = "";

for( $j = 0; $j < $col; $j ) {

$data = $rowArray[$j];



$field = mysql_fetch_field( $pResult, $j );

if( $field->primary_key == 1 )

$key .= "&" . $field->name . "=" . $data;



if( strlen( $data ) > 30 )

$data = substr( $data, 0, 30 ) . "...";

$data = htmlspecialchars( $data );

echo '<td bgcolor="#99CCCC">';

echo "$datan";

echo "</td>n";

}



echo "</tr>n";

}

echo "</table>n";

echo "<hr>";

//$PHP_SELF



echo "<font size=2>";

echo "<form action='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=$page&rowperpage=$rowperpage' method=post>";

echo "<font color=green>";

echo "第".($page 1)."頁/共".(int)($row/$rowperpage 1)."頁";

echo "</font>n";

echo " | ";

if( $page > 0 ) {

echo "<a href='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=".($page).'&rowperpage='.$rowperpage;

if( $orderby != "" )

echo "&orderby=$orderby";

echo "'>上一頁</a>n";

} else

echo "上一頁";

echo " | ";

if( $page < ($row/$rowperpage)-1 ) {

echo "<a href='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=".($page 2).'&rowperpage='.$rowperpage;

if( $orderby != "" )

echo "&orderby=$orderby";

echo "'>下一頁</a>n";

} else

echo "下一頁";

echo " | ";

if( $row > $rowperpage ) {

echo "<input type=submit value='跳到第'>n";

echo "<input type=text size=4 name=page>頁";

}



echo "</form>";





echo "<form action='$PHP_SELF?action=viewData&dbname=$dbname&tablename=$tablename&page=$page&rowperpage=$rowperpage' method=post>";

echo " 目前每頁顯示記錄數為".$rowperpage."條,您可以";

echo "<input type=submit value='改為'>";

echo "<input type=text size=4 name=rowperpage>條/頁";



echo "</form>n";

echo "</font>n";

}





?>

  我好長時間沒寫程序了,連php的語法都快忘了,呵呵.我去年給公司的生產線編寫了一個應用,上面就是摘抄下來的,我本來想寫一個最簡單的程序在這裡,但是我還是把兩個函數保留在裡面了,為的是讓初學者有個借鑒,呵呵.




4.3 測試




  把這個mytest.php複製到/var/www下面,在你的瀏覽器裡面,訪問這個mytest.php,就會看到資料庫的內容.





5 結束語




  本文是《Debian伺服器設置入門》系列教程之第一章》,建議您按照順序閱讀,有問題可以和作者kanaka聯繫.



 





《Debian伺服器設置入門》系列教程之第二章:FTP伺服器

第二章
在Debian上用Wu-ftpd配置FTP伺服器


本章目錄


1 開場白


2 選擇wu-ftpd



3 安裝


4 配置


5 測試


6 TODO



7 結束語


8 參考文獻







1 開場白




  在五年之前,我還覺得Ftp這個東西很神秘.那時候,我身邊的大部分人,甚至以為http就是互聯網的全部.我們從網站下載文件,用的大多也是http連接.但是,事實上,ftp(File
Transfer Protocol,文件傳輸協議)
這個服務已經存在很長時間了,如果要提供文件下載,除了使用http的方式連接外,我們完全可以提供ftp服務,這樣可以節省一些伺服器資源,比如連接數什麼的.ftp是專門設計用來在兩台電腦之間傳輸數據的,可以避免太多的遠端執行.尤其是,當傳輸的文件比較大時,ftp會比http節省資源.另外,ftp可非常方便地上傳文件,而http則沒有那麼方便快捷.



2 選擇wu-ftpd



  用apt-cache search
命令看一下,都有什麼ftp伺服器可以選擇:






# apt-cache search ftpd

  你會發現,Debian為我們製作了很多個ftpd伺服器軟體包,包括atftpd、bsd-ftpd、ftpd、oftpd、muddleftpd、proftpd、twoftpd、vsftpd、wu-ftpd等等.其中應用最廣泛的,應該是wu-ftpd了,這是目前最流行的一種免費FTP伺服器軟體,目前絕大多數的FTP站點都是由wu-ftpd來架設的,它是當初由華盛頓大學wuarchive.wustl.edu開發出來的,是一個以效率以及穩定性為考量的程序.wu-ftp如此流行,一個重要的原因是它強大的功能,例如:



  ◆ 可控制不同網域的機器對 FTP伺服器的存取許可權和訪問時段.

  ◆ 使用者在下載文件時,可自動對文件進行壓縮或解壓縮工作.

  ◆ 可以記錄文件上傳或下載的過程.

  ◆ 可以限制最高訪問人數,以維持系統的最佳運行效率.

  ◆ 可顯示相關的信息,以便用戶了解當前的接收狀態.

  ◆ 可暫時關閉FTP伺服器,以便系統維護.

  目前Debian提供的wu-ftpd版本是2.6.2.好,我們就選擇這個wu-ftpd了!



3 安裝



  安裝很簡單,用下面的命令安裝:






# apt-get install wu-ftpd

  它會問你,你想設置一個匿名ftp賬號嗎?輸入y,回車.

  接著讓你輸入ftp根目錄,默認是/home/ftp,我們就用默認的吧.

  然後它問你,你想創建一個目錄,用來讓用戶上傳文件嗎?輸入y,創建一個.

  安裝程序會創建一個新的用戶ftp,並把這個用戶加入到一個新創建的組ftp中去.

  然後它會說:






Anonymous FTP users will
only see UID and GID numbers,instead of names, because the libnss_files.so
library hasn't installed.



It is not installed by default, since there is no easy way to find out
what version we need to install.



If you want to install it manually, it should be palced in
/home/ftp/lib,owned by root, and with permissions of 444 (r--r--r--)

  (它說無法判斷所需的版本,libnss_files.so沒有安裝,要手工安裝的話,到/home/ftp/lib去找.這塊我還沒搗鼓明白,還請高手賜教).這裡需要對初學者說明一下,系統從/etc/passwd這個文件裡面讀取資料,得到UID和GID,來決定用戶對文件的存取許可權.一會兒我們會講到,在ftpaccess這個配置文件里,可以為某些UID的用戶或者某些GID的組設置許可權.



4 配置



  其實,在安裝完之後,不需要做任何配置,我們的ftp伺服器已經可以使用了.如果你跟我一樣是個急性子,在進行配置之前你就可以嘗試登錄了.這時,Debian上的普通用戶,還有匿名用戶都可以訪問它,也可以向incoming目錄上傳文件,只不過看不到已經上傳的文件.但是我們仍然需要做一些配置,我們需要定製自己的安全性.



  為了確保提供FTP服務不會給我們的系統帶來安全隱患,我們要採取以下措施:






#
chmod 555 /home/ftp


#
chmod 111 /home/ftp/bin/*


#
chmod 555 /home/ftp/lib/*


#
chmid 444 /home/ftp/etc/*

4.1 配置文件介紹



  wu-ftpd的配置文件放在/etc/wu-ftpd下面,主要有:



  ftpaccess —— 這個是wu-ftpd的主配置文件,控制存取許可權

  ftpconvertions —— 這個文件定義了文件壓縮/解壓縮轉換方案

  ftpservers —— 用來設置多個IP地址和域名,以對應到不同的虛擬主機

  ftpusers —— 凡是寫入這個文件裡面的用戶,都不能連接ftp伺服器

  msg.denu —— 拒絕訪問時,顯示給用戶的信息

  msg.nodns —— 當DNS查詢失敗時,顯示給用戶的信息

  msg.toomany —— 當連接數過多時,顯示給用戶的信息

  pathmsg ——
當用戶使用了非法路徑/文件名時,顯示給用戶的信息

  welcome.msg ——
當用戶建立連接時,顯示給用戶的歡迎信息



  在/usr/share/doc/wu-ftpd/examples下面,有一些配置文件的樣本,大家可以參照一下.



4.2 修改/etc/wu-ftpd/ftpaccess配置



  這個文件是wu-ftpd的主配置文件,許多重要的選項都包含在這裡面,比如,要想讓Debian上的用戶可以訪問,就在這個文件裡面的Class段落裡面做出定義.

  下面我們按照ftpaccess文件的順序,一段一段地介紹.平常不大用的,或者我不懂的,就不介紹了:-),要不然篇幅會非常大.



4.2.1 管理員的email地址






# 這個不多說了



email ftpadmin@misconfigured.host

4.2.2 UID/GID設置






# 設置哪些UID/GID可以、不可以使用FTP服務.這裡的%-99我沒搞明白,請高手指教!

#deny-uid %-99

#deny-gid %-99

#allow-uid ftp ftpadmin

#allow-gid ftp ftpadmin

4.2.3 登錄失敗數






#
下面設置登錄5次失敗后,斷開連接



loginfails 5

4.2.4 目錄限制






#
除了用戶自己的根目錄,讓用戶看不到別的東西.這個很關鍵!

#
你可以在修改這項之前先登錄ftp伺服器看看,然後去掉了這個#之後再登錄看看,大不一樣哦



restricted-uid kanaka

4.2.5 不可執行SITE GROUP/SITE GPASS






# private決定了用戶是否可以執行SITE
GROUP/SITE GPASS命令

# 用這兩個指令切換到/etc/ftpgroup的群組.一般而言我們不會用到這個功能,以避免安全漏洞.

#private no

4.2.6 定義用戶類別——class





  由class定義的用戶和IP地址才能夠登錄進來.FTP伺服器上有三種類型的使用者,分別是「real」——表示在該FTP伺服器上有合法帳號的用戶;「guest」——表示另行定義的某些使用組的使用者;「anonymous」——許可權最低的匿名用戶.有了這三種使用者以後,在ftpaccess文件中就可以根據不同的使用者設置不同的存取許可權.但是,只有三種定義一般是不夠的,我們可以根據class的語法定義更多的控制命令.



  語法是:






class <class 名稱> <種類> <用戶地址> [<用戶地址>……]

  其中:<class 名稱>則可自行設定,<種類>就是上面說的三種,<用戶地址>是指ftp上來的用戶會用到的IP地址.

  以下是一些例子:






#
下面這一行時系統默認的,它定義了一個名為all的class,包含三種人,允許所有IP地址的連接



class all real,guest,anonymous *



# 下面這個叫做local的class說,只有real的用戶可以從本機機器連上來



class local real localhost loopback



# 下面這個叫remote的class,包含了從任何地方上來的guest和anonymous用戶,但是real用戶不算



class remote guest,anonymous *



# 下面這個叫rmtuser的class包含了從外面來的(除了example.com)真實用戶



class rmtuser real !*.example.com

4.2.7
為各個類別的用戶設置最大連接數






#
可以為每一個類別定義最大連接數,並顯示不同的錯誤信息.下面允許30個連接.



limit all 30 Any /etc/wu-ftpd/msg.toomany

4.2.8 設置readme文件






# readme命令:指定用戶登錄或進行其它操作(如更換目錄)時FTP伺服器提示用戶閱讀的文件.



readme README* login

readme README* cwd=*

4.2.9 是否使用壓縮






# 下面定義的允許從local和remote登錄的機器在傳輸文件時,

# 可以執行compress壓縮文件或使用tar命令將多個文件打包成一個文件.



compress yes local remote all

tar yes local remote all

4.2.10 記錄日誌






#
如果去掉前邊的註釋符號,它就會記錄相應的信息.

#log commands anonymous,guest,real

#log security

#log syslog

log transfers anonymous,guest,real inbound,outbound

4.2.11 超時設置






#
下面設置:如果超過30秒沒有動作,就斷開anonymous的連接



limit-time anonymous 30

4.2.12 一些命令的許可權






rename no anonymous # rename
許可權?

delete no anonymous # delete 許可權?

overwrite no anonymous # overwrite 許可權?

chmod no anonymous # chmod 許可權?

umask no anonymous # umask 許可權?

4.2.13 匿名用戶上傳許可權






#
全給他們加上井號,不讓匿名用戶上傳文件



#upload /home/ftp * no

#upload /home/ftp /pub/incoming yes ftp daemon 0666 nodirs

  ftpd是被inetd調用的,,我們修改了配置文件后,不需要重新啟動wu-ftpd.

  對於普通ftp應用,修改一下上面這個文件就足夠了.如果你還有更高的要求,就繼續往下看.



4.3 修改/etc/wu-ftpd/
ftpusers



  我們已經說過了,只要寫進這個文件裡面的用戶,是不能登錄我們的ftp伺服器的.

  限制這些用戶使用FTP伺服器主要是基於系統安全的考慮,避免權利過大的用戶(如root、ftpadm)登錄FTP伺服器和避免使用系統命令作為帳號(如shutdown、sync),以避免系統管理上的困惑.我們可以根據自己使用的需要,向該文件中增加或刪除用戶.



  注意這個文件是/etc/ftpusers的快捷方式.下面是默認的ftpusers的內容:






# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).



root

daemon

bin

sys

sync

games

man

lp

mail

news

uucp

nobody

4.4
修改/etc/wu-ftpd/ftpconversions文件



  ftpconversions文件主要定義用戶從FTP伺服器中下載文件時對文件進行格式轉換的規則.例如壓縮、解壓縮、打包和開包等操作,這樣用戶就不必為.tar.gz、.tgz、.Z、.z之類的文件傷腦筋了.ftpconversions文件的格式初看上去很複雜,不過不用擔心,我們基本上不用動它,debian為我們準備的這個配置,已經能夠滿足我們的使用需要了.下面讓我們來看看ftpconversions文件的內容:






:.Z: : :/usr/bin/compress -d -c %s :T_REG|T_ASCII:O_UNCOMPRESS:uncompress

: : :.Z:/usr/bin/compress -c %s:T_REG:O_COMPRESS:compress

:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:gunzip

: : :.gz:/bin/gzip -c9 %s:T_REG:O_COMPRESS:gzip

:.bz2: : :/usr/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:bunzip2

: : :.bz2:/usr/bin/bzip2 -c9 %s:T_REG:O_COMPRESS:bzip2

:.zip: : :/usr/bin/zip -q -r -9 - %s:T_REG|T_DIR:O_TAR|O_COMPRESS:zip

: : :.zip:/usr/bin/unzip -q -c - %s:T_REG|T_DIR:O_TAR|O_UNCOMPRESS:unzip

: : :.tar:/bin/tar -chf - %s:T_REG|T_DIR:O_TAR:tar

: : :.tar.Z:/bin/tar -chZf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar compress

: : :.tar.gz:/bin/tar -chzf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar gzip

: : :.tgz:/bin/tar -chzf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar gzip

: : :.tar.bz2:/bin/tar -chIf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar bzip2

: : :.ltar:/bin/tar -cf - %s:T_REG|T_DIR:O_TAR:tar

: : :.ltar.Z:/bin/tar -cZf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar compress

: : :.ltar.gz:/bin/tar -czf - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:tar gzip

  你可能想我一樣看花了眼,不過好在我們不用深究,反正這個文件基本上把常用的壓縮,打包命令都包括在內了,只要它存在,FTP服務程序就會根據用戶的需要執行壓縮或打包的命令.

  例如,用戶想下載目錄Howto中所有的文件,那麼他不必使用mget命令,而只要使用get
Howto.tar.gz,這時wu-ftpd就會將該目錄打包壓縮併發送到用戶的機器上了.使用該文件可以完成壓縮傳遞的數據量,減少傳輸時間等作用.

  這裡有一點需要注意,這個文件中定義的可執行文件的位置/bin指的都是/home/ftp/bin而不是Linux的/目錄下的bin,請檢查/home/ftp/bin目錄中有無上述命令,如果沒有還需要將這些程序複製到該目錄中.我看了一下,我僅僅安裝了Debian的基本系統,bzip2這個命令是沒有的,我們可以用at-get
install bzip2命令來下載和安裝它,然後把bzip2命令複製到/home/ftp/bin就可以了.




5 測試

  

  到這裡,匿名FTP伺服器的配置工作基本上就完成了,我們可以用ftp命令連接自己的伺服器,檢查合法用戶和匿名用戶的連接情況以及各個目錄的許可權是否正確.之後就可以準備FTP服務的開張了.



6 TODO



  在下一個版本裡面,我將描述如何用ftpmirror建立ftp伺服器鏡像.






7 結束語




  本文是《Debian伺服器設置入門》系列教程之第二章》,建議您按照順序閱讀,有問題可以和作者kanaka聯繫.


8 參考文獻


  本章參考了下面的文章:

  《用wu-ftpd架設FTP伺服器》一文,地址是http://www.lslnet.com/linux/docs/linux-3300.htm 

  《架設FTP伺服器》一文,地址是http://www.linuxsir.com/bbs/showthread.php?s=&threadid=8455&highlight=wuftpd

  很抱歉我沒找到這兩篇文章作者的名字,但是我們仍然應該心存感激.







《Debian伺服器設置入門》系列教程之第三章:郵件伺服器

第三章 在Debian上用Exim配置郵件伺服器


本章目錄


0 聲明



1 簡介


2 安裝


3 配置


4 小測試


5 修改 From: 的地址


6 配置Fetchmail


7 修改exim的投遞限制


8 綜合測試



9 TODO


10 結束語


11 參考文獻





0 聲明



  本文是在《通過exim建立家庭網路的郵件系統》一文的基礎上修改的,作者:Jan
W. Stumpel, Oegstgeest, The Netherlands.

  這篇章的地址是:http://211.167.66.225/~yzhao/lg-zh/lg-zh-issue8/stumpel.html




1 簡介


  我想現在一個再普通的單位,也會需要用到電子郵件.我所在的企業,已經到了無法離開email的地步——每當郵件伺服器出現問題,我的電話都會被打爆.在M$平台上,郵件伺服器市場基本上被兩個軟體佔領:M$的Exchange和Lotus的Domino/Notes.這些軟體所花費的費用,實在不小.而Unix平台上,我們有很多選擇,都是免費的.



  在Debian裡面,我們不用Sendmail,也不用Qmail和Postfix,而是用Exim,這是Debian的預設郵件伺服器,連基本系統都附帶了這個軟體.理由我就不說了,反正,Debian推薦的,不會錯.



1.1 我們將實現的功能

  ◆
區域網中的用戶可以實現本地郵件的發送和轉發.

  ◆ 發往區域網以外的郵件有正確From:<郵件地址>,以使外部的郵件能夠正確的回復.

  ◆
電子郵件賬號是所有本地子網用戶所共享,但是要實現每個用戶僅僅能夠收到自己的郵件.

  ◆ exim作為郵件的收發代理(它比sendmail好配置的多).

  ◆ mail作為linux端的郵件客戶程序.

  ◆ Microsoft Outlook Express 作為Win2000端的郵件客戶程序(同樣你也可以使用其它的類似工具,比如Foxmail).

  ◆ qpopper 作為POP3伺服器, 用來把郵件從Linux系統中轉移到Win2000機器上.

  ◆ fetchmail 用來從互聯網上收取郵件.

  我在兩台機器上(分別安裝Linux和Win2000系統)做的測試,當然,win9x/NT/XP都可以,兩台機器都是Linux的話也當然可以.這個方案,應付一個中小型的辦公室應該綽綽有餘.

1.2 網路和命名


  在這篇文章中我假定以下的名字(您實際應用時應該做寫修改,以適應您的實際情況):

  ◆ 擁有者和系統管理員的名稱 kanaka Leng.

  ◆ Linux機器名為 Debian.

  ◆ Win2000 機器名為 Notepad. 通常使用者為 ganghua Leng.

  ◆ kanaka 在 Debian 機器上的註冊用戶名為 kanaka.

  ◆ ganghua 在 Debian 機器上的註冊用戶名為 ganghua.



  ◆ ganghua 在 Notepad 機器上的註冊用戶名也為 ganghua.
她的在linux下的Debian機器和 Win2000上的口令也相同.

  ◆
我們公司的區域網通過寬頻連接互聯網,當然你通過普通撥號也可以.

  ◆ kanaka 和 ganghua 都使用電子郵件地址:kanaka@yeah.net.

  ◆ kanaka到POP3收信的口令為kanakapswd.

  ◆ ISP的發送郵件的郵件伺服器為smtp.yeah.net.

  ◆ ISP的接受郵件的郵件伺服器為pop3.yeah.net.

  機器Debian和Notepad都屬於一個域,域名為test.com.
這個域名是我們內部搞測試用的,我們並沒有註冊這個域名,
因而對於外部網路來說, 並不能直接識別這個域名.

  此外,我還假設內部網路已經正常工作,
並且已經擁有使用daild實現的非永久撥號連接,或者寬頻網連接.
在Debian機器上也沒有安裝DNS服務./etc/resolv.conf中只是加入了ISP提供的兩個DNS伺服器的地址.同樣的設置也要加在Notepad機器上的TCP/IP設置中.

1.3 郵件地址


在"To:"和"From:"中指定郵件地址是一封郵件的基本組成部分,
此外還有更多的內容. 舉例來說:

To: ganghua Leng <kanaka@yeah.net>

'ganghua Leng'是一個"real-name part"(真實姓名部分).
這是通過撰寫電子郵件的程序加上的.
這個部分就是將郵件發送給ganghua本人的依據. 注意:如果在real-name
part中有句點存在, 郵件地址用"符號包圍起來(例如:"kanaka
C.Leng"). 您可以用man mailaddr參考一下相關的幫助頁.


2 安裝



  我們已經安裝了Debian基本系統,而Debian基本系統裡面含有exim和mail這兩個軟體,我們只需要安裝這兩個:fetchmail、fetchmailconf和qpopper.






#
apt-get install fetchmail fetchmailconf qpopper

  其中,fetchmailconf是用來配置fetchmail的工具.

  系統會有一些問題提問你.當問你是否以root身份運行system-wide
fetchmail時,答Yes.其他的都選默認值.



3 配置



3.1 配置Debian的hosts



  Debian機器上的/etc/hosts文件內容如下:






127.0.0.1 localhost

192.168.1.1 Debian.test.com Debian

192.168.1.2 Notepad.test.com Notepad

3.2 配置exim


  在Debian下,這一切都是由eximconfig程序來完成的.






#
eximconfig

  程序將問到一些問題,你可以參考下面的回答:


  ◆ 你的系統是一個Internet主機(選擇1,雖然你在區域網.這樣你可以發郵件到互聯網).

  ◆ 「顯示的郵件域名」為test.com.

  ◆ 系統有其他的名稱嗎?你可以回答 Debian:localhost.



  ◆ 你不想轉發任何非本地域的郵件.保持none,按回車.

  ◆ 你想轉發的本地域地址為192.168.1.0/16.

  ◆ 處理向外轉發的郵件的smarthost 地址為 smtp.yeah.net.

  ◆ 系統管理員的郵件為kanaka(非root).



3.3 配置Win2000



3.3.1 hosts



  在Notepad機器上的c:winntsystem32driversetchosts文件中的內容跟Debian機器中的/etc/hosts文件的內容一樣.






127.0.0.1 localhost

192.168.1.1 Debian.test.com Debian

192.168.1.2 Notepad.test.com Notepad



3.3.2 郵件客戶端



  在Microsoft Outlook Express(或者你在Win2000使用的其他此類的郵件客戶程序).
都將Debian輸入作為SMTP 郵件伺服器和POP3伺服器. 在「POP3賬號名」和「POP3口令」輸入框,
輸入用戶名ganghua和她在linux下的口令. 輸入姓名為ganghua Leng;
電子郵件地址為 ganghua@test.com.
注意電子郵件地址以本地域做後面的地址.



4 小測試



  通過上述的設置,本地的用戶之間應該已經可以實現相互的發送和回複信件了.在Outlook
Express裡面的測試我就不說了,我來說一下在Debian上面用mail來做測試.






#
mail kanaka

Subject:
This is my First test-mail!


Hi,kanaka,

This is the first time that I send a mail by exim.

.

Cc: kanaka@yeah.net

#

  上面我們給本地的kanaka發了一封郵件,並抄送給了互聯網上的kanaka@yeah.net.注意,要結束一封信的內容,在新的一行輸入「.」就可以了.我在Win2000上用Outlook
Express就可以收到發給kanaka的信;而發給kanaka@yeah.net的信,我到freemail.yeah.net站點上去,也收到了.



  現在test.com已經真正成為了一個具有郵件轉發功能的本地域,可以發送郵件到互聯網上的kanaka@yeah.net.但是,一個格式為From:kanaka@test.com的地址顯然是無法被外部用戶回復的,
對於外部網路來說, test.com是一個不存在的(因而不合法)的域名.因此,我們還需要修改From:的地址.

5 修改 From: 的地址


  在往互聯網上發送郵件的時候,為了他們可以正確的回復,我們把本地的From:地址格式改變成為一個合法的電子郵件地址.
藉助於exim的"傳送過濾器", 我們可以實現這一功能.
往外部轉發的郵件經過這個傳送過濾器以後, From:
中的地址就會被改變, 而對於本地郵件則沒有什麼影響.

  下面的過濾器將實現這個惡作劇式的技巧,
我們確定我們要改變的地址永遠包含在"<>"符號之內.
雖然不能完全保證, 但是通常的郵件程序:mail甚至Microsoft
Outlook Express都是生成這種格式的電子郵件地址.



5.1 創建outfit文件



  我們來創建一個文件,/usr/bin/outfit,內容如下:







#!/usr/bin/perl
while (<STDIN>) {
if (/^From: /) {
s/<.*>/<'kanaka@yeah.net'>/;
print "$_"; last;
}
print "$_";
}
while (<STDIN>) { print "$_"; }




  把這個文件放到/usr/bin目錄中,命名為outfit,不要忘記把上面的電子郵件地址換成你自己的電子郵件地址!



  然後,通過下面的命令chmod x /usr/bin/outfit加上可執行的許可權.






#
chmod x /usr/bin/outfit

5.2 修改exim.conf



  打開/etc/exim/exim.conf,找到下面一行:







driver = smtp


  在它的下面加上兩行,就成了:






driver = smtp
headers_remove = "sender"
transport_filter = "/usr/bin/outfilt"




  通過上述對/etc/exim.conf文件的修改,無論何時發送一封電子郵件到本地域以外時,都可以被exim正確的投遞了.如果你使用的是撥號網路,那麼Exim(通過daild)每發送一次郵件,就會向外撥一次號.而我們公司的寬頻24小時在線,郵件每次都是直接就發出去了.


6 配置Fetchmail


  我們需要運行fetchmailconfig,來在你的主目錄里產生一個叫.fetchmailrc的文件,否則你就不能使用fetchmail.
fetchmial將從互聯網的郵件伺服器上取回郵件(並轉交給exim再做本地投遞).






#
fetchmailconfig

fetchmialconf must be run
under X

  你看到了吧,它說fetchmialconf這個程序比如在X下面運行.唉!我們要把debian做伺服器用,而伺服器根本不需要安裝X的,我們不會為了配置fetchmail再去安裝一個X系統和一個窗口管理器吧!好吧,那麼我們就手工寫這個文件吧,其實也很簡單.

  我們是要把郵件接收到kanaka在本地的信箱裡面,應該在kanaka的主目錄裡面產生這個.fetchmailrc,我們切換到kanaka用戶,再進行操作:




# su
kanaka

$ c




[火星人 via ] Debian伺服器設置入門》系列教程已經有149次圍觀

http://www.coctec.com/docs/linux/show-post-57585.html