網路開展事業或在網路創業賺錢的第一步:【架設24小時賺錢網站主機】比網頁設計更優先!

感謝您造訪 Linux主機伺服器架設技術基地。 你可進入替你架設主機.影片教你維護頁面,詳細瞭解Linux主機架設及相關技術維護影片教學(完整配套措施),有主機馬上可以架設網站營運,完全無限制!

租用不如自有主機!聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多!完全沒有版權問題,超強『防駭客攻擊與入侵』及安全防護可以讓你無後顧之憂。

                    架設主機.影片教你維護: http://luck99.tw/linux/new-E_learning/index.php

Linux主機伺服器架設技術基地  維護團隊  敬上

好消息! 您訂購「架設Linux主機+架站+維護教學課程+遠端協助」專案: 我就特別贈送您:
【不懂程式 不會美工設計 您也能馬上架設漂亮網站賺錢!】影片教學多媒體電子書
裡面有目前前時大熱門架站程式+架站實戰示範教學
總計十套最新架站程式:
1.如何安裝架設(F2Cont)部落格 網誌
2.教你架設 WordPress 部落格 網誌
3.購物網站 osCommerce 2.3.3 架站教學
4.架設 Twe-Commerce(購物網站)影片教學
5.架設 ECShop (購物網站) 影片教學
6.如何自己架設phpBB-3討論區(論壇)
7.如何自己架設Discuz 討論區(論壇)
8.如何自己架設 Xoops-2.5.X(CMS.內容管理)網站
9.如何自己架設 Joomla 3.1.1(CMS.內容管理)網站
10.如何自己架設 DedeCMS織夢(CMS.內容管理)網站


採用最新『影片翻頁電子書』方式製作,裡面影片可以自由選看
播放、暫停、停止(可自由點選影片播放位置)
(內包含:正版10套架站程式與解壓縮密碼)
架設上保證100%成功!讓您輕鬆學會程式安裝!
「架設Linux主機+架站+維護教學課程+遠端協助」專案:

http://luck99.tw/linux/new-E_learning/index.php

瀏覽模式: 普通 | 列表

DNS雙向解析服務(Linux主機伺服器架設技術)Domain Name Server

DNS雙向解析服務(Linux主機伺服器架設技術)Domain Name Server

本文並不在介紹從無到有寫出 dns 完整的設定檔,主要還是先利用 Linux/Linux Server 提供的工具,產生基本設定檔,再進一步解釋其中涵義,以及如何修改新增/修改主機名稱對映。

DNS開啟Port

    * TCP anynet 53
    * UDP anynet 53
    * TCP localhost 953 (管理指令用)

全球DNS管理

DNS是 Domain Name Server 的簡稱,它的功能在於把 IP(v4 and v6) 位址與英文網址建立起對照表,以提供雙向解析的服務。
在 InterNet 上,所有的 DNS Server 是以階層的方式,層層授權,層層管理。例如:「edu.tw」是教育部電算中心的網域,電算中心會為其架 DNS Server,管理所有的學術網路。
由此,教育部的 DNS Server 授權縣教育網路中心的 DNS Server 自行管理【tnc.edu.tw】的網域。
最後再由 dns.tnc.edu.tw 授權各校的 DNS Server 自行管理學校網域。更詳細的資料,請參考上面所列兩篇文章。

 Domain Name 皆是由 dns.tnc.edu.tw (163.26.200.1) 授權出去的【網域】,所以務必要建置 DNS Server 啟用該網域。
至於特定用途的網站,才由 dns.tnc.edu.tw 指定網址。如:《 xoops.tnc.edu.tw 》、《 x.tnc.edu.tw 》、《 freesf.tnc.edu.tw 》等,皆在 163.26.200.1 中直接指定網址。

安裝與初步設定
DNS 查詢指令簡介
Client DNS 查詢過程

在介紹查詢指令前,我們要先了解什麼是 DNS Cache,而它又和 Client 的 DNS 有關,因此本文在此做一簡單說明。
Client 端的 IP查詢過程

別台 DNS Server 會 cache 學校 dns 記錄,因此 dns server 若做任何變動,Client 電腦並不會立即知道(被 cache 騙了)。
因此,若有變更 dns 記錄,除了要修改 serial 外,想查詢是否設定成功,只得對自己查,這也是為何 dig 指令後面必須加上 @163.26.xxx.xxx 參數的原因。

在 Linux 上常用的 DNS 查詢指令

    * nslookup dc1es.tnc.edu.tw
      直接查詢 dc1es.tnc.edu.tw 的 IP 位址
    * dig dc1es.tnc.edu.tw
      查詢 dc1es.tnc.edu.tw 網域狀況,詢問的對象視 /etc/resolv.conf 內 nameserver 的設定值而異
    * dig @163.26.200.1 dc1es.tnc.edu.tw
      向 163.26.200.1 查詢 dc1es.tnc.edu.tw 網域狀況
    * dig @163.26.200.1 dns.dc1es.tnc.edu.tw AAAA
      向 163.26.200.1 查詢 dns.dc1es.tnc.edu.tw 的 IPv6 網址
    * dig -x 163.26.182.1
      查詢 163.26.182.1 的反解記錄
    * dig @163.26.200.1 -x 163.26.182.1
      向 163.26.200.1 查詢 163.26.182.1 的反解記錄
    * dig @163.26.200.1 -x 2001:288:75a6::1
      向 163.26.200.1 查詢 IPv6 2001:288:75a6::1 的反解記錄
    * dig @163.26.182.1 dc1es.tnc.edu.tw MX
      向 163.26.182.1 查詢收件人為 xxx@dc1es.tnc.edu.tw 的信件會轉送至何處
    * dig @163.26.182.1 dns.dc1es.tnc.edu.tw MX
      向 163.26.182.1 查詢收件人為 xxx@dns.dc1es.tnc.edu.tw 的信件會轉送至何處
    * dig @168.95.1.1 yahoo.com NS
      向 168.95.1.1(中華電信 DNS Server) 查詢 yahoo.com 網域是由那些 Name Server 來服務



DNS Server套件

Linux/Linux Server 已預設裝妥 Bind9 這一套 DNS Server 套件及其設定工具 ols3dns ,使用其產生器,所製造出的設定檔結構解釋如下:

    * 設定檔位置在 /etc/bind/ 底下


    * 無限制遞迴查詢(預設值)
          主控檔: named.conf
            其功能在於指定各網域(Zones)的設定檔名稱暨位置,以下各設定檔是以 ols3dns 產生器為例來進行說明,實務上,檔名只要在 named.conf 定義清楚即可,不一定要遵循下面的範例

rndc.key     

遠端控制(Remote Name Daemon Control)金鑰

RNDC詳解: http://dns-learning.twnic.net.tw/bind/security.html#two
named.ca     最頂層 dns server 定義,在 named.conf 設定時必須使用 type hint 來指定
db.xxxx.tnc.edu.tw     IPv4/IPv6共用正解檔
db.163.26.xxx     IPv4反解檔
2001.288.75xx.rev     IPv6反解檔
localhost     IPv4/IPv6 localhost 正解檔
rev-127.0.0     IPv4 localhost 反解檔
rev.local6     IPv6 localhost 反解檔


    * 限制遞迴查詢設定檔結構
          主控檔: named.conf + auth_zones.conf
            named.conf 主內容在限制遞迴查詢,而可查詢的網域改放在 auth_zones.conf
          其他檔案與上面一致


    * port 值: TCP/UDP 53 ; localhost: 953
    * 手動啟動 | 停止 DNS 服務: /etc/init.d/bind9 start | stop | restart


設定檔內關鍵用語解說

筆者整理了 Bind9 各設定檔常出現的關鍵用語如下,請參考:
$TTL 86400     對方主機查詢完畢,其值要保留(快取)的秒數,例:86400秒
$ORIGIN     宣告本設定檔所列之所有記錄出自於那個網域,最後必須以「.」做結尾,否則會自動再加上網域名稱
$ORIGIN subnet     授權自己的子網域給另一台 DNS Server
@     代表「Zone」

以 db.xxx.tnc.edu.tw 設定檔為例,【@】指的是 xxx.tnc.edu.tw。
以 localhost 設定檔為例,【@】指的是 localhost
IN SOA     開始授權(Star of Authority),後面接了兩個參數是指「本 zone 的管理主機名」及「本 zone 的管理者」
IN NS     負責的 Name Server 主機名稱為何?
IN A     為主機名稱賦予 IPv4 位址
IN AAAA     為主機名稱賦予 IPv6 位址
IN CNAME --> 別名     例: www,ftp,s1...皆是 dns 的分身
IN PTR --> 反解     某 IP 所代表的主機名稱
IN MX -->Mail eXchange     轉信,例:
    mail.tw IN MX 0 spamgw.tw
    mail.tw IN MX 10 mail.tw

說明如下:

   1. 把【xxx@mail.tw】信件先轉給【spamgw.tw】(註: 有兩筆 MX 記錄時,數值低的有較高的優先權)
   2. 【spamgw.tw】收了信之後(並處理之),發現原來指定收信人是在【mail.tw】,因此再把它轉回給【mail.tw】
   3. 如果 spamgw 故障,理論上會送至第二優先 mail.tw(它自己),但依游戲規則,就算是 mail.tw 它自己,它還是會去問 dns.tw ,信件 xxx@mail.tw 的 MX 為何?結果 dns.tw 說,要優先送 spamgw.tw。簡言之,設了 MX 之後,最優先的那台主機一定不可以故障,否則會收不到信件

    * 注意:mail 與 dns 同位址時,不可以採用 CNAME 的設法,一定要用 IN A,才可正常收發信件

限制遞迴查詢 vs 不限制

限制遞迴查詢的意思是,本 DNS Server 只回答所轄網域的問題,其餘不答。不限制的話,就沒有上述限制。例如:當一台 client 向 DNS Server(163.26.182.1)詢問 tw.yahoo.com 時,若有做限制,那麼它不會回答,因為 tw.yahoo.com 不歸 dc1es.tnc.edu.tw 所管。反之,若不做任何限制,它會依其根設定檔(named.ca)一層層往上問,幫 client 找到 tw.yahoo.com 的 IP Address 並回覆之。

可是,貴校可能已設妥限制,而且學校的電腦也都以本校的 DNS Server 為查詢主機,為何還是可以查得到 tw.yahoo.com ?那是因為在 named.conf 內的:「acl allow_clients { 127.0.0.1; 163.26.182.0/24; 2001:288:75a6::/48; };」設定中有說明,要開放給校內的機器查詢。

限制遞迴查詢雖然會造成一些不方便,但它會有較高的安全性,尤其是對 ARP 類病毒偽造網址攻擊,有較高的防禦能力。不過未來若 IPv6 only 實施(沒有 ARP 機制,改用 fe80:...機制),其實限制遞迴查詢,就比較沒有存在意義(目前是 IPv4 與 IPv6並存)。


Linux Server初步設定方法

有兩個方式來設定 DNS 參數

   1. 在設定管理密碼(Linux-setup)時勾選【這台主機要擔任 DNS Server 嗎 ?】,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔
      注意:本方式僅適用於裝完 Linux Server,第一次登入時。因為 Linux-setup 本身會改變很多設定值(不只 dns),若機器已順利運作多時,勿用。
   2. 直接在終端機介面下指令

   1. 不限遞迴查詢: root@dns~# ols3dns
   2. 限制遞迴查詢: root@dns~# ols3dns --no-recursive
   3. 以大成國小為例
      #-----------------------------------------------------#

      # 臥龍小三 工 具 箱 (1.0.7Linux) Copyright 2006 OLS3  #
      # DNS 自動產生器 1.0.7Linux for Linux          #
      # All rights Reserved.                #
      #-----------------------------------------------------#

      請輸入網域名稱? 例如: jmjh.tnc.edu.tw
      dc1es.tnc.edu.tw
      請輸入IP前三個數字? 例如: 163.26.167
      163.26.182
      請輸入第一台主機的第四個IP?
      例如: 163.26.167.1 的 1
      1
      您要架設第二部 DNS 嗎?(Y/N)
      N

      Done!


Linux初步設定方法

與 Linux Server 一樣,有兩個方式來產生基本的 DNS 設定檔

   1. 在設定管理密碼(Linux-csetup-utf8/Linux-csetup)時,在最後一個問題【這台主機要擔任 DNS Server 嗎 ?】回答「Y」,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔。
      注意:本方式僅適用於裝完 Linux Server,第一次登入時。因為 Linux-setup 本身會改變許多設定值,若機器已順利運作多時勿用。
   2. 先把終端機的字元編碼改為 Big5 ,再下指令

   1. 不限遞迴查詢: root@dns~# ols3dns
   2. 限制遞迴查詢: root@dns~# ols3dns --no-recursive
   3. 設定過程與上例一樣,請參考上面文件



