在Debian上配置Apache+MySQL+PHP4(轉)

post0發表於2007-08-10
在Debian上配置Apache+MySQL+PHP4(轉)[@more@]

本章目錄

1 選擇Apache+MySQL+PHP4

2 安裝

3 配置

4 綜合測試

5 結束語

1 選擇Apache+MySQL+PHP4

  你可能會問我:為什麼不選擇別的軟體,而非得選擇Apache+MySQL+PHP4的組合?呵呵,我要告訴你,著名的Free

Lamp組合,說的就是Linux/Apache/MySQL/PHP/Perl/Python,你可以到上面去看看。 PHP在網際網路上的應用,正成燎原之勢。如果作Web開發,在我看來,別無選擇,就是PHP。詳細情況可以到上面去了解。 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,執行:

#

apachectl restart

  apache 1.3 提供了這個apachectl工具,但是2.0就沒了。

  另外,注意一個技巧:Debian提供的伺服器軟體包,幾乎都會提供一個指令碼用於啟動/終止/重新啟動這個服務。指令碼全部放在/etc/init.d/下面。

  比如Apache,可以透過下面的命令控制:  

#

/etc/init.d/apache 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

  注意,預設情況下,所有的資料庫放在/var/lib/mysql/下面。每個資料庫佔一個目錄,目錄名就是資料庫名。你建立資料庫的時候,系統自動就把它放在這個目錄下面了。

4.2 編寫一個php指令碼

  下面我們來編寫一個簡單的php指令碼,來呼叫上面資料庫裡面的內容。檔名比如叫做mytest.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 " ";

echo " ";

echo " ";

echo "
查詢:$queryStr
結果:$errMsg

";

}

}

//定義一個函式,用來顯示資料

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

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

echo "

下面是您所查的資料:

";

$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 "
";

$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 " ";

echo " ";

echo ' ";

echo ' ";

echo ' ";

echo ' ";

echo " ";

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

$rowArray = mysql_fetch_row( $pResult );

if( $rowArray == false ) break;

echo " ";

$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 ' ";

}

echo " ";

}

echo "
';

echo "使用者名稱 ";

echo "
';

echo "口令 ";

echo "
';

echo "出生日期 ";

echo "
';

echo "是否啟用 ";

echo "
';

echo "$data ";

echo "
";

echo "
";

//$PHP_SELF

echo "";

echo "
";

echo "";

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

echo "
";

echo " | ";

if( $page > 0 ) {

echo "

if( $orderby != "" )

echo "&orderby=$orderby";

echo "'>上一頁
";

} else

echo "上一頁";

echo " | ";

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

echo "

if( $orderby != "" )

echo "&orderby=$orderby";

echo "'>下一頁
";

} else

echo "下一頁";

echo " | ";

if( $row > $rowperpage ) {

echo " ";

echo "頁";

}

echo "
";

echo "
";

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

echo "";

echo "條/頁";

echo "
";

echo "
";

}

?>

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

4.3 測試

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

  之所以把mytest.php放到/var/www下面,是因為,預設情況下,Apache的httpd.conf裡面定義了把/var/www作為文件根目錄。

  初學者注意,在linux控制檯下面有好幾款瀏覽器,w3c,lynx,links等等。三個各有優劣,都不完美。個人感覺links比較適合初學者,因為按下esc鍵之後有選單出現。

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    [……]

  其中:則可自行設定,就是上面說的三種,是指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伺服器》一文,地址是 

  《架設FTP伺服器》一文,地址是

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

《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。

  這篇章的地址是:~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

'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 () {

if (/^From: /) {

s/<.>//;

print "$_"; last;

}

print "$_";

}