進階設定
IPv4 的正反解
新增一筆IPv4位址正解

要新增一筆正解記錄只要在正解檔「 /etc/bind/db.xxx.tnc.edu.tw 」內,加上一筆 IN A 的記錄,再把 serial n加1,並重新啟動 DNS Server 即可。 下文,筆者以新增 spamfilter.dc1es.tnc.edu.tw 網址,指向 163.26.182.250 IPv4 位址為例進行解說。

   1. 編輯 /etc/bind/db.xxx.tnc.edu.tw

      $TTL 86400
      @  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
                 2006030801 ; 這個數字是序號(serial no.) , 每修改一次就要加 1 號
                 86400 ; refresh
                 1800 ; retry
                 1728000 ; expire
                 1200 ; Negative Caching
                 )
         IN   NS dns.dc1es.tnc.edu.tw.
      dns IN A 163.26.182.1
      @ IN MX 0 mail.dc1es.tnc.edu.tw.
      ;網域名稱 dc1es.tnc.edu.tw 也要賦予一組 IPv4 位址
      dc1es.tnc.edu.tw. IN A 163.26.182.1
      ;
      s1     IN   CNAME dns.dc1es.tnc.edu.tw.
      www    IN   CNAME dns.dc1es.tnc.edu.tw.
      ftp    IN   CNAME dns.dc1es.tnc.edu.tw.
      proxy  IN   CNAME dns.dc1es.tnc.edu.tw.
      ;
      mail  IN  A  163.26.182.1
      s2    IN  A  163.26.182.2
      nt    IN  A  163.26.182.3
      s4    IN  A  163.26.182.4
      s5    IN  A  163.26.182.5
      nat   IN  A  163.26.182.234
      ;為 spamfilter 加上 IN A 的記錄
      spamfilter IN A 163.26.182.250  
      註1:正反解設定檔是用「;」來標示註解文字,不是「#」,請勿用錯
      註2:每一行都要靠左,除非本行是上一行的附屬設定

   2. 重新啟動 bind9
      root@dns:~# service bind9 restart
   3. 檢查重新啟動的訊息是否正常
      root@dns:~# tail -50 /var/log/syslog



IPv4反解問題


IPv4正解,可以由上層 DNS Server 授權某任一 IPv4 位址來擔任 DNS 工作,不受 IPv4 網段影響。但反解就不行,因為它受到「至少要一個完整 C Class 網段」的限制。因此,所有分配到 163.26.xxx.1 的學校,可以幫其他前三個數字一致的機器做反解,但 163.26.xxx.129 就不行。這也是為什麼,我們可以向中華電信申請 dns 名稱正解管理權,但反解就不行,只能靠它幫忙代管的原因。

基於上述原因,若貴校有非反解不可的原因,又不在 163.26.xxx.0 網段上,可以連絡教網中心主任協助處理。至於 IPv6 的部分,因為所配發網段皆是完整的 prefix 48 ,所以不會有此一困擾。不過如果貴校如果剛好就分配到 163.26.xxx.0 網段,則可以經由編輯 /etc/bind/db.163.26.xxx 來新增一筆 IPv4 反解記錄。
$TTL 86400

@   IN   SOA   dns.dc1es.tnc.edu.tw.   admin.dns.dc1es.tnc.edu.tw. (
      2000082620  ; serial 要加 1
      86400  ; refresh
      1800  ; retry
      1728000  ; expire
      1200  ; Negative Caching
      )
      IN   NS   dns.dc1es.tnc.edu.tw.

1     IN   PTR   dns.dc1es.tnc.edu.tw.
2     IN   PTR   s2.dc1es.tnc.edu.tw.
3     IN   PTR   nt.dc1es.tnc.edu.tw.
4     IN   PTR   s4.dc1es.tnc.edu.tw.
5     IN   PTR   s5.dc1es.tnc.edu.tw.
234   IN   PTR   nat.dc1es.tnc.edu.tw.
250   IN   PTR   spamfilter.dc1es.tnc.edu.tw.


手動增加 IPv6 的正反解
沒限制遞迴查詢(預設)
修改 named.conf

把紅字的部分, 加至 /etc/bind/named.conf
options {

     directory "/etc/bind";
     allow-transfer {
        163.26.182.2; // Secondary DNS
     };
     listen-on-v6 { any; };
};

logging {
     category lame-servers{null;};
};

zone "." {
     type hint;
     file "named.ca";
};

zone "localhost" {
     type master;
     file "localhost";
};

zone "0.0.127.in-addr.arpa" {
     type master;
     file "rev-127.0.0";
};

zone "dc1es.tnc.edu.tw" {
     type master;
     file "/etc/bind/db.dc1es.tnc.edu.tw";
};

zone "182.26.163.in-addr.arpa" {
     type master;
     file "db.163.26.182";
};

// ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "rev.local6";
};

// 2001.288.750b 的反解檔
zone "6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa." {
     type master;
     file "2001.288.75a6.rev";
};


繼續修改 db.xxx.tnc.edu.tw

$TTL 86400
@  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
           2006030802 ; serial 要加 1
           86400 ; refresh
           1800 ; retry
           1728000 ; expire
           1200 ; Negative Caching
           )
   IN   NS dns.dc1es.tnc.edu.tw.
dns  IN  A    163.26.182.1
     IN  AAAA 2001:288:75a6::1
;上面 IN AAAA 前面一定要留空白, 代表是要繼續設 dns 主機的 AAAA(IPv6) 記錄
;
@ IN MX 0 mail.dc1es.tnc.edu.tw.
;
dc1es.tnc.edu.tw. IN A 163.26.182.1
      IN  AAAA  2001:288:75a6::1
;上面兩行指「網域名稱 dc1es.tnc.edu.tw 也賦予一組 IPv4 及 IPv6 位址」
;
s1     IN CNAME dns.dc1es.tnc.edu.tw.
www    IN CNAME dns.dc1es.tnc.edu.tw.
ftp    IN CNAME dns.dc1es.tnc.edu.tw.
proxy  IN CNAME dns.dc1es.tnc.edu.tw.
;
mail   IN  A     163.26.182.1
       IN  AAAA  2001:288:75a6::1
s2     IN  A     163.26.182.2
nt     IN  A     163.26.182.3
s4     IN  A     163.26.182.4
s5     IN  A     163.26.182.5
nat    IN A  163.26.182.234
       IN AAAA  2001:288:75a6::234  
spamfilter IN A  163.26.182.250  
;經過修改 spamfilter.dc1es.tnc.edu.tw 便會有 IPv4 及 IPv6 兩筆記錄


修改 localhost 新增 ::1 正解

$TTL 86400
@    IN   SOA    dns.dc1es.tnc.edu.tw.    admin.dns.dc1es.tnc.edu.tw. (
      2000082620 ; serial 要加 1
      86400 ; refresh
      1800 ; retry
      1728000 ; expire
      1200 ; Negative Caching
      )
     IN   NS   dns.dc1es.tnc.edu.tw.
;
localhost. IN  A    127.0.0.1
           IN  AAAA  ::1

    * 註:紅字為修改之處



建立 ::1 及 2001.288.75xx.rev 反解檔

    * 建立 ::1 IPv6 的 localhost 反解
      root@dns~# vi /etc/bind/rev.local6

$TTL 86400
@ IN  SOA  dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (1 15m 5m 30d 1h)
    IN   NS  dns.dc1es.tnc.edu.tw.

; (1 15m 5m 30d 1h) 中的 1 是序號, 每次修改都要加 1

;;

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. IN PTR localhost.

註:除了 IN NS 這一行為 SOA 這一行的附屬參數,所以左側留有空白外,其餘各行前面不可留空白

    * 建立 IPv6 反解檔
      root@dns~# vi /etc/bind/2001.288.75a6.rev

$TTL 86400
$ORIGIN 6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa.
@  IN   SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (1 15m 5m 30d 1h)
   IN   NS   dns.dc1es.tnc.edu.tw.
;;
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  dns.dc1es.tnc.edu.tw.
234.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  nat.dc1es.tnc.edu.tw.

限制遞迴查詢

只需修改下面這兩個設定檔,其餘設定值與不限遞迴查詢一致
修改 named.conf

options {
     directory "/etc/bind";
     allow-transfer {
        163.26.182.2;
     };
     listen-on-v6 { any; }; //要加上這一行
};


logging {
     category lame-servers{null;};
};

// 把學校 IPv6 網段加入可允許查詢區,例:新增 2001:288:75a6::/48;
acl allow_clients { 127.0.0.1; 163.26.182.0/24; 2001:288:75a6::/48; };

// 在 acl 中的 IP 允許的操作
view "recursive" {
     match-clients { allow_clients; };
     recursion yes;
     include "auth_zones.conf";
};

// 未在 acl 中的 IP 拒絕使用遞迴式查詢
view "external" {
     match-clients { any; };
     recursion no;
     include "auth_zones.conf";
};


修改 auth_zones.conf

zone "." {
     type hint;
     file "named.ca";
};

zone "localhost" {
     type master;
     file "localhost";
};

zone "0.0.127.in-addr.arpa" {
     type master;
     file "rev-127.0.0";
};

zone "dc1es.tnc.edu.tw" {
     type master;
     file "/etc/bind/db.dc1es.tnc.edu.tw";
};

zone "182.26.163.in-addr.arpa" {
     type master;
     file "db.163.26.182";
};

// 新增 ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "rev.local6";
};

// 新增 2001.288.75a6 的反解檔
zone "6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa." {
     type master;
     file "2001.288.75a6.rev";
};
修改 db.xxx.tnc.edu.tw 正解檔

 與不限遞迴查詢做法相同,請參考前文

建立 ::1 及 2001.288.75xx.rev 反解檔

 與不限遞迴查詢做法相同,請參考前文

內嵌式系統 Boot Loader 技術(Linux主機伺服器架設技術)

內嵌式系統 Boot Loader 技術(Linux主機伺服器架設技術)

在私人的內嵌式板子運行 GNU/Linux 系統已經變得越來越流行。
一個內嵌式 Linux 系統從軟體的角度看通常可以分為四個層次:

1. 引導加載程式。內含固化在韌體(firmware)中的 boot 代碼(可選),和 Boot Loader 兩大部分。

2. Linux 內核。特定於內嵌式板子的定制內核以及內核的啟動參數。

3. 檔案系統。內含根檔案系統和建立於 Flash 記憶體裝置之上檔案系統。通常用 ram disk 來作為 root fs。

4. 使用者應用程式。特定於使用者的應用程式。有時在使用者應用程式和內核層之間可能還會內含一個內嵌式圖形使用者介面。常用的內嵌式 GUI 有:MicroWindows 和 MiniGUI 懂。

引導加載程式是系統加電後運行的第一段軟體代碼。回憶一下 PC 的體系結構我們可以知道,PC 機中的引導加載程式由 BIOS(其本質就是一段韌體程式)和位於硬碟 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起組成。BIOS 在完成硬體檢驗和資源配置後,將硬碟 MBR 中的 Boot Loader 讀到系統的 RAM 中,然後將控制權交給 OS Boot Loader。Boot Loader 的主要運行任務就是將內核映像從硬碟上讀到 RAM 中,然後跳轉到內核的入口點去運行,也即開始啟動操作系統。

而在內嵌式系統中,通常並沒有像 BIOS 那樣的韌體程式(注,有的內嵌式 CPU 也會內嵌一段短小的啟動程式),因此整個系統的加載啟動任務就完全由 Boot Loader 來完成。比如在一個基於 ARM7TDMI core 的內嵌式系統中,系統在上電或復位時通常都從位址 0x00000000 處開始執行,而在這個位址處安排的通常就是系統的 Boot Loader 程式。

本文將從 Boot Loader 的概念、Boot Loader 的主要任務、Boot Loader 的框架結構以及 Boot Loader 的安裝等四個方面來討論內嵌式系統的 Boot Loader。

2. Boot Loader 的概念

簡單地說,Boot Loader 就是在操作系統內核運行之前運行的一段小程式。通過這段小程式,我們可以起始化硬體裝置、建立記憶體空間的映射圖,從而將系統的軟硬體環境帶到一個合適的狀態,以便為最終呼叫操作系統內核準備好正確的環境。

通常,Boot Loader 是嚴重地依賴於硬體而實現的,特別是在內嵌式世界。因此,在內嵌式世界裡建立一個通用的 Boot Loader 幾乎是不可能的。儘管如此,我們仍然可以對 Boot Loader 歸納出一些通用的概念來,以指導使用者特定的 Boot Loader 設計與實現。