while () { 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

$ cd

$ nano

.fetchmailrc

   然後,輸入以下內容,存檔退出即可:

set postmaster "postmaster"

poll pop3.yeah.net with proto POP3 user "kanaka@yeah.net" password "kanakapswd"

  .fetchmailrc檔案可以在不同使用者之間相互複製,只要把檔案的屬主設定成相關的使用者即可。不過把使用者的郵件密碼用明碼寫在這個檔案中顯然是一種不明智的方式。

或許應該有更好的方法,請大家告訴我啊,呵呵。

  然後,使用fetchmail命令來把郵件從網際網路上拖到本地來:

$

fetchmail

1 message for kanaka@yeah.net at

pop3.yeah.net (1648 octets).

reading message kanaka@yeah.net@pop3.yeah.net:1 of 1 (1648 octets) .

flushed

  然後,你可以在win2000的Outlook Express裡面,從本地接收這些郵件。

7 修改exim的投遞限制

  Exim 預設的一次投遞郵件的最大數量為100封。

你可以根據你們單位的實際情況,修改這個值。如果需要取消這個限制,就把它改為0,不過小心受到攻擊:

smtp_accept_queue_per_connection = 0

8 綜合測試

  你可以在Debian上和Win2000上多發幾封郵件,做一下測試。

9 TODO

  在下一個版本中,我們將描述如何使用.forward檔案,實現轉發,把信件正確的投遞郵件給某個使用者,而不是一下子都發給kanaka。

  我們還將描述,如何建立一個webmail系統。

10 結束語

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

11 參考文獻

  本文在開頭就宣告,本文是在《透過exim建立家庭網路的郵件系統》一文的基礎上修改的,作者:Jan

W. Stumpel, Oegstgeest, The Netherlands。

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

  之所以這樣,是因為,這篇文章對我們來說太珍貴了,除了她,我沒有找到其他關於exim的資料。

  非常感謝原文作者,以及翻譯者!

《Debian伺服器設定入門》系列教程之第四章:Samba伺服器

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

本章目錄

1 介紹

 

2 背景介紹

3 安裝

4 小測試

5 快速入門

6 配置

7 測試

8 TODO

9 結束語

10 參考文獻

1 介紹   

  如果某一個單位,他們的桌面計算機必須使用M$

Windows平臺的話,那麼他們很可能不可避免的需要Windows伺服器產品,比如Windows

NT Server或者Windows 2000 Server,甚至Windows 2000 Advanced Server。要知道,要合法的擁有這些伺服器的軟體(按照微軟的所謂許可協議購買連線數)的話,再加上昂貴的硬體費用,可並不是一比小費用。如果有一個途徑,可以讓你在普通硬體的基礎上,免費實現Windows

NT/2000伺服器的功能,你說,何樂而不為呢?

  ——這就是桑巴,一個免費的,強大的,靈活的,輕便的,samba。

2 背景介紹

  如果你不是從第一章開始看我的文章,那麼我得介紹一下這些情況:

  我的有一臺安裝了win2000的機器,叫做notepad,它屬於workgroup這個工作組。

  我的Debian GNU/Linux安裝在一臺普通的臺式計算機上,機器名字叫debian,域名叫test.com。

3 安裝

3.1 軟體版本

  由於我們用的sid的sources.list,所以得到的是2.99版+3.0Alpha版的samba。其配置方法與以前版本有些不同。

3.2 安裝

  安裝過程非常簡單:

# apt-get install samba

  系統會問你,請參考這些答案:

  用debconf配置samba嗎?Yes。

  輸入工作組名,或者域名:workgroup。

  使用口令加密?Yes。

  以什麼方式執行samba?我們選擇預設的daemons方式,讓他在後臺監聽。

  建立samba口令庫?Yes。

4 小測試

  你也許不相信,但是現在,你已經可以在Windows的網路上的芳鄰里面看到這臺名字叫Debian的Linux主機了!

  找到網路上的芳鄰的workgroup組,你會發現她確實已經在那裡了。怎麼樣,振奮吧!

  不過,你會發現,無論你輸入什麼使用者名稱和口令,都無法透過驗證。那是因為,我們還沒有告訴samba,驗證哪些使用者和口令。

  

5 快速入門

  Samba只有一個配置檔案!

  那就是/etc/samba/smb.conf。

  下面這個只有幾行的smb.conf,就可以讓samba為我們工作!

[global]

log file = /var/log/samba/log.%m

[tmp]

comment = Temporary file space

path = /tmp

read only = no

public = yes

6 配置

6.1 檢查當前配置

  我們的samba現在已經執行了,那麼,它正在提供哪些服務呢?如果開啟/etc/samba/smb.conf,你可能會覺得內容太多,看不過來了;那好,我們有個命令可以用:testparm。這個命令,可以讓我們檢查smb.conf的配置是否正確,而且還可以列出一個實際上有效的 smb.conf的內容:

# testparm

  透過這個命令,你看到了吧,實際上發揮作用的配置,就是那麼幾行。

6.2 寫一個最小的smb.conf

  實際上,為了做實驗,我們可以寫一個更小的smb.conf,就向上一小節裡面提到的那樣。那個配置檔案,可以讓samba把/tmp共享,並且可以往裡寫檔案。

  好,我們不妨就採用上面這個檔案吧,請你先將/etc/samba/smb.conf改名,比如改為smb.conf.backup,然後把上面的內容抄下來,儲存為新的/etc/samba/smb.conf。

  記住,要是修改後的smb.conf生效,需要重新啟動samba:

# /etc/init.d/samba restart

6.3 建立使用者

  在我們建立使用者之前,沒有人能夠訪問samba伺服器,就是說,在windows平臺上,無論用什麼使用者名稱和口令,都無法訪問網路上的芳鄰里面的debian這臺機器。

  我們需要在/etc/samba/目錄下面,生成一個檔案,名字叫:smbpasswd:

# touch /etc/samba/smbpasswd

  然後,使用smbpasswd命令,新增samba使用者:

# smbpasswd -a kanaka

New SMB password:

Retype new SMB password:

  這時,kanaka就被寫進了/etc/samba/smbpasswd檔案,kanaka就可以從windows訪問samba了。

7 測試

  在你的windows裡面,找到網路上的芳鄰的debian,用剛才建立的使用者,訪問它,並向tmp目錄複製一個檔案。怎麼樣,可以了吧。

8 TODO

  這是本文的0.1版,純粹針對初學者的。

  在下一個版本,我將詳細描述smb.conf的配置方法,來實現WinNT/2000伺服器的功能。

9 結束語

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

10 參考文獻

  《Samba 配置》,地址是:http://www.linuxfocus.org/ChineseGB/March2002/article177.shtml

  《使用 Linux 和 SAMBA替代Windows NT/2000 伺服器》,地址是:http://www.linuxfocus.org/ChineseGB/May2002/article247.shtml

  讓我們一起感謝原文作者,以及翻譯者!

《Debian伺服器設定入門》系列教程之第五章:Samba伺服器

第五章 在Debian上用Bind配置DNS伺服器

本章目錄

1 什麼是DNS

2 為什麼需要DNS

3 BIND介紹

4 配置

5 測試

6 TODO

7 結束語

8 參考文獻

1 什麼是DNS  

  初學者可能不理解DNS到底是什麼,幹什麼用。我是在1998年大學畢業時才聽說這個詞的。那時我在聊天室碰到濰坊資訊港的一個網管,我恬不知恥地說我也是個網管,他說也維護DNS嗎?我說,DNS是什麼?

  ——DNS,Domain Name Service,或者Domain Name Server,域名服務/域名伺服器。

  你在你的瀏覽器裡面輸入之後,之所以可以上去,就是因為有了DNS。

  簡單地說,DNS把一串名字,轉換成了IP地址。你可能會說:如果我直接使用IP地址,那就不需要DNS了嗎?對!不過,請你接著往下看。

2 為什麼需要DNS

2.1 網際網路需要DNS

  現在幾乎整個網際網路都是基於TCP/IP的。在這個世界裡,不管你訪問哪個網站、哪臺機器,必須得知道它的IP地址才可以。好,我告訴你, 202.106.185.203這個地址,是新浪網的IP地址,你每次上網,都得再瀏覽器的位址列裡面輸入 才可以訪問新浪。你可能會說:沒問題,不就一串數字嘛,我記得住!可是,你想一下,在Internet上,有多少臺主機啊!你可能會記住其中幾臺甚至幾十臺的IP地址,但是你肯定記不住全部。

  正是由於IP地址不好記,人們才想了個辦法,讓你只需要記住名字,然後系統透過這個名字,到資料庫裡面去查詢它的IP地址,然後再把查到的IP地址反饋給你,比如反饋給瀏覽器,最後,瀏覽器用這個由DNS給的IP地址去訪問你想去的站點。

2.2 區域網需要DNS

  那麼,在區域網內部呢?需要DNS嗎?

  太需要了!你不要覺得,單位就這麼幾臺機器,用hosts解析,不也一樣嗎?你可千萬記住這個教訓,當公司越來越大,hosts的維護量將大的驚人!我所在的公司,前不久就面臨了這種尷尬。所以,一定要有一臺DNS,然後在公司內部定義一個規範的主機命名規則,這才是個好網管,呵呵。

3 BIND介紹

  Bind是使用最廣泛的Domain Name Server,它是Berkeley

Internet Name Domain Service的簡寫,伯克裡大學編寫的。這個大學可真厲害,寫了不少著名程式。

原本bind的版本一直在 4.8.x 4.9.x 左右,後來一口氣跳到8.1.x,是因為大幅度改進了功能,並修復了漏洞。現在bind有兩個版本在同時發展,bind

8.x 和 bind 9.x,最新版本是8.3.3和9.2.1。

3 安裝

3.1 軟體版本

  目前debian的sid,同樣提供了8版本的bind和9版本的bind,後者的軟體包名字叫做bind9.deb,版本是最新的9.2.1版。

3.2 安裝

  安裝過程非常簡單:

# apt-get install bind9

4 配置

  由於我們前面第三章在配置郵件伺服器的時候,使用了hosts檔案來解析IP地址,現在我們需要把它去掉,讓系統透過DNS來解析它所需要的IP地址。

  我們製作基本的配置。至於高階功能,我們將在本文的下一個版本里描述。

4.1 去掉hosts資訊

  如果你閱讀過本文第三章,你就會知道,我有兩臺機器,一臺膝上型電腦安裝了win2000,名字叫notepad;另一臺桌上型電腦裝了Debian,機器名叫debian。他們都屬於test.com這個域,這個域名沒有在ISP那裡註冊,是我們內部用的。我分別編輯win2000機器上的winntsystem32driversetchosts這個檔案和 debian機器上的/etc/hosts,去掉下面的這些行:

192.1.110.120 debian.test.com debian

192.1.110.122 notepad.test.com notepad

  這時你可以在win2000機器上啟動Outlook Express,做一下收取郵件的動作,它會說找不到debian.test.com——這就對了,因為hosts檔案裡面沒有指向這個名字的IP地址,而且,我們也沒有給win2000指定DNS伺服器,所以它肯定找不到debian.test.com。

4.2 在客戶機上設定DNS

  在我的Win2000機器裡面,在桌面上右擊“網路上的芳鄰”選擇屬性,在出現的視窗中右擊“本地連線”選擇屬性,然後雙擊TCP/IP,在右下角的“首選DNS”裡面,輸入192.1.110.120。這是我的 Debian機器在區域網上的IP地址。如果你用的是win98,那麼情況差不多,在一個叫做DNS的標籤裡面設定首選DNS。我很久不用98了,差不多忘了。

  如果你是個急性子,你會發現,誒?怎麼設上了DNS了,我的Outlook

Express還是說找不到debian.test.com?呵呵,別急別急,我們的DNS伺服器還沒弄好吶!

4.3 在Debian上設定DNS

  我們要事先把Debian機器的DNS指向它自己。修改/etc/resolv.conf,修改成:

search test.com

nameserver 192.1.110.120

  你不會把我的IP地址也抄上吧,呵呵。

4.4 配置DNS伺服器

4.4.1 應用環境

  我們把實驗環境重新描述一下。

  ◆一個C類網段地址 (本例中假定是192.1.110.0)

  ◆企業域名為 test.com,沒有在ISP註冊。(主域名伺服器地址

192.1.110.120,主機名為 debian.test.com)

  ◆企業網透過路由器與Internet連線

  假如你的應用環境與上述條件不同,也請往下看,本文會在上述例子的基礎上針對以下情況作修正:

  ◆多個網段

  ◆封閉的內部網

  ◆只能訪問區域性公共網的情況(如169網、上海熱線等)

  我們將使用一個叫做rndc的工具,rndc可以用於啟動、中止、重啟動、重新整理DNS資料、輸出DNS資料等多種除錯功能。

4.4.2 配置named.conf

   DNS 伺服器的主體是域名伺服器程式

named ,named 啟動後向DNS客戶機提供域名解析服務,把域名轉換成IP地址。

   named 啟動時需要讀取一個初始化檔案,預設情況下是

/etc/bind/named.conf,這是bind的基本配置檔案,不過這裡面並不包含DNS資料。

  注意,你也許會在網上找到一些教程,這些教程有的是以

bind 4.x為藍本的,所以它的named.conf裡面的註釋符號是分號“;”,但是自動bind

8開始,語法變了。下面我們來說一下:

; 這是bind 4.x的註釋,前面用分號

//不過從bind 8開始,有三種註釋符號可以用:

C樣式, C++樣式, 或者shell樣式:

/* 這是C樣式的註釋符號 */

// 這是 C++樣式的註釋符號

# 這是shell樣式的註釋符號

  請你先把預設的/etc/bind/named.conf備份一下,我將給大家寫一個簡單的named.conf,用於做Caching-only的DNS配置。

// 指定 named 從

/var/cache/bind 目錄下讀取 DNS 資料檔案。

// 這個目錄使用者可自行指定並建立,指定後所有的DNS

資料檔案都存放在此目錄下。

options {

directory "/var/cache/bind";

};

// 指定 named 作為 test.com

域的主域名伺服器。

// db.test 檔案中包含所有 *.test.com

形式的域名轉換資料。

zone "test.com" in {

type master;

file "db.test";

};

// 指定 named 作為 192.1.110

網段地址轉換主伺服器。

// db.192.1.110 檔案中包含了所有 192.1.110.*

形式的地址到域名的轉換資料。

zone "110.1.192.in-addr.arpa" in {

type master;

file "db.192.1.110";

};

// 指定 named

作為127.0.0網段地址轉換主伺服器。

// db.127.0.0 檔案中包含了 127.0.0.*

形式的地址到域名的轉換資料。

//(127.0.0網段地址是區域網介面的內部

loopback 地址)

zone "0.0.127.in-addr.arpa" in {

type master;

file "db.127.0.0";

};

// 指定 named 從

db.cache 檔案中獲得 Internet 的頂層“根”伺服器地址。

zone "." in {

type hint;

file "db.cache";

};

  要注意第二和第三個區域中的網段地址是倒寫的,另外,各個區域所使用的資料檔案的檔名也是可以自行決定的。

  請把上面的內容儲存為你的/etc/bind/named.conf。

4.4.3 準備資料檔案

  上面的那個named.conf,相信你已經看明白了。那裡面提到,在/var/cache/bind這個目錄下面,應該有DNS資料檔案db.test、db.192.1.110、db.127.0.0

還有 db.cache。下面我們就要建立這些檔案。

4.4.3.1 建立 db.test 檔案

   根據 /etc/bind/named.conf 的定義,我們在

/var/cache/bind 目錄下建立 db.test,其中應該包括所有在 test.com

域內的主機節點。但在機器數量較多時,為了除錯方便,建議一開始只把幾臺節點的資料放入檔案,待

named 正常工作後再把其他節點的資料補充進去。下面是 db.test的例子:

@ IN SOA debian.test.com. root.debian.test.com. (

200211131 ; serial, todays date + todays serial #

28800 ; refresh, seconds

7200 ; retry, seconds

3600000 ; expire, seconds

86400 ) ; minimum, seconds