1. Boot Loader 所支援的 CPU 和內嵌式板

每種不同的 CPU 體系結構都有不同的 Boot Loader。有些 Boot Loader 也支援多種體系結構的 CPU,比如 U-Boot 就同時支援 ARM 體系結構和MIPS 體系結構。除了依賴於 CPU 的體系結構外,Boot Loader 實際上也依賴於具體的內嵌式板級裝置的配置。這也就是說,對於兩塊不同的內嵌式板而言,即使它們是基於同一種 CPU 而構建的,要想讓運行在一塊板子上的 Boot Loader 程式也能運行在另一塊板子上,通常也都需要修改 Boot Loader 的源程式。

2. Boot Loader 的安裝媒介(Installation Medium)

系統加電或復位後,所有的 CPU 通常都從某個由 CPU 製造商預先安排的位址上取指令。比如,基於 ARM7TDMI core 的 CPU 在復位時通常都從位址 0x00000000 取它的第一條指令。而基於 CPU 構建的內嵌式系統通常都有某種類型的固態存儲裝置(比如:ROM、EEPROM 或 FLASH 等)被映射到這個預先安排的位址上。因此在系統加電後,CPU 將首先執行 Boot Loader 程式。

下圖1就是一個同時裝有 Boot Loader、內核的啟動參數、內核映像和根檔案系統映像的固態存儲裝置的典型空間配置結構圖。

3. 用來控制 Boot Loader 的裝置或機制

主電腦和目的機之間一般通過串口建立連線,Boot Loader 軟體在執行時通常會通過串口來進行 I/O,比如:輸出列印訊息到串口,從串口讀取使用者控制字元等。

4. Boot Loader 的啟動過程是單階段(Single Stage)還是多階段(Multi-Stage)

通常多階段的 Boot Loader 能提供更為複雜的功能,以及更好的可移植性。從固態存儲裝置上啟動的 Boot Loader 大多都是 2 階段的啟動過程,也即啟動過程可以分為 stage 1 和 stage 2 兩部分。而至於在 stage 1 和 stage 2 具體完成哪些任務將在下面討論。

5. Boot Loader 的操作模式 (Operation Mode)

大多數 Boot Loader 都包括兩種不同的操作模式:"啟動加載"模式和"下載"模式,這種區別僅對於開發人員才有意義。但從最終使用者的角度看,Boot Loader 的作用就是用來加載操作系統,而並不存在所謂的啟動加載模式與下載工作模式的區別。

啟動加載(Boot loading)模式:這種模式也稱為"自主" (Autonomous)模式。也即 Boot Loader 從目的機上的某個固態存儲裝置上將操作系統加載到 RAM 中運行,整個過程並沒有使用者的介入。這種模式是 Boot Loader 的標準工作模式,因此在內嵌式產品發佈的時侯,Boot Loader 顯然必須工作在這種模式下。

下載(Downloading)模式:在這種模式下,目的機上的 Boot Loader 將通過串口連線或網路連線等通信手段從主電腦(Host)下載檔案,比如:下載內核映像和根檔案系統映像等。從主電腦下載的檔案通常首先被 Boot Loader 儲存到目的機的 RAM 中,然後再被 Boot Loader 寫到目的機上的FLASH 類固態存儲裝置中。Boot Loader 的這種模式通常在第一次安裝內核與根檔案系統時被使用;此外,以後的系統更新也會使用 Boot Loader 的這種工作模式。工作於這種模式下的 Boot Loader 通常都會向它的終端使用者提供一個簡單的指令行介面。
標籤: 網路資訊

Linux主機虛擬通道(PPTP VPN)(Linux主機伺服器架設技術)

Linux主機虛擬通道(PPTP VPN)(Linux主機伺服器架設技術)

用 Linux 建立虛擬通道(PPTP VPN),供公司外部的 IP 與主機建立專用通道,再以此通道對外連線。
其運作原理如下,pptpd 提供使用撥接進入的通道, iptables 提供 route 出去的路由。


Linux pptp設定

    * 安裝 pptp
      root@Linux:# apt-get update
      root@Linux:# apt-get install pptpd
    * 修改 /etc/pptpd.conf
      root@Linux:# vi /etc/pptpd.conf (確保您的設定檔內, 有以下參數設定)

option /etc/ppp/pptpd-options
logwtmp

#撥接進入時, vpn server 的 ip address
localip 192.168.0.1
#撥接進入時, 可配發的 ip address (與 dhcp 無關)
remoteip 192.168.0.10-20

    * 修改 /etc/ppp/pptpd-options
      root@Linux:# vi /etc/ppp/pptpd-options

# name 參數與 client 端設定有關
name myvpn_name

refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128

# 配送 ip address 給 client 時, 指定 DNS Server IP 位置供 client 使用
ms-dns 168.95.1.1
ms-dns 168.95.192.1

proxyarp

# Debian: do not replace the default route
nodefaultroute

lock
nobsdcomp

    * 建立可撥入的帳號密碼, 修改 /etc/ppp/chap-secrets
      root@Linux:# vi /etc/ppp/chap-secrets

# client         server         secret              IP addresses
username         myvpn_name     自訂password         *

#IP address 使用 "*" 代表不限制這個帳號所撥入的 ip 位置

    * 啟動 pptpd
          o 手動啟動: root@Linux:# service pptpd restart
          o 開機自動啟動: 使用 ntsysv 設定

    * 至此, 您可以由 winxp 試著撥入, 應已可以取得一個 192.168.0.10-20 的 IP 位置。不過您也會發現,怎麼無法上網? 原因是, 您的網路封包皆已導向 vpn server , 若 vpn server 不給上, 您反而無法上網。因此, 接下來, 必須修改 /etc/rc.local 的 iptables 規則列, 來解決此一問題。



Linux iptables設定

    * 修改 /etc/rc.local
      root@Linux:# vi /etc/rc.local

# 打開 forward, 找到下面這一行, 去除 #
echo "1" > /proc/sys/net/ipv4/ip_forward

#在 $IPTABLES -P FORWARD ACCEPT 這一行的下方, 加入以下數行
###-----------------------------------------------------###
# 啟動 VPN 內部對外轉址
###-----------------------------------------------------###
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

# 注意: ppp0 這網卡代號可能因 pptpd 軟體而異,請下指令 ifconfig 查詢正確代號
# ------------------------------------------------------###


#在此區塊底下加上 vpn 連線限制
###-----------------------------------------------------###
# 拒絕外部 IP 連至內部 port 號
###-----------------------------------------------------###

###--------------------------------------------------------------###
# 限制外面取用 VPN 連線, ex: 只開放 220.130.230.77及 163.26.182.0/24 撥入
###--------------------------------------------------------------###
$IPTABLES -A INPUT -p tcp -s 220.130.230.77 --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 1723 -j DROP

    * 啟用新規則列
      root@Linux:# service rc.local start

vi 指令大全(Linux主機)

vi 指令大全(Linux主機)