NS debian.test.com.

MX 10 debain.test.com.

; 域名伺服器列表

test.com. IN NS debian.test.com.

; 計算機名稱和地址

localhost.test.com. IN A 127.0.0.1

debian.test.com. IN A 192.1.110.120

notepad.test.com. IN A 192.1.110.122

; 別名

www IN CNAME debian.test.com.

ftp IN CNAME debian.test.com.

   其中第一行是 SOA

記錄,定義了域名資料的基本資訊,依次是 DNS 伺服器名、DNS

管理員郵件地址,括號內的第一個數字是檔案版本號,每次本檔案內容修改後,必須更改此號。其餘數字與DNS伺服器直接的資料交換有關,在這裡我們不需要改動。

   括號後面有一條NS記錄和一條MX記錄,定義了域名伺服器本身的域名和username@test.com

形式郵件地址所對應的郵件伺服器名字。

   在此以下是各種域名/地址轉換資料,其中A記錄是DNS域名到IP地址的記錄,是必須有的。

  CNAME定義了一些主機的別名,比如我們將debian.test.com作為公司的www和ftp伺服器,所以我們提供了 和ftp.test.com作為debian.test.com的別名,使用者只需要根據習慣就可以訪問公司的www、ftp伺服器了,如果將來我們換用別的主機作www和ftp伺服器,只需要修改CNAME記錄就可,對使用者沒有影響。

   注意: CNAME 記錄最後的帶域名的主機名後必須帶一個“.”。

  複製這個檔案到bind的工作目錄/var/cache/bind,這個目錄是我們剛才在/etc/bind/named.conf裡面定義的。