Vi指令大全
進入vi的指令
vi filename: 開啟或新增檔案,並將游標置於第一行首
vi +n filename: 開啟檔案,並將游標置於第n行首
vi + filename: 開啟檔案,並將游標置於最後一行首
vi +/pattern filename: 開啟檔案,並將游標置於第一個與pattern符合的串處
vi -r filename: 在上次正用vi編輯時發生系統崩潰,還原filename
vi filename....filename: 開啟多個檔案,依次進行編輯
搬移游標類指令
h: 游標左移一個字元
l: 游標右移一個字元
space: 游標右移一個字元
Backspace: 游標左移一個字元
k或Ctrl+p: 游標上移一行
j或Ctrl+n: 游標下移一行
Enter: 游標下移一行
w或W : 游標右移一個字至字首
b或B : 游標左移一個字至字首
e或E : 游標右移一個字至字尾
): 游標移至句尾
(: 游標移至句首
}: 游標移至段落開頭
{: 游標移至段落結尾
nG: 游標移至第n行首
n+: 游標下移n行
n-: 游標上移n行
n$: 游標移至第n行尾
H: 游標移至螢幕頂行
M: 游標移至螢幕中間行
L: 游標移至螢幕最後行
0: 游標移至現用的行首
$: 游標移至現用的行尾
螢幕翻滾類指令
Ctrl+u: 向檔案首翻半屏
Ctrl+d: 向檔案尾翻半屏
Ctrl+f: 向檔案尾翻一屏
Ctrl+b: 向檔案首翻一屏
nz: 將第n行滾至螢幕頂部,不指定n時將現用的行滾至螢幕頂部。
插入文字類指令
i: 在游標前
I: 在現用的行首
a: 游標後
A: 在現用的行尾
o: 在現用的行之下新開一行
O: 在現用的行之上新開一行
r: 取代現用的字元
R: 取代現用的字元及其後的字元,直至按ESC鍵
s: 從現用的游標位置處開始,以輸入的文字替代指定數目的字元
S: 刪除指定數目的行,並以所輸入文字代替之
ncw或nCW: 修改指定數目的字
nCC: 修改指定數目的行
[
編輯
]
刪除指令
ndw或ndW: 刪除游標處開始及其後的n-1個字
do: 刪至行首
d$: 刪至行尾
ndd: 刪除現用的行及其後n-1行
x或X: 刪除一個字元,x刪除游標後的,而X刪除游標前的
Ctrl+u: 刪除輸入模式下所輸入的文字
搜尋及取代指令/pattern: 從游標開始處向檔案尾搜尋pattern
?pattern: 從游標開始處向檔案首搜尋pattern
n: 在同一方向重複上一次搜尋指令
N: 在反方向上重複上一次搜尋指令
:s/p1/p2/g: 將現用的行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 將檔案中所有p1均用p2取代
[
編輯
]
選項設定
all: 列出所有選項設定情況
term: 設定終端類型
ignorance: 在搜尋中忽略大小寫
list: 顯示定位點(Ctrl+I)和行尾標誌($)
number: 顯示行號
report: 顯示由面向行的指令修改過的數目
terse: 顯示簡短的警示訊息
warn: 在轉到別的檔案時若沒儲存現用的檔案則顯示NO write訊息
nomagic: 容許在搜尋模式中,使用前面不帶「\」的特殊字元
nowrapscan: 禁止vi在搜尋到達檔案兩端時,又從另一端開始
mesg: 容許vi顯示其他使用者用write寫到自己終端上的訊息
最後行模式指令:n1,n2 co n3: 將n1行到n2行之間的內容複製到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下
:n1,n2 d: 將 n1行到n2行之間的內容刪除
:w: 儲存現用的檔案
:e filename: 開啟檔案filename進行編輯
:x: 儲存現用的檔案並離開
:q: 離開vi
:q!: 不儲存檔案並離開vi
:!command: 執行shell指令command
:n1,n2 w!command: 將檔案中n1行至n2行的內容作為command的輸入並執行之,
若不指定n1,n2,則表示將整個檔案內容作為command的輸入
:r!command: 將指令command的輸出結果放到現用的行
暫存器操作
"?nyy: 將現用的行及其下n行的內容儲存到暫存器?中,其中?為一個字母,n為一個數字
"?nyw: 將現用的行及其下n個字儲存到暫存器?中,其中?為一個字母,n為一個數字
"?nyl: 將現用的行及其下n個字元儲存到暫存器?中,其中?為一個字母,n為一個數字
"?p: 取出暫存器?中的內容並將其放到游標位置處。這裡?可以是一個字母,也可以是一個數字
ndd: 將現用的行及其下共n行文字刪除,並將所刪內容放到1號刪除暫存器中

主機伺服器平台(Linux 與 Windows)有何不同?該如何選擇?

主機伺服器的平台(Linux 與 Windows)有什麼不一樣,該如何選擇?

其實討論的再多,了解的人都會知道,Linux的平台是比較受到歡迎而且市占率最高的一種系統平台。
因此總教頭的建議:如果您的網頁是用微軟的程式語言開發的網站,或是您必須使用微軟開發的資料庫服務(MS SQL),只能使用 Windows系統的平台的話,那您就無從選擇,您就使用 Windows+IIS的虛擬主機服務商吧,
否則建議使用 Linux的虛擬主機平台服務。

所有由 Linux系統建立起的主機平台,因為 Linux系統本身就是所謂的開放源碼,遵循的是開放源碼的公約,不論任何人使用都是免費的。
虛擬主機服務商如果使用這樣的系統平台,和 Windows NT或是 IIS是以註冊人數的多寡計費,相較起來對虛擬主機服務商所負擔的成本是天壤之別。
不僅如此,Apache網頁伺服器也是免費的,平台上使用的 Email系統(sendmail)本身免費的,FTP伺服器也是免費的,您會了解到 Linux平台的虛擬主機成本比 Windows平台的虛擬主機成本便宜非常多!

不僅如此,Linux最被人稱讚的地方是系統核心簡單而且速度快,並且是一個原本就為了架構於多 CPU運作而生成的系統。
在同樣的硬體條件之下,Linux被認為有更大更快的能力同時處理上千筆不同的需求。
也因為如此,許多免費而且功能強大的軟體也都只適用於 Linux系統。
相對於 Windows系統,Linux平台的虛擬主機可以使用的免費軟體和工具會比 Windows系統更來得多樣。

如果您的網站只是一般的靜態網頁,那總教頭建議使用 Linux系統。
如果您的網站使用 PHP,Perl,mySQL,總教頭建議使用 Linux系統。
如果您的網站使用 ASP,VBScript,MS-SQL,那總教頭建議改成別的程式語言,來用 Linux系統吧,如果不改,那就使用 Windows平台囉!

主機檢查軟體-Check Host 1.0.11 免安裝版

主機檢查軟體-Check Host 1.0.11 免安裝版

如果你負責維護很多台機器或很關心自己的網站主機是否都正常維持連線、運作中,除了直接用瀏覽器開網頁或用PING指令查詢回應狀況之外,還有沒有更自動化、更方便的方法呢?
Check Host這個軟體可以幫我們同時監控多個網站或主機IP,透過Ping的方式或Socket connection的方式來檢查本機電腦與指定電腦間的連線是否正常。
除了可自定自動檢查頻率之外,還可設定以桌面通知或Email等方式通知我們,甚至還可自動啟動指定程式來執行自動化工作,相當簡單方便。

免費主機檢查軟體 - Check Host,可以定時檢查伺服器是否存活,一旦發現當機(Ping不到)
就可以自動發信通知你指定的信箱,或者,只於軟體中顯示錯誤訊息
最主要的特色是 - 還可以檢測指定的TCP或UDP埠號之服務能否建立連線。

系統需求:.Net Framework 2.0

您想監視主機伺服器或服務的提供嗎?

檢查主電腦與該程式可以輕鬆地監視伺服器或服務的伺服器。
因此,界定哪些主電腦或IP位址應進行監測。
另外,你可以選取檢查方法:要麼用ping或通過建立一個套接字連線(可選的TCP或UDP)在任何埠上。

當然,知會選項的事件「不再可用」及「可再」可以單獨定義。
知會是盡可能桌面知會,通過 e - mail,也通過執行任何其他程式。

使用方法:

1.安裝好Check Host軟體並啟動主程式之後,視窗中預設會提供兩個測試用的監控項目,可以按把它刪除。如果要新增自己的監控項目,可以按一下左上角的「New program」。

attachments/201009/7699445383.png

2.請在「Description」輸入網站名稱,然後在下面填上IP位址或網域名稱(不可加http://),「Check method」可依需求點選「Ping」或「Socket connection」。

右邊的「Notification」可以選擇是否在桌面顯示提醒通知,或者讓程式自動寄發Email來通知我們。全部設定好再按「Save」按鈕。

attachments/201009/1058967172.png

3.當某個網站掛掉的時候,會出現如下圖的提醒通知視窗,我們可在依照IP或網址前往處理。

attachments/201009/5728813071.png

4.另外如果你選擇寄發Email通知自己或相關工作人員的話,記得要在「Options」設定視窗中的「SMTP Settings」輸入正確的郵件主機相關設定值,才有辦法順利寄信出去。

attachments/201009/7843426413.png


You would like to monitor if a server or service is available?


With the program Check Host you can easily monitor a server or the services of a server.
Therefore define which host or ip address should be monitored. Additionally you can choose the check method: either with a ping or by establishing a socket connection (optionally TCP or UDP) on any port.


Of course, the notification options for the events "no longer available" and "available again" can be defined separately.
A notification is possible as desktop notification, via e-mail and also by executing any other program.



  主機檢查軟體-Check Host 1.0.11 免安裝版下載之檔案位址:
 
  http://luck99.tw/Downloads/Check-Host-1.0.11.rar

Linux+Apache+Mysql+PHP典型配置(Linux主機伺服器架設技術)

Linux+Apache+Mysql+PHP典型配置(Linux主機伺服器架設技術)

Linux系統的安裝我就不講了,這是基本功,其實這篇文章在類似Redhat的其他linux也應該通用,大家只要掌握我提供的方法就行。
記得安裝 Redhat9。0的時候不要安裝系統預設的apache,mysql和php以及關聯的軟體。
已經安裝的請用rpm -e * 刪除已經安裝的包。

1.安裝Mysql3.23.58

其實老實說直接安裝Mysql官方網站提供的rpm包也是一個比較可行的辦法,他的官方網站的rpm包的提供基本跟tar包發行是同步的,這點我比較喜歡,至少安裝rpm包的在後面的除錯中不會出現mysql庫檔案找不到的情況。但這裡還是有必要講一下自訂安裝的步驟,畢竟網友自訂安裝的還說挺多的。

軟體取得:http://www.mysql.com/downloads/index.html

安裝步驟:

tar zxvf mysql-3.23.58.tar.gz
cd mysql-3.23.58

./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql

make

make install

#prefix=/usr/local/mysql mysql安裝的目的目錄

#sysconfdir=/etc my.ini配置檔案的路徑

#localstatedir=/var/lib/mysql 資料庫存放的路徑

安裝完以後要起始化資料庫,當然你是升級的話不用做這步;

/usr/local/mysql/bin/mysql_install_db

如果系統沒有mysql這個使用者的話,最好做以下這步:

useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql

然後我啟動mysql

/usr/local/mysql/bin/safe_mysqld &

ok,先看看mysql能否標準工作

mysql -uroot mysql

一般情況下都是不能標準連結資料庫,錯誤提示一般為:

ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

其實網上大家問的最多的都是整個問題,說什麼連結不到mysqld.sock,其實大家不妨看看mysql的錯誤日誌就明白怎麼回事,我這裡的錯誤日誌是在

/var/lib/mysql/*.err 你會發現mysql只所以不能啟動,是因為/var/lib/mysql的權限不容許mysql服務訪問,英文mysql預設是呼叫mysql使用者來啟動服務的,好了,既然知道是什麼原因找到不能啟動,那就簡單了。我們只要

chown -R mysql:mysql /var/lib/mysql 就行,如果還是啟動不了,再慢慢除錯權限,反正一般啟動不了都是權限的問題。

如果大家還是不能啟動不了的話,那就用我的比較繁瑣的權限的設定,反正我每次都是這麼做的,一般不會有問題,見下:

chown -R root /usr/local/mysql
chgrp -R mysql /usr/local/mysql
chown -R root /usr/local/mysql/bin
chgrp -R mysql /usr/local/mysql/bin
chgrp -R mysql /var/lib/mysql
chmod 777 /var/lib/mysql
chown -R root /var/lib/mysql/mysql
chgrp -R mysql /var/lib/mysql/mysql
chmod 777 /var/lib/mysql/mysql
chown -R root /var/lib/mysql/mysql/*
chgrp -R mysql /var/lib/mysql/mysql/*
chmod 777 /var/lib/mysql/mysql/*
chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a

做完上面的步驟,然後把你編譯目錄的一個腳本COPY過去

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

chkconfig --add mysqld

用ntsysv設定使mysql每次啟動都能自動運行。

好了,至此mysql安裝完畢,你可以這樣起動你的mysql服務

/etc/rc.d/init.d/mysqld start

下面這步比較關鍵,

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql

大家可以不做這步,大可以在編譯其他軟體的時候自訂myslq的庫檔案路徑,但我還是喜歡把庫檔案連結到預設的位置,這樣你在編譯類似PHP,Vpopmail等軟體時可以不用指定mysql的庫檔案位址。

2.安裝Apache1.3.29。我沒有選取安裝Apache2.0是我對他還是不放心,因為網上最新公佈的apache的漏洞基本上是針對2.0,當然大家可以自己選取安裝相應的版本。我這裡講的都是採用DSO動態編譯的方法編譯Apache.

軟體取得:http://httpd.apache.org/

tar zvxf apache_1.3.29.tar.gz
cd apache_1.3.29
修改src/include/httpd.h 增大最大執行緒數

#define HARD_SERVER_LIMIT 256

改成

#define HARD_SERVER_LIMIT 2560

儲存離開編譯apache

./configure --prefix=/usr/local/apache --enable-module=so --enable-module=rewrite --enable-shared=max --htdocsdir=/var/www &&
make &&
make install

#這裡我們通過 enable-module參數告訴設定腳本,我們需要啟動so和rewrite模組,so模組是用來提DSO支援的apache核心模組,而 rewrite模組則是用意實現位址重寫的模組,由於rewrite模組需要DBM支援,如果在初次安裝時沒有編譯進apache,以後需要用到時需要重新編譯整個apache才可以實現。為此除非你可以確定以後不會用到rewrite模組,否則還是建議你在第一次編譯的時候把rewrite模組編譯好。

enable-shared=max 這個參數的作用時編譯apache時,把除了so以外的所有apache的標準模組都編譯成DSO模組。而不是編譯進apache核心內。

好了安裝apache很簡單的哦,啟動apache看看

/usr/local/apache/bin/apachectl start

然後用ie看http://你的伺服器位址。應該能看到熟悉的apache羽毛標誌。

3.安裝PHP4.3.4

軟體取得:http://www.php.net/downloads.php

tar zvxf php-4.3.4.tar.gz
cd php-4.3.4

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-force-cgi-redirect --with-freetype-dir=/usr --with-png-dir=/usr --with-gd --enable-gd-native-ttf --with-ttf --with-gdbm --with-gettext --with-iconv --with-jpeg-dir=/usr --with-png --with-zlib --with-xml --enable-calendar --with-apxs=/usr/local/apache/bin/apxs

make

make install

#我這裡由於伺服器需要用到GD庫,所以加了一些支援GD的編譯參數,GD直接用了redhat自帶的GD庫,大家沒有安裝的話可以從安裝盤安裝,注意除了安裝GD以外,還要安裝libjpeg,libpng等庫檔案。另外--with-mysql=/usr/local/mysql指向你安裝mysql的路徑。--with-apxs指向apache的apxs檔案的路徑。

vi /usr/local/apache/conf/httpd.conf

尋找<IfModule mod_mime.c>

在此範圍加入

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

然CPOPY PHP的配置檔案

cp ../php4.3.4/php.ini.dist /usr/local/php/lib/php.ini

修改php.ini檔案
register_globals = On

ok!重新啟動一下apache伺服器
/usr/local/apache/bin/apachectl restart

然後寫個php測試頁info.php:內容如下

<?php
phpinfo();
?>

標準的話,應該能看到php的訊息了,恭喜你的Apche+Mysql+PHP安裝完成。
標籤: 網路資訊

Postfix SMTP Server 郵件服務(Linux主機伺服器架設技術)

Postfix SMTP Server 郵件服務(Linux主機伺服器架設技術)

郵件服務簡單講,包含了寄件與收件兩部份。
但,實務上要考慮的點不只這樣,寄信(SMTP)的確較單純,但收信又得分成:主機收下(SMTP),送至客戶端(POP3 or IMAP)兩步驟來處理。


A Mail Client 要寄信給 B Mail Client ,解釋如下:

   1. A Mail Client 向 A Mail Server 發出寄信需求
   2. A Mail Server 的 SMTP Server 接到請求,依 e-mail address 找到對方 SMTP Server(B Mail Server)
   3. B Mail Server 會先依 DNS 的 MX 記錄,把信送至過濾,再由 Spamfilter 送回
   4. B Mail Server 接到 Spamfilter 送回的信,仍會再檢查 e-mail address ,是否有此 user ,若有接下信件
   5. B Mail Server 把接下的信件暫存至 /var/mail/user 內
   6. B Mail Client 要取信,必須透過 POP3 Server 到 /var/mail/user 取信



Postfix SMTP Server

SMTP Server全名叫:【Simple Mail Transfer Protocal】Server,它的主要工作有兩個:「MTA(mail transfer agent): 寄信出去」、「MDA(mail delivery agent): 把別人寄來的信暫時儲存至 /var/mail/username 」。因此,雖然一般人稱呼 SMTP 為「寄信伺服器」,但身為網管人員不可以這樣看待,切不可忘記其仍有【MDA】功能。

至於收發信件的人員(Mail Client),它們的身份為定位為 MUA; Mail User Agent,它是由 user 端與 POP3 Server結合而成,並不在本文 SMTP 的探討範圍內。


基本設定

    * 通訊埠:TCP 25
    * 主設定檔:/etc/postfix/main.cf
    * Linux 安裝完畢,南縣必修改處,紅字為新增/修改處

# 以下是定義什麼樣的收件者郵件格式Postfix會把它收下來
# 若您希望: 帳號@dc1es.tnc.edu.tw 也能收到信, 那麼您可以改用以下設定:
mydestination = $myhostname, $mydomain, mail.$mydomain
#
# 目前的設定是只收下: 帳號@dns.dc1es.tnc.edu.tw 這種格式的信件
# mydestination = $myhostname
      :
      :
# 因應 IPv6 而新增的設定
inet_protocols = ipv4, ipv6
# [ ] 內填貴校 spamfilter 主機之 IPv4 Address
relayhost = [163.26.182.249]

    * 註:RedHat 系列的 Sendmail relayhost 設定
      修改 /etc/mail/sendmail.cf ,把 DS 改為 DSspamfilter.dc1es.tnc.edu.tw



郵件過濾器之設定

郵件過濾器已配發,安裝在網路機櫃附近。它具有以下幾個特點:

   1. 可塔配多台郵件伺服器
   2. 使用者可以自行取回/寄出誤判信
   3. 各校網管可以自行登入設定管理
   4. 以 DNS MX 方式,在信件尚未被 postfix 收取前,就轉至過濾器,成功通過的信件才會回寄的郵件伺服器



修改 DNS 記錄

由於本過濾器採用 dns 轉信(mx)機制才達成過濾的目的,因為在 DNS 主機上必須加上以下設定

$TTL 86400
@  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
           2006030801 ; 每修改一次, 數字就要加 1
           86400 ; refresh
           1800 ; retry
           1728000 ; expire
           1200 ; Negative Caching
           )
   IN   NS   dns.dc1es.tnc.edu.tw.
dns   IN   A   163.26.182.1
; 把 user@dc1es.tnc.edu.tw 的信先轉往 spamfilter.dc1es.tnc.edu.tw
@   IN   MX   0   sapmfilter.dc1es.tnc.edu.tw.
@   IN   MX   10   mail.dc1es.tnc.edu.tw.
; 把 user@dns.dc1es.tnc.edu.tw 的信先轉往 spamfilter.dc1es.tnc.edu.tw
dns.dc1es.tnc.edu.tw.   IN   MX   0   sapmfilter.dc1es.tnc.edu.tw.
dns.dc1es.tnc.edu.tw.   IN   MX   10   dns.dc1es.tnc.edu.tw.
; 網域名稱 dc1es.tnc.edu.tw 也要賦予一組 IPv4 位址
dc1es.tnc.edu.tw.   IN   A   163.26.182.1



修改防火牆設定

關於 Mail 主機的 Port 25 討論如下

    * 就寄信而言
      Mail Client 端(Outlook / Webmail)必須連至 Mail 主機之 SMTP 25 埠才可發信。


    * 就收信而言

   1. 若沒有 spamfilter 機制,SMTP 必須全開 port 25,以接收全球其他 Mail Server 的來信,不可加設防火牆規則列進行阻擋。
   2. 但 spamfilter 設了 DNS MX 機制後,信件封包之收件者若是以 mail@hostname 呈現,比如 yh@mail.tnc.edu.tw 。那麼信件在到達 Mail Server 前,就已經被 DNS Server 轉至 spamfilter 主機過濾。過濾完成的信件,再經由 spamfilter 送回 Mail 主機之 SMTP Server。簡言之,其實在此機制下, Mail Server 的 port 25 只讓 spamfilter 過就可收到信件。
   3. 問題是,很多垃圾郵件發信機,是直接以 IP 位址串到 port 25,寄給使用者(非正常手段)。


    * 綜合論之
      只要的 Mail Server 把 Port 25 封起來,只讓可能寄信的 IP Range 及 spamfilter 通過,那麼就可以阻擋那些繞過 spamfilter 機制的垃圾信。


Linux 上的做法如下:

    * 修改 /etc/rc.local

#在IPv6 的規則列與網芳規則列之間加上 port 25 的規則
## 防止 spam mail server 直接交寄信包給本 mail server
# 允許本機可直接交寄
$IPTABLES -A INPUT -p TCP -s 127.0.0.0/8 --dport 25 -j ACCEPT
# 允許163.26.0.0 整個 B Class 可直接交寄
$IPTABLES -A INPUT -p TCP -s 163.26.0.0/16 --dport 25 -j ACCEPT
# 教網中心辦公室
$IPTABLES -A INPUT -p TCP -s 203.68.102.0/24 --dport 25 -j ACCEPT
# 允許教育部可直接交寄
$IPTABLES -A INPUT -p TCP -s 140.111.2.0/24 --dport 25 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 140.111.8.0/24 --dport 25 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 140.111.34.0/24 --dport 25 -j ACCEPT
# 允許成大區網可直接交寄
$IPTABLES -A INPUT -p TCP -s 140.116.2.0/24 --dport 25 -j ACCEPT
# 拒絕 非本校 IP 網段交寄信包
$IPTABLES -A INPUT -p TCP -s ! 163.26.182.0/24 --dport 25 -j DROP

/sbin/ip6tables -F
/sbin/ip6tables -A INPUT -p tcp --dport 21 -j DROP

    * 套用新規則列root@dns:~# service rc.local start



轉信機制
多人給一人 aliases

裡,因為行政業務需要,通常同一人可能要收多組的郵件,比如:網管必建的帳號就有 admin, abuse, security 這三組,再加上原本自已慣用的帳號,共四組。那麼,我們如何在伺服器上稍作修改,便通通由 admin 寄出。

    * 設定檔: /etc/aliases
    * 編輯 /etc/aliases,把 root, abuse, security, yh 的信件皆轉給 admin 這個帳號
      root@dns:~# vi /etc/aliases

mailer-daemon: postmaster
webmaster: root
clamav: root
root: admin
abuse: admin
security: admin
yh: admin

    * 下指令:【newaliases】
      root@dns:~# newaliases
    * 註1:abuse, security, yh 等帳號必須建立。
    * 註2:經過 newaliases 之後,寄給上述之信件,皆會直接轉給 amdin,不會在 /var/mail/abuse, security, yh 留下任何資料。



一人給多人

本功能可允許某一帳號收完信件,立即轉給相關人仕。例如:兩個內部帳號 admin ,manager 再加一個外部帳號 tnuser@tn.edu.tw 都需要接到 service 帳號的信件。在 linux 底下,與上面的做法類以,只要修改 /etc/aliases 便可以達成此一目的。


依上例,詳列做法如下:

    * 編輯 /etc/aliases
      root@dns:~# vi /etc/aliases

service: admin, manager, tnuser@tn.edu.tw

    * 執行 newaliases
      root@dns:~# newaliases



架第二台Mail Server注意事項

若有架第二台 Mail Server 需求,要考慮以下幾件事情,第一:至少要設妥 DNS 正解及 MX 記錄,第二:也要加入南縣配發給各校的 spamfilter 控管。假設大成國小有一台 mail2.dc1es.tnc.edu.tw --> 163.26.182.8 為例子,分述設定過程如下:


新裝機注意事項

    * 使用 Linux 新裝的 mail2,在設定管理密碼(Linux-csetup-utf8)時,基本參數示例如下
          ◎.主機名稱: mail2
          ◎.網域名稱: dc1es.tnc.edu.tw
          ◎.IP 位置: 163.26.182.8
          ◎.不擔任 DNS Server
    * /etc/postfix/main.cf 修改注意
          ◎.mydestination 不動,就是 hostname 而已
          ◎.要把 Spamfilter 的寄信過濾加上

            mydestination = $myhostname
            # [ ] 填入 spamfilter 的 IPv4 Address
            relayhost = [163.26.182.249]



修改 DNS 正解檔及防火牆設定檔

    * 在適當位置加上,下列之 DNS 記錄
      root@dns:~# vi /etc/bind/db.dc1es.tnc.edu.tw

mail2.dc1es.tnc.edu.tw.    IN    MX    10 spamfilter.dc1es.tnc.edu.tw.
mail2.dc1es.tnc.edu.tw.    IN    MX    20 mail2.dc1es.tnc.edu.tw.

mail2    IN    A    163.26.182.8

    * Linux修改 /etc/rc.local 方法與前文一樣,請參考前面。



加入 Spamfilter 過濾

當初 Spamfilter 裝機時,已針對使用中的 Mail Server 處理過,現在我們只要把新增的 Mail Server 通知它,使它能處理新郵件主機的信件。由於各校手上已有該機器的操作手冊,所以在此,筆者僅提示一下執行順序。若對此步驟仍有疑慮,不知該如何處理,也可以請教網中心系統連線組代勞。

   1. Mail Server 主機上建立 syncact 帳號:root@dns:~# adduser syncact
   2. 用瀏覽器連線至 spamfilter : https://spamfilter.dc1es.tnc.edu.tw:50000
   3. 在管理介面點「郵件伺服器管理」(最左上角)
          * 郵件網域: mail2.dc1es.tnc.edu.tw
          * 郵件伺服器 IP 位址/主機名稱: 163.26.182.8
          * 點選【建立】
   4. 在管理介面點「人員管理」
          * 左側「UNIX帳號同步」
          * UNIX 帳號主機設定
            主機名稱:mail2.dc1es.tnc.edu.tw
            IP:163.26.182.8
            Port:22
            UNIX登入帳號:syncact
            UNIX登入密碼:●●●●●●●
            郵件網域:mail2.dc1es.tnc.edu.tw
          * 點選【新增】



實用工具指令

    * Postfix 啟動/關閉/重新啟動
      root@dns:~# service postfix start|stop|restart

    * /etc/postfix/main.cf 設定檔語法檢查
      root@dns:~# postfix check

    * 郵件佇列查詢(還有多少信待寄?)
      root@dns:~# postqueue -p

    * 刪除所有在佇列中的信件
      root@dns:~# postsuper -d ALL

    * 依 postqueue -p 所列的 QUEUE_IP 檢視其中某封信件之內容
      root@dns:~# postcat -q QUEUE_ID



Amavis-new過濾與防毒

因為南縣各校已建置專用的郵件過濾主機,因此 Linux 預設已拿掉 Amavis+Clamav+SpamAssassin 的過濾功能。不過,如果您安裝 Linux 的網路環境沒有獨立的郵件過濾器,還是得把它安裝起來。

注意:

   1. 非台南縣各校不可加 /etc/rc.local 內的 port 25 過濾
   2. 非台南縣各校,DNS 不需 MX 至 spamfilter
   3. 啟動 amavis 後,郵件在主機內的運作為

postfix 25 -> Amavis+Clamav+SpamAssassin 10024 -> postfix 10025 -> 寄出 .or. 送至/var/mail


Linux sqz系列之安裝

    * 由於 clamav 在 debian 6.0(squeeze) 以後,已直接進入 debian 的 update 資料庫,所以請先確認 sources.list 有下列來源庫

deb ftp://free.nchc.org.tw/debian/ squeeze-updates main non-free contrib

    * root@dns:~# apt-get update

    * root@dns:~# apt-get install amavisd-new spamassassin clamav clamav-daemon clamav-docs libclamunrar6 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop lha arj unrar zo◎.unzip cabextract



Linux e系列(Debian Lenny)之安裝

    * 修改套件庫,加入由 clamav 組織維護的 debian 套件
      root@dns:~# vi /etc/apt/sources.list

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free


    * root@dns:~# apt-get update


    * root@dns:~# apt-get install amavisd-new spamassassin clamav clamav-daemon clamav-docs libclamunrar6 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop lha arj unrar zo◎.unzip cabextract



安裝後續共通設定部分

    * 安裝至 clamav 時,會詢問資料更新方式,建議使用 cron 方式(預設是 daemon)

Virus database update method:
      daemon
      ifup.d
      cron
      manual
   <確定>
.........

Local database mirror site:
      db.local.clamav.net
   <確定>
HTTP proxy information (空白就好)
   <確定>
Shold clamd notify after updates
   <是>



    * root@dns:~# vi /etc/amavis/conf.d/15-content_filter_mode (取消兩個 bypass 註解,如下所示)

use strict;

# You can modify this file t◎.re-enable SPAM checking through spamassassin
# and t◎.re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the tw◎.lines below t◎.enable it back
#

@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the tw◎.lines below t◎.enable it back
#

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # insure a defined return


    * root@dns:~# vi /etc/amavis/conf.d/20-debian_defaults (修改規則列, 紅字為建議修改項目)

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = 3.0; # add spam inf◎.headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 10; # 認定可以刪除的垃圾信件
$sa_dsn_cutoff_level = 12; # spam level beyond which a DSN is not sent
......
$final_virus_destiny      = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny     = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny       = D_PASS; # 如果評分超過 sa_kill_level_deflt, 暫時通過以免誤判,但經過一段時間的手動學習並穩定後,要改成 discard
$final_bad_header_destiny = D_DISCARD; # False-positive prone (for spam)


    * root@dns:~# adduser clamav amavis
    * root@dns:~# service clamav-daemon restart
    * root@dns:~# service amavis restart
    * root@dns:~# vi /etc/postfix/main.cf (在檔尾新增下面兩行)

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings


    * root@dns:~# vi /etc/postfix/master.cf(在檔尾新增下面這幾行)

amavis unix - - - - 2 smtp
        -◎.smtp_data_done_timeout=1200
        -◎.smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
        -◎.content_filter=
        -◎.local_recipient_maps=
        -◎.relay_recipient_maps=
        -◎.smtpd_restriction_classes=
        -◎.smtpd_client_restrictions=
        -◎.smtpd_helo_restrictions=
        -◎.smtpd_sender_restrictions=
        -◎.smtpd_recipient_restrictions=permit_mynetworks,reject
        -◎.mynetworks=127.0.0.0/8
        -◎.strict_rfc821_envelopes=yes
        -◎.receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -◎.smtpd_bind_address=127.0.0.1


    * root@dns:~# service postfix restart


    * root@dns:~# netstat -nltp

Active Internet connections (only servers)
Prot◎.Recv-Q Send-Q Local Address         Foreign Address        State       PID/Program name
tcp        0      0 127.0.0.1:10024       0.0.0.0:*              LISTEN     1748/amavisd (maste
tcp        0      0 127.0.0.1:10025       0.0.0.0:*              LISTEN     839/master
tcp        0      0 127.0.0.1:3306        0.0.0.0:*              LISTEN     4400/mysqld
tcp        0      0 0.0.0.0:110           0.0.0.0:*              LISTEN     653/xinetd   
tcp        0      0 220.130.230.76:53     0.0.0.0:*              LISTEN     30549/named
tcp        0      0 127.0.0.1:53          0.0.0.0:*              LISTEN     30549/named
tcp        0      0 0.0.0.0:21            0.0.0.0:*              LISTEN     4579/vsftpd
tcp        0      0 0.0.0.0:22            0.0.0.0:*              LISTEN     4561/sshd
tcp        0      0 0.0.0.0:25            0.0.0.0:*              LISTEN     839/master
tcp        0      0 127.0.0.1:953         0.0.0.0:*              LISTEN     30549/named
tcp        0      0 0.0.0.0:1723          0.0.0.0:*              LISTEN     20233/pptpd         
tcp6       0      0 :::80                 :::*                   LISTEN     29064/apache2
tcp6       0      0 :::22                 :::*                   LISTEN     4561/sshd     
tcp6       0      0 ::1:953               :::*                   LISTEN     30549/named
tcp6       0      0 :::443                :::*                   LISTEN     29064/apache2



過濾信誤判之學習

   1. 先把整封信儲存為郵件檔, 副檔名為 eml
   2. 變成垃圾信
      root@dns:~# sa-learn --spam *.eml
   3. 變成正常信
      root@dns:~# sa-learn --ham *.eml



啟動 postfix 寄信認證機制(Lenny)
前言

本文只適用 Linux e (lenny) ,若您是安裝其他系統,做法應該有所差異,請另找文件參考。

    * 時機
      若您的郵件主機沒有垃圾郵件過濾器幫忙,而且使用者可能來自任何 IP Address ,有使用獨立的 Mail Client 程式 (如 Outlook, LiveMail, Thunderbird...etc) 寄信的需求。
    * Linux e2預設

   1. 為避免 OpenRelay 只限 $mynetwork 內所設的網段才可以寄信
   2. 合法區段內的電腦寄信不必輸入密碼認證
   3. 南縣各校可能會在 /etc/rc.local 設定 port 25 的阻擋規則列

    * 基於上述之預設值,要達成此需求的做法概要

   1. 打開 Postfix 寄信只限網內或 localhost 限制
   2. 限來自郵件主機之 hostname 或 domain 的寄件者始得以 relay
   3. 加裝 Postfix 寄信使用者密碼認證制度
   4. 南縣各校必須解除 rc.local 內 port 25 的 iptables 規則列(註:此舉在沒有加裝 amavis 的情況下會導致垃圾信大增)



開始設定

    * 安裝 cyrus sasl 套件
      root@dns:~# apt-get update
      root@dns:~# apt-get install libsasl2-2 libsasl2-modules sasl2-bin

   ---------- 正在設定 sasl2-bin ------------

   ......

   Backup file name for /etc/sasldb2:   /var/backups/sasldb2.bak  →  「確定」

    * 修改 /etc/default/saslauthd
      root@dns:~# vi /etc/default/saslauthd

START=yes

    * 啟動saslauthd服務
          ◎.剛設定完畢,重新啟動
            root@dns:~# service saslauthd restart
          ◎.預設開機啟動服務
            root@dns:~# ntsysv → 找到 saslauthd,打勾

    * 修改 /etc/postfix/main.cf
      root@dns:~# vi /etc/postfix/main.cf 確認以下設定值與本文一致

......
# 允許本機(WebMail),可以不必經由認證
mynetworks = 127.0.0.0/8
......
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unauth_destination,
   check_relay_domains

    * 修改 /etc/postfix/sasl/smtpd.conf
      root@dns:~# vi /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd


    * 重新啟動 Postfix
      root@dns:~# service postfix restart



Outlook express(LiveMail client) 設定方式

設定妥帳號資訊後,再點選「工具」/「帳戶」,繼續依下面圖示說明進行設定。
Outlook smtp auth 1.png
    
Outlook smtp auth 2.png



POP3 Server

Linux 上推薦的 POP3 Server 有兩套,一套是 Qpopper ,另一套是 Dovecot,這兩套只要二選一即可。其中 Qpopper 的設定較簡單,適合純 POP3 使用,Dovecot 的設定較難,功能較多,若您同時需要 pop3 及 IMAP 這兩個功能,那麼才建議使用 Dovecot。
Qpopper

Qpopper 是 Linux 預載的 POP3 Server ,也建議若無非安裝 IMAP Server 不可的理由,繼續使用它就好。
基本操作

    * 預設它是透過 Xinetd 管理,因此本服務的啟動管理,事實上是要對 xinetd 處理
    * 重新啟動
      root@dns:~# service xinetd restart
    * 永遠停止

   1. 在 ntsysv 內停掉 pop3 項目(前面不加 *)
   2. root@dns:~# service xinetd restart

    * 恢復啟動

   1. 在 ntsysv 內勾選 pop3 項目
   2. root@dns:~# service xinetd restart


南縣 IPv6 設定

為支援南縣各校 IPv6 設備,Linux 上的 Qpopper 必須修改 /etc/xinetd.d/pop3 ,以支援 IPv6 的 pop3 服務。

    * 修改設定檔
      root@dns:~# vi /etc/xinetd.d/pop3 (紅字為新增部分)

service pop-3
{
     disable       = no
     flags         = IPv6
     socket_type   = stream
     protocol      = tcp
     wait          = no
     user          = root
     server        = /usr/sbin/in.qpopper
     server_args   = -f /etc/qpopper.conf
}

    * 重新啟動 qpopper
      root@dns:~# service xinetd restart



Linux e2 及 sqz 要加做 qpopper bug 修正

    * 注意:若您的 Linux sqz 安裝後立即執行 dist-upgrade 完成整體性更新,此動作不必再做
    * 以下內容取自 http://Linux-linux.com/phpBB2/viewtopic.php?t=2907
    * 編輯 /etc/pam.d/qpopper 這個檔案,把原 auth 及 account 這二列用 # 註解掉,加入 @include common-auth 即可,修改後的內容如下

#%PAM-1.0
#auth       required    pam_unix_auth.s◎.shadow
#account    required    pam_unix_acct.so
@include common-auth



Dovecot

若真的有換成 Dovecot 的必要,請下列方式操作

    * 安裝 dovecot 的 pop3 套件

   1. root@dns:~# apt-get update
   2. root@dns:~# apt-get install dovecot-pop3d
      注意:經本動作 qpopper 會被移除

    * 修改 dovecot 設定,以符合 IPv6 設備(它是獨立執行的網路服務程式, 不經 xinetd 幫忙)
      root@dns:~# vi /etc/dovecot/dovecot.conf (紅字為新增/修改部分)

protocols = pop3
listen = [::]
disable_plaintext_auth = no

    * 重新啟動 dovecot
      root@dns:~# service dovecot restart




突然無法收發信件可能原因

若郵件系統已經使用一段時間,但某天開始突然無法收發信件,可能原因列表如下

    * Clamav 是否沒升級?
          ◎.說明:要常注意 http://Linux.tnc.edu.tw 上的重要通知,若有更新可用時請立即處理
          ◎.現象:下「postqueue -p」指令時,會有大量待寄信件
          ◎.處理:
         1. root@dns:~# postsuper -d ALL
         2. root@dns:~# service postfix stop
         3. 依公告升級 clamav
         4. root@dns:~# service postfix start


    * 郵件過濾器 Spamfilter 問題?
          ◎.郵件過濾器因故停機? 可 PING 一下該主機是否存活,再用瀏覽器試著連線看看
          ◎.新增帳號,忘了到 spamfilter 做「UNIX同步帳號」


    * 硬碟空間已滿?
          ◎.下「postqueue -p」指令,檢查硬碟容量
          ◎.若有設 Quota ,要去檢查該使用者的限額是否已快滿


    * 硬碟故障?
          ◎.重開機時,是否一直自動執行 fsck ?

網頁&資料庫 Linux主機服務(Linux主機伺服器架設技術)

網頁&資料庫  Linux主機服務(Linux主機伺服器架設技術)

Linux 上預載之網頁及資料庫伺服器有,網頁(WWW):Apache2,動態網頁語言:PHP5,資料庫:MySQL5。
這三套的組合,可供網站管理者放置純靜態網頁(HTML)以及含 PHP+MySQL 的動態網頁。
也因此,可以架設一些具 Web 2.0 互動功能的網站,如 XOOPS(CMS), Wordpress(部落格), Moodle(數位學習), MediaWiki(共筆系統), osTube(影音平台), Joomla(CMS), Drupal(CMS)...等等。這樣一來可以服務學校同仁,令所有行政人員皆可自主貼公告、影片及照片,二來減少網管網站內容維運的工作壓力。
開啟PORT

    * TCP 80   Apache2 + PHP
    * TCP 443  加密通道(HTTPS)
    * TCP 3306 MySQL



網頁伺服器 Apache2
基本設定
基本結構

    * 預設網頁存放位置: /var/www
      注意:除了上傳之必要子目錄外,此資料夾切不可以讓 www-data 可完整讀寫
    * 預設個人網頁位置: /home/user/public_html
    * 設定檔位置: /etc/apache2
          主設定檔: /etc/apache2/apache2.conf
          必載入之相關設定: /etc/apache2/conf.d/*
            注意:在此目錄下的所有設定檔皆會被執行,所以若有任何修改,其備份設定檔不可留在原地
          可用模組: /etc/apache2/mods-available
          模組啟用: /etc/apache2/mods-enabled
          可用虛擬站台: /etc/apache2/sites-available
          虛擬站台啟用: /etc/apache2/sites-enabled
    * 記錄檔
          存取記錄: /var/log/apache2/access.log
          錯誤記錄: /var/log/apache2/error.log


模組管理

    * 模組安裝管理
          列出可供安裝的 apache2 套件,裡面名為 apache2-xxx 之套件就是可安裝的模組:
            root@dns:~# apt-cache search libapache2
          安裝模組:
            root@dns:~# apt-get install libapache2-mod-xxxx
    * 啟用模組
         1. 列出模組真實名稱
            root@dns:~# cd /etc/apache2/mods-available
            root@dns:~# ls
         2. 啟用所找到模組,例如:啟用個人網頁模組
            root@dns:~# a2enmod userdir
            注意:模組設定檔大多會有 *.load 及 *.conf 但啟用時,不用輸入副檔名
         3. 重新啟動 Apache2
            root@dns:~# service apache2 restart
    * 註:Apache2 模組並不等於 PHP5 模組,請勿搞混


首頁基本參數

    * 首頁設定檔: /etc/apache2/sites-available/default
    * 參數解說

參數     選項     說明
DocumentRoot     /var/www     首頁資料夾位置在 /var/www
Options     Indexes     首頁沒 index.html 時,自動列出檔案清單

    FollowSymLinks     允許使用 Alias 建立的資料夾捷徑(ex. phpmyadmin)

    MultiViews     增強多國語言支持(Big5 & UTF8 同存也算),但會影響效能
AllowOverride     All     支援 htaccess 程度,若 All 代表完全支援 htaccess 語法
Order
    allow, deny     allow from 及 deny from 抵觸時,以 allow 占較高優先權
allow from     all     允許所有 IP Address 瀏覽本網站



優化Big5與UTF8網頁並存時之處理

    * /etc/apache2/conf.d/charset → 把 AddDefaultCharset 註解掉
      root@dns:~# vi /etc/apache2/conf.d/charset

# AddDefaultCharset UTF-8


    * 在 /etc/apache2/sites-available/default ,加上 MultiViews
      root@dns:~# vi /etc/apache2/sites-available/default

...

     DocumentRoot /var/www
     <Directory />
          Options FollowSymLinks Multiviews
          AllowOverride All
     </Directory>
     <Directory /var/www/>
          Options FollowSymLinks MultiViews
          AllowOverride All
          Order allow,deny
          allow from all
     </Directory>
...



個人網頁

個人網頁功能是讓一般的使用者可以在自己的家目錄底下建立網頁,塔配 ftp 功能,讓使用者自己管理自己的網站。

    * Linux/Linux Server 預設個人網頁位置: /home/username/public_html
    * 連線方式: http://your.host.name/~username/



Linux e 及 sqz 啟用個人網頁功能

Linux e 版本起,預設並沒啟用個人網頁的功能,因此要做一些調整。

    * 啟動個人網頁
      root@dns:~# a2enmod userdir
    * 重新啟動 Apache2
      root@dns:~# service apache2 restart
    * 若要讓個人網頁也可以執行 PHP Code, Linux sqz 這個版本必須繼續修改 /etc/apache2/mods-available/php5.conf , 把下面幾行加 # 註解

<IfModule mod_php5.c>

    <FilesMatch "\.ph(p3?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    # Tre-enable php in user directories comment the following lines
    # (from <IfModule ...> t</IfModule>.) DNOT set it tOn as it
    # prevents .htaccess files from disabling it.
#    <IfModule mod_userdir.c>
#        <Directory /home/*/public_html>
#           php_admin_value engine Off
#        </Directory>
#    </IfModule>
</IfModule>



自訂個人網頁位置

有時,自舊機器移轉至 Linux 時,由於個人網頁的舊設定值是 /home/user_name/html 與 Linux 上的預設值 /home/user_name/public_html 不同,因而出現一些問題。因此,我們可透過修改一些參數,而不必去把每個有個人網頁的使用者找出來修改其網頁資料夾位置仍能達成個人網頁的使用。


    * 注意: Linux sqz 版預設沒有啟動個人網頁功能,請先啟用
      root@dns:~# a2enmod userdir
      root@dns:~# service apache2 restart
    * 設定檔 /etc/apache2/mods-available/userdir.conf
    * 修改下面紅字的部分

<IfModule mod_userdir.c>

   UserDir html
   UserDir disabled root

   <Directory /home/*/html>
      AllowOverride FileInfAuthConfig Limit Indexes
      Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      <Limit GET POST OPTIONS>
         Order allow,deny
         Allow from all
      </Limit>
      <LimitExcept GET POST OPTIONS>
         Order deny,allow
         Deny from all
      </LimitExcept>
   </Directory>
</IfModule>

    * 重新啟動 Apache2 伺服器
      root@dns:~# service apache2 restart
    * 注意: /home/user_name 資料夾的權限必須為 755 才可以


自訂錯誤訊息

這裡所謂的錯誤訊息,是指外面連到學校網頁時,連到某些不存在或有設密碼的網頁時,Apache2 會送出一些警告訊息,以通知瀏覽者。但是,由於這些錯誤訊息並沒有中文版,會造成一些困擾。不過,我們仍可自行製作屬於自己的錯誤訊,比如:瀏覽到不存在網頁,您可以說「別搞怪!本站沒此頁面...看...什麼!」。

    * 設定檔位置,在此,筆者以 /etc/apache2/apache2.conf 為例
          Linux Server(Janaca) ~ Linux e系列: /etc/apache2/apache2.conf
          Linux sqz : /etc/apache2/conf.d/localized-error-pages

    * 修改步驟如下:

   1. 修改設定檔啟用自訂頁面,依本例:只建立 404 及 403 兩訊息,其餘不變
      root@dns:~# vi /etc/apache2/apache2.conf
      找到以下內容,修改紅字部分
      # Customizable error responses come in three flavors:

      # 1) plain text 2) local redirects 3) external redirects
      #
      # Some examples:
      #ErrorDocument 500 "The server made a boboo."
      ErrorDocument 403 /errmsg/e403.php
      ErrorDocument 404 /errmsg/e404.php
      #ErrorDocument 402 http://www.example.com/subscription_info.html
   2. 找一個地方並寫好自訂訊息頁面,依本例其位置在: /var/www/errmsg/
          * 編輯 e403.php 權限不足警告頁例子

            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
            <html lang="zh-tw">

            <head>
            <meta content="text/html; charset=UTF-8" http-equiv="content-type">
            <title>403 Permission Deny!</title>
            </head>

            <body>
            <br><br>
            <h2 align="center">403 Permission Deny! 抱歉您無權閱讀本網頁!
            <br><br>
            <?php ech"<a href='http://".$_SERVER["HTTP_HOST"]."/>回本站首頁</a>" ?>
            </h2>
            </body>

            </html>

          * 編輯 e404.php 找不到頁面的警告頁例子

            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
            <html lang="zh-tw">

            <head>
            <meta content="text/html; charset=UTF-8" http-equiv="content-type">
            <title>404 not find!</title>
            </head>

            <body>
            <br><br>
            <h2 align="center">404! 找不到您要求的網頁!
            <br><br>
            <?php ech"<a href='http://".$_SERVER["HTTP_HOST"]."/>回本站首頁</a>" ?>
            </h2>
            </body>

            </html>

   3. 重新啟動 Apache2
      root@dns:~# service apache2 restart



新增虛擬站台

在此,筆者是以下列之模擬情境列文說明,此情境適用於當學校有另一個人需獨立負責某一網站,網管人員可以在不交出 root 權限下,開放一組 PHP+MySQL 網頁空間給該使用者。

    * 管理者開設一組 Linux 及 MySQL 的 user 帳號/密碼,如:myuser。
    * 因此在 /home 及 /var/lib/mysql 底下皆會產生 myuser 資料夾。
      使用者只能用 ftp 及 phpmyadmin 管理自己的網頁及資料庫(看不到其他資料)。
    * 最後管理者改變網址之指定,如下所示:

http://your.host.name/~myuser   -->   http://myuser.your.host.name/


開設 myuser 帳號

    * 新增 Linux 帳號
      root@dns:~# adduser myuser
    * 使用 phpmyadmin 建立 MySQL 空間

   1. 建立資料庫 myuser
      在 phpmyadmin 首頁就有建立資料庫的功能,請依自己的需求建立
   2. 下 SQL 語法,建立 myuser 使用者並使其只能完全存取 myuser 資料庫

GRANT ALL PRIVILEGES
   ON myuser.*
   T'myuser'@'localhost'
   IDENTIFIED BY 'myuser_pwd';


修改 DNS 設定

新增 myuser.your.host.name 網址

以大成國小 dns 正解設定檔 /etc/bind/db.dc1es.tnc.edu.tw 舉例如下:
      :

www  IN   CNAME   dns.dc1es.tnc.edu.tw.
myuser  IN   CNAME   dns.dc1es.tnc.edu.tw.
;
mail    IN   A   163.26.182.1
s2      IN   A   163.26.182.2
      :

以上例而言:筆者新增了一筆 myuser.dc1es.tnc.edu.tw → 163.26.182.1 的 dns 記錄,也就是說目前 163.26.182.1 有多個英文網址,比如 :

    * dc1es.tnc.edu.tw
    * dns.dc1es.tnc.edu.tw
    * www.dc1es.tnc.edu.tw
    * mail.dc1es.tnc.edu.tw
    * myuser.dc1es.tnc.edu.tw

         :
         :
         等
         等
新增 myuser 虛擬站台

    * 設定檔: /etc/apache2/sites-available
    * 工作原理
          原預設值是針對 hostname 設定(ex: dns.dc1es.tnc.edu.tw)
          要啟用多組設定,不能針對您所要的 myuser 設定,必須考慮周詳。亦即把使用者連至學校首頁的所有可能性皆設妥。例如: http://www.dc1es.tnc.edu.tw 、http://dc1es.tnc.edu.tw 、http://163.26.182.1


修改 /etc/apache2/sites-available/default

修改 default 以供 http://dc1es.tnc.edu.tw 使用

    * root@dns:~# vi /etc/apache2/sites-available/default

Linux Server ~ Linux t3 前面幾行舉例如下:
NameVirtualHost *

<VirtualHost *>
   ServerAdmin webmaster@dns.dc1es.tnc.edu.tw
   # ServerName dc1es.tnc.edu.tw
   DocumentRoot /var/www/
      :
      :

Linux e1 ~ Linux sqz 前面幾行舉例如下:
<VirtualHost *:80>

   ServerAdmin webmaster@dns.dc1es.tnc.edu.tw
   ServerName dc1es.tnc.edu.tw
   ServerAlias www.dc1es.tnc.edu.tw
   ServerAlias 163.26.182.1
   DocumentRoot /var/www/
      :
      :



建立 /etc/apache2/sites-available/myuser

建立 myuser 供 http://myuser.dc1es.tnc.edu.tw 使用

    * root@dns:/etc/apache2/sites-available# vi myuser (內容如下所示)

Linux Server 示例

<VirtualHost 163.26.182.1:80>
        ServerAdmin myuser@dc1es.tnc.edu.tw
        ServerName myuser.dc1es.tnc.edu.tw
        DocumentRoot /home/myuser/public_html/
        <Directory /home/myuser/public_html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddType application/x-httpd-php .php
        </Directory>
</VirtualHost>



Linux Server 示例

<VirtualHost *:80>
        ServerAdmin myuser@dc1es.tnc.edu.tw
        ServerName myuser.dc1es.tnc.edu.tw
        DocumentRoot /home/myuser/public_html/
        <Directory /home/myuser/public_html/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddType application/x-httpd-php .php
        </Directory>
</VirtualHost>



啟動各服務

    * root@dns:~# a2ensite myuser
    * root@dns:~# service bind9 restart
    * root@dns:~# service apache2 restart



Apache2 資安管理
特定網頁之連線限制

若學校有些網頁只限校內 IP 讀取(intranet),但又不想另外架一台網頁伺服器,這時可以透過對資料夾的讀取權限制來達成此一目的。其設定方式可以參考 Linux Server 上 ra-phpmyadmin 之參數寫法,詳見以下說明:


設定方式

    * 設定位置: /etc/apache2/conf.d
    * 舉例說明: /etc/apache2/conf.d/ra-phpmyadmin

# 要鎖的資料夾, 舉例而言 /var/www/myweb --> 要寫成 <Location /myweb>
<Location /phpmyadmin>
  order deny,allow
  deny from all
  # 可連線區, 新增教網中心網段
  allow from 127.0.0.1 163.26.182.0/24 203.68.102.0/24
  Options FollowSymLinks MultiViews
</Location>


無法連線之錯誤訊息
Forbidden


You don't have permission taccess /phpmyadmin/ on this server.
Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch Server at 163.26.182.234 Port 80


解除方式

解除的方式很簡單,把 ra-phpmyadmin 搬走即可,做法如下:

    * root@dns:~# mv /etc/apache2/conf.d/ra-phpmyadmin /root

    * root@dns:~# service apache2 restart

    * 註:絕對不可以把原檔改個名字仍留 conf.d 資料夾內,因為這個資料夾內所有的檔案(無論檔名為何)皆會被執行。



上傳區禁止執行 Script 語言

有時會因一些架站軟體的要求,要建立資料上傳區,如 /var/www/uploads ,而且其檔案權限必須是網頁伺服器(www-data)可讀取(或設成 777)。此時,若有心人士,無論是經由合法手段或透過 PHP 程式漏洞,把 *.php 丟到 uploads ,再經由瀏覽器執行,這樣就會產生資安風險。但如果,不讓 Apache2 伺服器對 uploads 底下特定類型 script 予以解譯並執行的話,那麼此風險就可降到最低。詳細做法如下:

    * 先確認 /etc/apache2/sites-available/default 之 AllowOverride 參數改為 All,擷取部分內容如下

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>


    * 建立 /var/www/uploads/.htaccess
      root@dns:~# vi /var/www/uploads/.htaccess (內容示例如下)

<FilesMatch "\.(php|php3|php4|php5|phtml|pl|py|sh|cgi)$">
deny from all
</FilesMatch>

    * 註:影響力只達 .htaccess 所在之資料夾


    * 改 .htaccess 權限為 root 所有,其他身份唯讀,以免被使用者上傳自己的 .htaccess 覆蓋
      root@dns:~# chown root.root /var/www/uploads/.htaccess
      root@dns:~# chmod 644 /var/www/uploads/.htaccess


鎖密碼網頁製作

假設有個資料夾,裡面的網頁具有機密性,只允許特定人員登入後才可觀看,這可以透過 .htaccess 的設定來協助達成。


確認 AllowOverride 參數

如上文所言,要啟用 .htaccess 之前,要先確認 /etc/apache2/sites-available/default 之 AllowOverride 參數是否為 All 。


建立 .htaccess

假設 http://your.host.name/topsecu/ 這個網址是要帳號密碼認證,那麼其在主機的實體位置為 /var/www/topsecu ,因此,必須在此處建立 .htaccess ,其內容示例如下。

    * root@dns:~# vi /var/www/topsecu/.htaccess

AuthName "TopSecu"
AuthUserFile /var/passwords/topsecu.pwd
AuthType Basic
Require valid-user

    * AuthName 站名
    * AuthUserFile 密碼檔
    * AuthType Basic 基本型式授權(不必分組)
    * Require valid-user 要有帳號


建立密碼檔

    * 第一次建立
      root@dns:~# mkdir /var/passwords
      root@dns:~# htpasswd –c /var/passwords/topsecu.pwd username
    * 「-c」是供第一次建立用,若只是修改密碼或新增第二組帳號密碼,就不必再加此參數。
    * 經過上述動作,會建立一組帳號為 username 的認證



網頁程式 PHP
基本設定

Apache2 是網頁伺服器,PHP5網頁語言是以 Apache2 模組的形式存在。因此,若有任何設定變更,只要重新啟動 Apache2 即可。

    * 設定檔: /etc/php5/apache2/php.ini



PHP5 模組管理

PHP5 的模組安裝/移除與 Apache2 做法一樣,皆是透過 Debian 的 DEB 套件庫來處理,舉例如下:

    * 模組搜尋
      root@dns:~# apt-cache search php5
    * 模組安裝
      root@dns:~# apt-get install php5-imagick
    * 模組移除
      root@dns:~# apt-get remove php5-imagick
    * 模組異動後,套用設定
      root@dns:~# service apache2 restart



加大檔案上傳限制

PHP 預設檔案上傳限制為 2MB ,這對學校來說常常不夠用,不過我們可以透過 php.ini 的修改,來加大上傳限制。不過這裡的上傳限制與使用者網路空間限制(Quota)的意義不同,這裡是指用 PHP 寫的網站,若有上傳介面(如 SFS3, XOOPS...),無論是圖片或檔案之上傳限制。

    * 修改 /etc/php5/apahce2/php.ini ,修改下列三個參數
      root@dns:~#: vi /etc/php5/apache2/php.ini

;記憶體限制
memory_limit = 128M
;PHP 表單 POST 限制
post_max_size = 72M
;檔案大小限制
upload_max_filesize = 64M




其他設定

以下兩者皆已是預設值,不過仍提出以供參考

    * 注意 php.ini 內的 utf-8 或 big5 編碼問題

;default_charset = "iso-8859-1"

註:加「;」變成註解,才可以讓 php 頁面自訂語系

    * 若 php 程式要重送 header (ex.強迫轉址),請注意

output_buffering = 4096



加速 PHP 執行

    * Linux t1~t3 可以使用 APC 加速 PHP 執行

   1. root@dns:~# apt-get update
   2. root@dns:~# apt-get install php-pear
   3. root@dns:~# apt-get install php5-dev apache2-prefork-dev build-essential
   4. root@dns:~# pecl install apc
      出現 Use apxs tset compile flags (if using APC with Apache)? [yes] : 時,按「Enter」繼續
   5. 編輯 /etc/php5/apache2/php.ini ,加上
      extension=apc.so
   6. 重新啟動 Apache2
      root@dns:~# service apache2 restart


    * Linux e1~sqz 可以使用 Xcache 加速 PHP 執行
          xcache 簡介:它是 PHP 運算碼(opcode)快取器
          安裝
            root@dns:~# apt-get install php5-xcache
          重新啟動 Apache2
            root@dns:~# service apache2 restart



資料庫 MySQL

Linux 上自由軟體授權的資料庫目前有兩大勢力,一是 MySQL 另一是 PostgreSQL ,Linux 上預載的是 MySQL ,因此我們只針對 MySQL 進行簡易說明。

    * 重要中文參考文件,MySQL 5.1 中文手冊:http://twpug.net/docs/mysql-5.1/



基本觀念(必讀)

    * 主設定: /etc/mysql/my.cnf
    * 開啟埠
          對外:TCP 3306
          對本機:不必開通訊埠
          註:若 PHP 程式碼與 MySQL Server 位於同一台機器,可以把 3306 埠關閉
    * 記錄檔: /var/log/mysql.log
    * 系統資料庫: /var/lib/mysql/mysql
          各 MySQL 版本的系統資料庫格式不一樣,若錯用會導致資料庫無法啟動
          若此一資料庫被誤刪,可用 mysql_install_db 指令建立
    * 資料庫位置: /var/lib/mysql
    * 資料庫解說
          在 /var/lib/mysql 內每個資料夾皆是一組資料庫
          資料夾及其檔案之擁有者為 mysql.mysql
          資料夾內同名字之三個檔案組成一個資料表
            *.frm --> 欄位定義
            *.MYD --> 實體資料
            *.MYI --> 資料索引




MySQL 管理
MySQL系統管理

    * 關於 MySQL 管理幾個基本觀念
          MySQL 有自己的帳號密碼
          MySQL 最高權限帳號與 Linux 一樣是 root ,但密碼不同(除非設成一樣)
          MySQL 的帳號密碼是給網頁程式碼(ex. php)連線用,使用者使用的機會,只僅限 phpmyadmin 連線時才會需要
          Linux 上所設定的管理密碼(Linux-csetup-utf8)就是 MySQL 的 root 密碼


    * 啟動/關閉/重新啟動
      root@dns:~# service mysql start|stop|restart


    * 初始化系統資料庫
      root@dns:~# mysql_install_db
      註:本功能僅限 /var/lib/mysql/mysql 已被誤刪的情況下才可以使用


    * 初設 MySQL root 密碼
      root@dns:~# mysqladmin -u root -p password
      註1:輸入 Linux root 密碼後即才可繼續輸入 MySQL 密碼
      註2:Linux 本動作不必做,因為 Linux-csetup-utf8 己幫忙處理過了。


    * 修復資料表索引
      root@dns:~# mysqlcheck -u root -p -f 資料庫名 資料表名



忘記 MySQL 密碼

    * 方法一:執行 Linux-csetup-utf8,重設管理密碼
      注意:它除了會幫您重設密碼外,也會額外重設許多設定,因此不太建議使用此方法。
    * 方法二:直接使用 MySQL 工具重設

   1. 停止 MySQL
      root@dns:~# service mysql stop
   2. 建立 /root/newpwd.txt
      root@dns:~# vi /root/newpwd.txt

      SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');

   3. 啟動 MySQL
      root@dns:~# mysqld_safe --init-file=/root/newpwd.txt &
   4. 關閉 MySQL
      root@dns:~# service mysql stop
   5. 刪除 newpwd.txt
      root@dns:~# rm -rf /root/newpwd.txt
   6. 啟動 MySQL
      root@dns:~# service mysql start
      註:重新啟動後 MySQL root 密碼已被重設



資料庫管理

整個資料庫管理,建議使用 phpmyadmin 網頁工具,簡介如下:

    * phpmyadmin 安裝
      root@dns:~# apt-get update
      root@dns:~# apt-get install phpmyadmin
      註:大多數的 Linux 多已安裝此套件


    * phpmyadmin 使用:直接使用網頁瀏覽器,連結至 phpmyadmin 網站即可
      舉例:http://your.host.name/phpmyadmin
      連線後,以 MySQL 的帳號密碼進入
          只有用 root 登入,才會有全部功能
          可以透過 GRANT 語法,建立特定帳號,而它只能掌控單一資料庫(詳見本文:建立虛擬站台段落)


    * 資料庫搬家
          Linux 系列 Server 之 MySQL 資料庫皆在 /var/lib/mysql
          只要下指令把 /var/lib/mysql 底下之資料庫(夾)複製至新主機相同之位置,並修改權限擁有者為 mysql 即可完成搬移任務。以 sfs3 資料庫為例,做法如下:
         1. 複製
            root@dns:~# scp root@your.old.host:/var/lib/mysql/sfs3 /var/lib/mysql
         2. 修改擁有者
            root@dns:~# chown -R mysql.mysql /var/lib/mysql/sfs3
MySQL資料庫管理 phpMyAdmin 3.4.3.1 Final 多國語系(繁體中文版)

phpMyAdmin 是一個用PHP編寫的,可以通過際網路控制和操作MySQL。
通過phpMyAdmin可以完全對資料庫進行操作,例如建立、複製/刪除資料等等。
可以用來管理 MySQL-server 以及單一資料庫的 PHP 程式,對於不熟悉 MySQL 指令列指令的人來說,是很方便的管理工具。」

MySQL的管理工具:phpMyAdmin

所謂的phpMyAdmin簡單的說就是一種MySQL的管理工具。
透過此一程式,可以直接從web上去管理MySQL,不需要到系統上去執行。
安裝步驟:
 1.取得檔案
   其中唯一的差別是在於後者不需要再做中文最佳化的動作。
   所謂的中文最佳化乃是因為此程式的翻譯者可能是大陸的..所以翻譯不佳
   若你覺得沒有關的話,也可以忽略它。
 2.我們先採用前者然後再加上中文最佳化。
 3.將此檔解壓縮到web伺服器的文件根目錄
   說明白些也就是你放置網頁的地方啦
   ex:/usr/local/apache/htdocs/        (這是我網頁存放的位置)
   a. # mv phpMyAdmin_2.0.5.tar.gz /usr/local/apache/htdocs/ 移到文件的根目錄
   b. # tar zxvf phpMyAdmin_2.0.5.tar.gz     解壓縮phpMyAdmin_2.0.5.tar.gz
   c. 路徑 /usr/local/apache/htdocs/phpMyAdmin
   d. 修改設定檔
      # vi config.inc.php3
     找到下面的部分   
     $cfgServers[1]['host'] = 'localhost';  // MySQL 的hostname
     $cfgServers[1]['port'] = '';             // MySQL 的port 空白表示預設3306
     $cfgServers[1]['adv_auth'] = true;      // 是否採用進階功能
     $cfgServers[1]['stduser'] = 'root';   // MySQL的管理者
     $cfgServers[1]['stdpass'] = 'abc123';   // MySQL管理者的密碼
     //我採用root為管理者,密碼為abc123 你可以採用自己喜歡的
 4.測試
   開啟瀏覽器,輸入http://的網址/phpMyAdmin/
   done ...
中文最佳化
   若你一剛使用的檔案是c_phpMyAdmin_2.0.5.tar.gz則沒有中文問題的困擾
   若你是照我的步驟來做的話請取得中文最佳化檔(ftp://ohaha.ks.edu.tw/pub/source/php/chinese_big5.inc.php3)
   將此檔放入的phpMyAdmin的目錄之中 他會取代chinese_big5.inc.php3此檔
   若你覺得不太保險的話 你可以先將原有的chinese_big5.inc.php3更名然後將新檔案放入
   a. mv chinese_big5.inc.php3 chinese_big5.inc.php3.old    
      // 更名為chinese_big5.inc.php3.old
   b. mv chinese_big5.inc.php3 /usr/local/apache/htdocs/phpMyAdmin/
小技巧
   聰明的你是否發覺上面有什麼不對了呢?如果每個人都照我這樣做
   那麼..是不是每個人的phpMyAdmin的位置都在http://網址/phpMyAdmin這裡?
   這種情況是可以改變的..只要將phpMyAmin資料夾更名即可。
   若我想要更名為pma(各取一個字,方便記憶)
   a. 路徑:/usr/local/apache/htdocs/
   b. # mv phpMyAdmin  pma

MySQL資料庫管理 phpMyAdmin 3.4.3.1 Final 多國語系(繁體中文版)下載網址:
 
  http://luck99.tw/Downloads/phpMyAdmin-3.4.3.1-all-languages.exe
本Linux主機伺服器架設基地立志於收集各類Linux主機伺服器架設、網站架設及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!