4.4.3.2 建立 db.127.0.0

檔案

  這是個反向

DNS資料檔案。

反向資料檔案是這樣用的:知道 IP地址,查詢主機名。每個網段分別有一個資料檔案。

   反向 DNS 資料檔案中的主要部分是 PTR 記錄,PTR

記錄中的 IP 地址都只有主機號,named 會根據 named.conf

的定義自動加上前面的網路號,注意後面的主機名要附加一個“.”

   對於內部網段 127.0.0 通常只有一個地址,即 127.0.0.1

loopback 地址,db.127.0.0 內容如下:

@ IN SOA debian.test.com root.debian.test.com. (

2002111300 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS debian.test.com.

1 IN PTR localhost.

  把這個檔案到複製/var/cache/bind目錄下面。

4.4.3.2 建立 db.192.1.110 檔案

  把所有相同網段的主機 IP地址和主機名,都寫在裡面:

@ IN SOA debian.test.com root.debian.test.com. (

2002111300 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS debian.test.com.

; 所有主機都寫在這兒

120 PTR debian.test.com.

122 PTR notepad.test.com.

  同樣,要把這個檔案到複製/var/cache/bind目錄下面。

4.4.3.3 建立 db.cache 檔案

  預設情況下,我們在安裝bind9的時候,應該有個檔案在/etc/bind/db.root,這個檔案就是我們的想要的根的定義。由於我們在

named.conf中指定的檔名是 db.cache,所以我們把它複製為db.cache:

# cp /etc/bind/db.root /var/cache/bind/db.cache

5 測試

  我們使用rndc這個工具來控制bind。

5.1 讓新配置檔案生效

  因為我們剛才改了配置,所以,需要重新載入一下:

# rndc reload

  然後還需要重新配置一下:

# rndc reconfig

  如果有問題,你可以使用debian為我們準備的指令碼重新啟動bind:

# /etc/init.d/bind9 restart

5.2 在win2000機器上測試

  在win2000上(就是我們的notepad.test.com),使用Outlook

Express,收發郵件。

  看,正常了吧!證明,我們的win2000透過192.1.110.120這臺DNS伺服器,找到了debian.test.com這臺機器的IP地址了。

5.3 測試工具介紹

  在debian上,我推薦大家使用dig或者host來測試DNS設定,因為nslookup快要退休了,以後版本的軟體可能不再提供nslookup這個工具了。要使用這些工具,需要安裝dnsutils:

# apt-get install dnsutils

  然後,就可以使用dig來測試DNS了:

# dig -x 192.1.110.120

  第一次執行,可能比較慢,彆著急,等一會。

6 TODO

  這是本文的0.1版,純粹針對初學者的,僅僅實現了最普通的功能。

  在下一個版本,我將深入講解DNS的設定。

7 結束語

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

8 參考文獻

  《在Linux上建立DNS伺服器》,曹江華,2001年12月27日。地址是:

  讓我們一起感謝原文作者!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-941674/,如需轉載,請註明出處,否則將追究法律責任。

相關文章