【Linux主機+架站+維護教學+遠端協助】專案 網路開展事業或在網路賺錢第一步: 【架設24小時賺錢網站主機】比網頁設計更優先! 你還在租用虛擬主機嗎? (租用不如自有主機!自己當家作主才是:王道!) 因租用會:限制空間大小、流量、PHP.ini修改、特定語法使用... 綁手綁腳,你還能有多出眾的作為? 替你架設Linux主機伺服器+影片教你維護 (還有遠端技術協助)讓你自己當家作主! 為協助學員快速架站(隨心所欲展開網路事業)總教頭特別規劃: 替你架設Linux主機專案 並教如何成為網管高手! 聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多! 參加了本專案,您無須再自我摸索曠日廢時→快速打通任都二脈 還有配套『加盟專案』,你可以現學現做,自然的實現:『事少、錢多、離家近!』的成功境界。

如何使用Linux架設NAT主機(Linux主機伺服器架設技術)

如何使用 Linux 來架設NAT主機,可以解決 IPv4 位址不足的現象。
目前所分配的 IPv4 Address 範圍有限,所建置的 NGN 專案無線 AP ,導致 IPv4 Address 不足。
而 IPv6 Address 尚未普及至全球,若單用 IPv6 Address 會造成某些點連線失敗,因此,我們仍建議可以建置 NAT 主機,以解決此一困境。

NAT主機基本概念:

 NAT 簡單來講,就是用 Linux Server 來架設一台 IP 分享器。
對外只需1個實體 IP ,對內卻可提供多組的 IP ,供整間電腦教室的電腦及網路設備,以虛擬 IP 上網,如同外面所賣的 IP 分享器一樣,它必須啟用 DHCP Server 以自動配送虛擬 IPv4 位址給終端設備。

Linux Server 的 NAT 功能,是利用 Netfilter 機制以 iptables指令達成的,它除了可以達成 IP 分享器的功能外,也可以鎖網路設備的 MAC 位置,令中毒的機器無法對外攻擊其他電腦。

詳細做法,請參考下文。

實作:

網卡設定

* 一定要兩張網卡
NAT 主機對 CPU 與 RAM 的要求不高,但是對網卡的要求較高,因此建議採用 INTEL 或 3COM 的網卡會較好,若真的有困難,至少要 RealTek 的 R8169(GB) 才可以。
實體網卡的判別很簡單,打開終端機,把網路線插入,再下 dmesg 指令,若在訊息最下面看到「eth0: link becomes ready 」字樣,代表所插入的網卡介面是 eth0 。
對外網卡使用實體 IPv4 位址
對內網卡使用虛擬 IP 位址,網卡的設定值不得有 gateway 值
* 依上述要求,主機網卡設定圖示如下

* 修改 /etc/network/interfaces 內容示例如下
root@nat:~# vi /etc/network/interfaces

autleth0 eth1
iface linet loopback

iface eth0 inet static
address 163.26.108.132
network 163.26.108.128
netmask 255.255.255.128
broadcast 163.26.108.255
gateway 163.26.108.254

iface eth1 inet static
address 192.168.1.1
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255

啟動DHCP Server

* 安裝 dhcp3-server 套件
root@nat:# apt-get install dhcp3-server
* 修改 /etc/default/dhcp3-server , 把要配送 ip 的網路卡代號寫入, 如下所例

INTERFACES=”eth1″

* Linux sqz 請注意,dhcp3-server 套件已改成 isc-dhcp-server (但安裝時仍是 apt-get install dhcp3-server)
啟動程式可能變成 /etc/init.d/isc-dhcp-server
root@dns:~# service isc-dhcp-server start|stop
設定檔位置會變成 /etc/dhcp
實際位置可以下指令
root@dns:~# dpkg -L isc-dhcp-server 列出套件檔案列表得知
* 修改 /etc/dhcp3/dhcpd.conf , 加至檔尾(以配送 192.168.1.0 為例)

# This is a very basic subnet declaration.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.51 192.168.1.200 ;
option broadcast-address 192.168.1.255 ;
option routers 192.168.1.1 ;
option domain-name-servers 168.95.1.1, 168.95.192.1 ;
}

# 若要分配的是虛擬 IP, 這邊要手動額外加入網段
subnet 163.26.108.128 netmask 255.255.255.128 {

}

Linux sqz 記得改成 /etc/dhcp/dhcpd.conf

修改防火牆規則列

* 修改 /etc/rc.local 下面所列的部分,皆是要修改的項目
root@nat:~# vi /etc/rc.local

# 打開下面這四行
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
……
###—————————————————–###
# 設定外部網段 IP 及介面
###—————————————————–###
ech”Set external ……”
echo

# 不要忘了打開 FW_IFACE
FW_IP=”163.26.108.132″
FW_IP_RANGE=”163.26.108.128/25″
FW_IFACE=”eth0″

###—————————————————–###
# 設定內部網段 IP 及介面
###—————————————————–###
ech”Set internal ……”
echo

LAN_IP=”192.168.1.1″
LAN_IP_RANGE=”192.168.1.0/24″
LAN_BCAST_ADRESS=”192.168.1.255″
LAN_IFACE=”eth1″

……

###—————————————————–###
# 打開 forward
###—————————————————–###
#ech”Enable ip_forward ……”
#echo

ech”1″ > /proc/sys/net/ipv4/ip_forward

……

###—————————————————–###
# 啟動內部對外轉址
###—————————————————–###

$IPTABLES -t nat -A POSTROUTING -$FW_IFACE -j SNAT –to-source $FW_IP

* 套用新規則列
root@nat:~# service rc.local start
* 檢查 NAT 是否已成功設定
root@dns:~# iptables -t nat -L

* 注意:改到此為止,只是啟動封包轉送功能,後續的通訊埠控管尚未處理。不過在南縣 NGN 的架構下,筆者建議只要做到此步驟就好,不必再設定通訊埠的控管,免得一些設備無法連線,反而成為網管的困擾。

通訊埠管制
不管制的作法

這個比較簡單,原 Linux 上的 /etc/rc.local 只要修改到可以轉送封包(虛擬 IP 可以上網),後面的規則保留不動,那就對了。

鎖通訊埠作法

* 繼續修改規則列 /etc/rc.local
* 維持 INPUT, OUTPUT, FORWARD 是開放,不必改,再把下面紅字的規則列加到範例中所示的位置

……
###—————————————————–###
# 啟動外部對內部轉址
###—————————————————–###
# 凡對 $FW_IP:8080 連線者, 則轉址至 192.168.1.3:80
#$IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP –dport 8080 -j DNAT –t192.168.1.3:80
###—————————————————–###

###—————————————————–###
# 拒絕某一內部 IP 使用某一通道
###—————————————————–###

#——————————————————————–
# NAT對外連線鎖 TCP 埠,思考方向:不管進入封包,只管出去封包
# 被動式 ftp 在經過 port 21 協商後,開始傳資料時,會以本地端 1024:65535 對 ftp server:1024:65535溝通,只要限制
# 連線狀態為:「RELATED」及「ESTABLISHED」封包。即可避免 NAT 內電腦對外掃描,又可使用 FTP 服務
#——————————————————————–
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 21 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –sport 1024:65535 –dport 1024:65535 -m state –state RELATED,ESTABLISHED -j ACCEPT
# 對外 SSH 連線
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 22 -j ACCEPT
# 對外 SMTP 寄信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 25 -j ACCEPT
# 對外 DNS 查詢
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 53 -j ACCEPT
# 對外瀏覽網頁(含某些特定通報點採81埠)
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 80:81 -j ACCEPT
# POP3 收信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 110 -j ACCEPT
# NTPDate 網路校時
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 123 -j ACCEPT
# HTTPS
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 443 -j ACCEPT
# VNC → TCP port range: 5900 ~ 5906
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 5900:5906 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 –dport 8080 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 -j DROP

#——————————————————————–
# UDP 埠的部分
#——————————————————————–
# DNS查詢
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 53 -j ACCEPT
# VOIP電話
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 5060:5061 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 41000:41999 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 –dport 55000:65000 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 -j DROP

###—————————————————–###
# 拒絕外部 IP 連至內部 port 號
###—————————————————–###
……

linux下shell的工作原理

shell是使用者和Linux操作系統之間的介面。Linux中有多種shell,其中預設使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的特性。   shell是使用者和Linux操作系統之間的介面。Linux中有多種shell,其中預設使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的特性。
什麼是shell
Linux系統的shell作為操作系統的外殼,為使用者提供使用操作系統的介面。它是指令語系、指令解釋程式及程式設計語系的統稱。
shell是使用者和Linux內核之間的介面程式,如果把Linux內核想像成一個球體的中心,shell就是圍繞內核的外層。當從shell或其他程式向Linux傳遞指令時,內核會做出相應的反應。
shell是一個指令語系直譯器,它擁有自己內建的shell指令集,shell也能被系統中其他應用程式所呼叫。使用者在提示符下輸入的指令都由shell先解釋然後傳給Linux核心。
有一些指令,比如改變工作目錄指令cd,是包括在shell內定的。還有一些指令,例如複製指令cp和搬移指令rm,是存在於檔案系統中某個目錄下的單獨的程式。對使用者而言,不必關心一個指令是建立在shell內定還是一個單獨的程式。
shell首先檢查指令是否是內定指令,若不是再檢查是否是一個應用程式(這裡的應用程式可以是Linux本身的實用程式,如ls和rm,也可以是購買的商業程式,如xv,或是是自由軟體,如emacs)。然後shell在搜尋路徑裡尋找這些應用程式(搜尋路徑就是一個能找到可執行程式的目錄清單)。如果鍵入的指令不是一個內定指令並且在路徑裡沒有找到這個可執行檔案,將會顯示一條錯誤訊息。如果能夠完成找到指令,該內定指令或應用程式將被分解為系統呼叫並傳給Linux內核。

shell的另一個重要特性是它自身就是一個解釋型的程式設計語系,shell程式設計語系支援絕大多數在進階語系中能見到的程式元素,如函數、變量、陣列和程式控制結構。shell寫程式語系簡單易學,任何在提示符中能鍵入的指令都能放到一個可執行的shell程式中。
當普通使用者完成登入,系統將執行一個稱為shell的程式。正是shell程式提供了指令行提示符。作為預設值(TurboLinux系統預設的shell是BASH),對普通使用者用「$」作提示符,對超級使用者(root)用「#」作提示符。
一旦出現了shell提示符,就可以鍵入指令名稱及指令所需要的參數。shell將執行這些指令。如果一條指令花費了很長的時間來運行,或是在螢幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷信號來中斷它(在標準結束之前,中止它的執行)。
當使用者準備結束登入對話程式時,可以鍵入logout指令、exit指令或檔案結束符(EOF)(按ctrl+d實現),結束登入。
我們來實習一下shell是如何工作的。
$ make work
make:***No rule to make target 『work』. Stop.
$
注解:make是系統中一個指令的名字,後面跟著指令參數。在接收到這個指令後,shell便執行它。本例中,由於輸入的指令參數不正確,系統返回訊息後停止該指令的執行。
在例子中,shell會尋找名為make的程式,並以work為參數執行它。make是一個經常被用來編譯大程式的程式,它以參數作為目的來進行編譯。在 「make work」中,make編譯的目的是work。因為make找不到以work為名字的目的,它便給出錯誤訊息表示運行失敗,使用者又回到系統提示符下。
另外,使用者鍵入有關指令行後,如果shell找不到以其中的指令名為名字的程式,就會給出錯誤訊息。例如,如果使用者鍵入:
$ myprog
bash:myprog:command not found
$
可以看到,使用者得到了一個沒有找到該指令的錯誤訊息。使用者敲錯指令後,系統一般會給出這樣的錯誤訊息。
shell的種類
Linux中的shell有多種類型,其中最常用的幾種是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三種shell各有優缺點。Bourne shell是UNIX最初使用的shell,並且在每種UNIX上都可以使用。Bourne shell在shell寫程式方面相當優秀,但在處理與使用者的互動方面做得不如其他幾種shell。Linux操作系統預設的shell是Bourne Again shell,它是Bourne shell的延伸,簡稱Bash,與Bourne shell完全向後相容,並且在Bourne shell的基礎上增加、增強了很多特性。Bash放在/bin/bash中,它有許多特色,可以提供如指令補全、指令編輯和指令歷史表等功能,它還包括了很多C shell和Korn shell中的優點,有靈活和強大的寫程式介面,同時又有很友好的使用者介面。
C shell是一種比Bourne shell更適於寫程式的shell,它的語法與C語系很相似。 Linux為喜歡使用C shell的人提供了Tcsh。Tcsh是C shell的一個延伸版本。Tcsh內含指令行編輯、可寫程式單詞補全、拼字校正、歷史指令取代、作業控制和類似C語系的語法,它不僅和Bash shell是提示符相容,而且還提供比Bash shell更多的提示符參數。
Korn shell集合了C shell和Bourne shell的優點並且和Bourne shell完全相容。Linux系統提供了pdksh(ksh的延伸),它支援任務控制,可以在指令行上掛起、後台執行、喚醒或終止程式。
Linux並沒有冷落其他shell使用者,還內含了一些流行的shell如ash、zsh等。每個shell都有它的用途,有些shell是有專利的,有些能從Internet網上或其他來源獲得。要決定使用哪個shell,只需讀一下各種shell的聯機說明,並試用一下。
使用者在登入到Linux時由/etc/passwd檔案來決定要使用哪個shell。例如:
# fgrep lisa /etc/passwd
lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash
shell被列每行的末尾(/bin/bash)。
由於Bash是Linux上預設的shell,本章主要介紹Bash及其關聯知識。
shell指令
指令行c
使用者登入到Linux系統時,可以看到一個shell提示符,標識了指令行的開始。使用者可以在提示符後面輸入任何指令及參數。例如:
$ date
二 11 23 01:34:58 CST 1999
$
使用者登入時,實際進入了shell,它遵循一定的語法將輸入的指令加以解釋並傳給系統。指令行中輸入的第一個字必須是一個指令的名字,第二個字是指令的選項或參數,指令行中的每個字必須由空格或TAB隔開,格式如下:
$ Command Option Arguments
1. 選項和參數
選項是內含一個或多個字母的代碼,它前面有一個減號(減號是必要的,Linux用它來區別選項和參數),選項可用於改變指令執行的動作的類型。例如:
$ ls
motd passwd
$
這是沒有選項的ls指令,可列出現用的目錄中所有檔案,只列出各個檔案的名字,而不顯示其他更多的訊息。
$ ls -l
total 2
-rw-r–r– 2 wzh book 22 Apr 20 20:37 motd
-rw-r–r– 2 wzh book 796 Apr 20 20:37 passwd
$
加入-l選項,將會為每個檔案列出一行訊息,諸如資料大小和資料最後被修改的時間。
大多數指令都被設計為可以接納參數。參數是在指令行中的選項之後鍵入的一個或多個單詞,例如:
$ ls -l text
-rw-r–r– 2 wzh book 22 Apr 20 20:37 motd
-rw-r–r– 2 wzh book 796 Apr 20 20:37 passwd
$
將顯示text目錄下的所有檔案及其訊息。
有些指令,如ls可以帶參數,而有一些指令可能需要一些最小數目的參數。例如,cp指令至少需要兩個參數,如果參數的數目與指令要求不符,shell將會給出出錯訊息。例如:
$ cp -i mydata newdata
注意:指令行中選項先於參數輸入。
2. 指令行特徵
指令行實際上是可以編輯的一個文字緩沖區,在按換行之前,可以對輸入的文字進行編輯。比如利用BACKSPACE鍵可以刪除剛鍵入的字元,可以進行整行刪除,還可以插入字元,使得使用者在輸入指令,尤其是複雜指令時,若出現鍵入錯誤,無須重新輸入整個指令,只要利用編輯操作,即可改正錯誤。
利用上箭頭可以重新顯示剛執行的指令,利用這一功能可以重複執行以前執行過的指令,而無須重新鍵入該指令。
bash儲存著以前鍵入過的指令的清單,這一清單被稱為指令歷史表。按動上箭頭,便可以在指令行上逐次顯示各條指令。同樣,按動下箭頭可以在指令清單中向下搬移,這樣可以將以前的各條指令顯示在指令行上,使用者可以修改並執行這些指令。這一特徵將在10.4節中進行詳細的論述。
在一個指令行中還可以置入多個指令,用分號將各個指令隔開。例如:
$ ls -F;cp -i mydata newdata
也可以在幾個指令行中輸入一個指令,用反斜槓將一個指令行持續到下一行。
$ cp –i
mydata
newdata

上面的cp指令是在三行中輸入的,開始的兩行以反斜槓結束,把三行作為一個指令行。
shell中的特殊字元
shell中除使用普通字元外,還可以使用一些具有特殊含義和功能的特殊字元。在使用它們時應注意其特殊的含義和作用範圍。下面分別對這些特殊字元加以介紹。
1. 通配符
通配符用於模式符合,如檔名符合、路經名搜尋、字串搜尋等。常用的通配符有*、?和括在方括號〔 〕中的字元序列。使用者可以在作為指令參數的檔名中包括這些通配符,構成一個所謂的「模式串」,在執行過程中進行模式符合。
* 代表任何字串(長度可以不等),例如:「f*」符合以f打頭的任意字串。但應注意,檔名前的圓點(.)和路經名中的斜線(/)必須顯式符合。例如「*」不能符合.file,而「.*」才可以符合.file。
? 代表任何單個字元。
〔〕 代表特殊的一個字元範圍,只要檔名中〔〕位置處的字元在〔〕中特殊的範圍之內,那麼這個檔名就與這個模式串符合。方括號中的字元範圍可以由直接給出的字元組成,也可以由表示限定範圍的起始字元、終止字元及中間的連字元(-)組成。例如,f 〔a- d〕 與f 〔abcd〕的作用相同。Shell將把與指令行中特殊的模式串相符合的所有檔名都作為指令的參數,形成最終的指令,然後再執行這個指令。
下面我們給出表10-1說明這些通配符的具體含義。
表10-1 通配符含義舉例
模式串
意 義
*
現用的目錄下所有檔案的名稱。
*Text*
現用的目錄下所有檔名中包括有Text的檔案的名稱。
〔ab-dm〕*
現用的目錄下所有以a、b、c、d、m開頭的檔案的名稱。
〔ab-dm〕?
現用的目錄下所有以a、b、c、d、m開頭且後面只跟有一個字元的檔案的名稱。
/usr/bin/??
目錄/usr/bin下所有名稱為兩個字元的檔案的名稱。
特別需要注意的是,連字元「-」僅在方括號內有效,表示字元範圍,如在方括號外面就成為普通字元了。而*和?只在方括號外面是通配符,若出現在方括號之內,它們也失去通配符的能力,成為普通字元了。例如,模式「- a〔*?〕abc」中只有一對方括號是通配符,*和?均為普通字元,因此,它符合的字串只能是- a*abc和- a?abc。
最後說明一下使用通配符時需要注意的一些問題。由於*、?和〔〕對於shell來說具有比較特殊的意義,因此在標準的檔名中不應出現這些字元。特別是在目錄名中不要出現它們,否則Shell符合起來可能會無窮的遞歸下去。另外要注意的一點是:如果目錄中沒有與特殊的模式串相符合的檔名,那麼Shell 將使用此模式串本身作為參數傳給有關指令。這可能就是指令中出現特殊字元的原因所在。
2. 引號
在shell中引號分為三種:單引號,雙引號和反引號。
* 單引號 『
由單引號括起來的字元都作為普通字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為普通字元解釋。例如:
$ string=』$PATH』
$ echo $string
$PATH
$
可見$保持了其本身的含義,作為普通字元出現。
* 雙引號 「
由雙引號括起來的字元,除$、、』、和」這幾個字元仍是特殊字元並保留其特殊功能外,其餘字元仍作為普通字元對待。對於$來說,就是用其後特殊的變量的值來代替這個變量和$;對於而言,是轉義字元,它告訴shell不要對其後面的那個字元進行特殊處理,只當作普通字元即可。可以想見,在雙引號中需要在前面加上的只有四個字元$,,』和」本身。而對」號,若其前面沒有加,則Shell會將它同前一個」號符合。
例如,我們假定PATH的值為.:/usr/bin:/bin,輸入如下指令:
$ TestString=」$PATH」$PATH」
$ echo $TestString
.:/usr/bin:/ bin」$PATH
$
讀者可以自己試一下在第二個雙引號之前不加會產生什麼結果。

* 反引號 `
反引號(`)這個字元所對應的鍵一般位於鍵盤的左上角,不要將其同單引號(』)混淆。反引號括起來的字串被shell解釋為指令行,在執行時,shell首先執行該指令行,並以它的標準輸出結果取代整個反引號(內含兩個反引號)部分。例如:
$ pwd
/home/xyz
$ string=」current directory is `pwd`」
$ echo $string
current directour is /home/xyz
$
shell執行echo指令時,首先執行`pwd`中的指令pwd,並將輸出結果/home/xyz取代`pwd`這部分,最後輸出取代後的整個結果。
利用反引號的這種功能可以進行指令置換,即把反引號括起來的執行結果賦值給指定變量。例如:
$ today=`date`
$ echo Today is $today
Today is Mon Apr 15 16:20:13 CST 1999
$
反引號還可以嵌套使用。但需注意,嵌套使用時內層的反引號必須用反斜線()將其轉義。例如:
$ abc=`echo The number of users is `who| wc-l“
$ echo $abc
The number of users is 5
$
在反引號之間的指令行中也可以使用shell的特殊字元。Shell為得到“中指令的結果,它實際上要去執行“中特殊的指令。執行時,指令中的特殊字元,如$,」,?等又將具有特殊含義,並且“所包括的可以是任何一個合法的Shell指令,如:
$ ls
note readme.txt Notice Unix.dir
$ TestString=」`echo $HOME ` ` ls 〔nN〕*`」
$ echo $TestString
/home/yxz note Notice
$
其他情況,讀者可自行試之。
1. 注解符
在shell寫程式中經常要對某些正文行進行注解,以增加程式的可讀性。在Shell中以字元「#」開頭的正文行表示注解行。
此外還有一些特殊字元如:用於輸入/輸出重定向與管道的、 >和|;執行後台指令的&;指令執行操作符&&和||及表示指令組的{}將在下面各小節中加以介紹。
標準輸入/輸出和重定向
1. 標準輸入與輸出
我們知道,執行一個shell指令行時通常會自動開啟三個標準檔案,即標準輸入檔案(stdin),通常對應終端的鍵盤;標準輸出檔案(stdout)和標準錯誤輸出檔案(stderr),這兩個檔案都對應終端的螢幕。程式將從標準輸入檔案中得到輸入資料,將標準輸出資料輸出到標準輸出檔案,而將錯誤訊息送到標準錯誤檔案中。
我們以cat指令為例,cat指令的功能是從指令行給出的檔案中讀取資料,並將這些資料直接送到標準輸出。若使用如下指令:
$ cat config
將會把檔案config的內容依次顯示到螢幕上。但是,如果cat的指令行中沒有參數,它就會從標準輸入中讀取資料,並將其送到標準輸出。例如:
$ cat
Hello world
Hello world
Bye
Bye

$
使用者輸入的每一行都立刻被cat指令輸出到螢幕上。
另一個例子,指令sort按行讀入檔案正文(當指令行中沒有給出檔名時,表示從標準輸入讀入),將其排序,並將結果送到標準輸出。下面的例子是從標準輸入讀入一個採購單,並將其排序。
$ sort
bananas
carrots
apples

apples
bananas
carrots
$
這時我們在螢幕上得到了已排序的採購單。
直接使用標準輸入/輸出檔案存在以下問題:
輸入資料從終端輸入時,使用者費了半天勁輸入的資料只能用一次。下次再想用這些資料時就得重新輸入。而且在終端上輸入時,若輸入有誤修改起來不是很方便。
輸出到終端螢幕上的訊息只能看不能動。我們無法對此輸出作更多處理,如將輸出作為另一指令的輸入進行進一步的處理等。
為了解決上述問題,Linux系統為輸入、輸出的傳輸引入了另外兩種機制,即輸入/輸出重定向和管道。
2. 輸入重定向
輸入重定向是指把指令(或可執行程式)的標準輸入重導至特殊的檔案中。也就是說,輸入可以不來自鍵盤,而來自一個特殊的檔案。所以說,輸入重定向主要用於改變一個指令的輸入源,特別是改變那些需要大量輸入的輸入源。
例如,指令wc統計指定檔案包括的行數、單詞數和字元數。如果僅在指令行上鍵入:
$ wc
wc將等待使用者告訴它統計什麼,這時shell就好像死了一樣,從鍵盤鍵入的所有文字都出現在螢幕上,但並沒有什麼結果,直至按下<ctrl+d>,wc才將指令結果寫在螢幕上。
如果給出一個檔名作為wc指令的參數,如下例所示,wc將返回該檔案所包括的行數、單詞數和字元數。
$ wc /etc/passwd
20 23 726 /etc/passwd
$
另一種把/etc/passwd檔案內容傳給wc指令的方法是重定向wc的輸入。輸入重定向的一般形式為:指令this text forms the content
>of the here document,which
>continues until the end of
>text delimter
>delim
4 17 98
在檔名。例如:
$ ls > directory.out
$ cat directory.out
ch1.doc ch2.doc ch3.doc chimp config mail/ test/
$
將ls指令的輸出儲存為一個名為directory.out的檔案。
註:如果>符號後邊的檔案已存在,那麼這個檔案將被重寫。
為避免輸出重定向中指定檔案只能存放現用的指令的輸出重定向的內容,shell提供了輸出重定向的一種追加手段。輸出追加重定向與輸出重定向的功能非常相似,區別僅在於輸出追加重定向的功能是把指令(或可執行程式)的輸出結果追加到指定檔案的最後,而該檔案原有內容不被破壞。
如果要將一條指令的輸出結果追加到指定檔案的後面,可以使用追加重定向操作符>>。形式為:指令>>檔名。例如:
$ ls *.doc>>directory.out
$ cat directory.out
ch1.doc ch2.doc ch3.doc chimp config mail/ test/
ch1.doc ch2.doc ch3.doc
$
和程式的標準輸出重定向一樣,程式的錯誤輸出也可以重新定向。使用符號2>(或追加符號2>>)表示對錯誤輸出裝置重定向。例如下面的指令:
$ ls /usr/tmp 2> err.file
可在螢幕上看到程式的標準輸出結果,但又將程式的任何錯誤訊息送到檔案err.file中,以備將來檢查用。
還可以使用另一個輸出重定向操作符(&>)將標準輸出和錯誤輸出同時送到同一檔案中。例如:
$ ls /usr/tmp &> output.file
利用重定向將指令組合在一起,可實現系統單個指令不能提供的新功能。例如使用下面的指令序列:
$ ls /usr/bin > /tmp/dir
$ wc –w

主機伺服器的平台(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平台囉!

通訊閘和本機IP不同網段的上網辦法

本機IP位址是 202.*.*.*
netmask是255.255.255.192
通訊閘是 61.*.*.*
兩者不在同一網段。

Windows下貌似很容易解決,直接設好IP通訊閘即可,路由表會自動設好,Linux卻不行。

可以這樣搞定:
route add -host 61.*.*.* netmask 0.0.0.0 dev eth0 先將通訊閘IP當成一個主機加進來,這樣在這兩個IP直接建立一個連線,並且不設定遮罩,即能到達所有其他網段。
route add default gw 61.*.*.* netmask 0.0.0.0 dev eth0 然後再將通訊閘IP加成通訊閘。

如何卸載安裝在Linux的軟體

1 Comment
A:RPM包,
這種軟體包就像windows的EXE安裝檔案一樣,各種檔案已經編譯好,並打了包,哪個檔案該放到哪個資料夾,都指定好了,安裝非常方便,在圖形介面裡你只需要按兩下就能自動安裝。

==如何卸載:
1、開啟一個SHELL終端
2、因為LINUX下的軟體名都內含版本號,所以卸載前最好先確定這個軟體的完整名稱。
尋找RPM包軟體:rpm -qa ×××*
注意:×××指軟體名稱開頭的幾個字母,不要求寫全,但別錯,*就是通配符號「*」,即星號,如你想尋找機子裡安裝的REALPLAYER軟體,可以輸入:rpm -qa realplay*
3、找到軟體後,顯示出來的是軟體完整名稱,如firefox-1.0.1-1.3.2
執行卸載指令:rpm -e firefox-1.0.1-1.3.2
===安裝目錄,執行指令尋找:rpm -ql firefox-1.0.1-1.3.2

B:tar.gz(bz或bz2等)結尾的原始碼包,

這種軟體包裡面都是源程式,沒有編譯過,需要編譯後才能安裝,安裝方法為:
1、開啟一個SHELL,即終端
2、用CD 指令進入原始碼壓縮包所在的目錄
3、根據壓縮包類型解壓縮檔(*代表壓縮包名稱)
tar -zxvf ****.tar.gz
tar -jxvf ****.tar.bz(或bz2)
4、用CD指令進入解壓縮後的目錄
5、輸入編譯檔案指令:./configure(有的壓縮包已經編譯過,這一步可以省去)
6、然後是指令:make
7、再是安裝檔案指令:make install
8、安裝完畢

===如何卸載:
1、開啟一個SHELL,即終端
2、用CD 指令進入編譯後的軟體目錄,即安裝時的目錄
3、執行反安裝指令:make uninstall

====安裝目錄:注意make install指令過程中的安裝目錄,或是閱讀安裝目錄裡面的readme檔案,當然最好的辦法是在安裝的過程中指定安裝目錄,即在./configure指令後面加參數–prefix=/**,
如:./configure –prefix=/usr/local/aaaa,即把軟體裝在/usr/local/路徑的aaaa這個目錄裡。一般的軟體的預設安裝目錄在/usr/local或是/opt裡,可以到那裡去找找

C:以bin結尾的安裝包:

這種包類似於RPM包,安裝也比較簡單
1、開啟一個SHELL,即終端
2、用CD 指令進入原始碼壓縮包所在的目錄
3、給檔案加上可執行屬性:chmod +x ******.bin(中間是字母x,小寫)
4、執行指令:./******.bin(realplayer for linux就是這樣的安裝包)
===如何卸載:把安裝時中選取的安裝目錄刪除就OK
===執行安裝過程中可以指定,類似於windows下安裝。
2、安裝完軟體後如何執行。 安裝完軟體後可以有好多種方法執行軟體:
A、有些軟體安裝後會自動在應用程式清單裡加上快捷鍵,和windows一樣,到那裡找就行了。
B、如果在應用程式清單裡找不到的話,可以直接在/開始/運行指令裡輸入指令:啟動指令一般就是軟體名,如firefox,realplay,xmms等
C、也可以開啟一個shell終端,輸入軟體名,和在「運行指令」裡一樣。如果不知道指令全程的話,可以輸入開頭的字母,然後按tab鍵尋找,系統會自動顯示以輸入字母開頭的所有指令/
D、你也可以直接到安裝目錄下運行啟動檔案,linux下的可執行圖示和shell終端圖示很像
E、到/usr/bin目錄裡找安裝的軟體啟動檔案執行指令。linux系統把所有可執行的檔案指令在/usr/bin目錄裡都作了啟動連線,你可以去那個目錄尋找你安裝的檔案的啟動指令,按兩下啟動.

windows下刪除Linux無法進入系統

Linux Windows DOSCC++

系統原來在window系統下安裝了 Linux,最近想刪除Linux系統,在管理模式下將配置給Linux的磁碟配置給Windows,並且重新格式化

重新進入系統後一個顯示一個grub>提示符無法進入系統,重新ghost系統依然如此

原因是未能刪除gnu grub導致的,此時輸入chainloader +1換行後輸入boot 這樣就能進入windows系統了

用一個修復mbr的工具MbrFix,解壓後將應用程式放入C盤windows/system32中,然後搜尋cmd,以管理員身份執行

接下來你需要的事輸入指令MbrFix /drive 0 fixmbr點換行讓你確認,這時你只要輸入y換行就行了。

現在當你重新啟動時發現沒有了「grub>」

 ssh 功能變數名解析登入延遲問題

最近在工作中常常用ssh登入某個節點的伺服器解析功能變數名的時間非常長:

引用
# time ssh
real    0m19.928s
user    0m0.008s
sys     0m0.001s

可以看到登入這個點伺服器需要近20秒的時間;
然後用nslookup檢查了這個功能變數名ip位址,報了:
引用
connection timed out; no servers could be reached

的錯誤;
用ping是可以解析,不過解析時間也很長;這個問題的原因,目前還不是很清楚,懷疑是否是新啟用的ip位址可能存在這方面的情況。
ssh登入緩慢的問題可以通過修改sshd_config檔案中的GSSAPI options:
引用
# GSSAPI options
# GSSAPIAuthentication no
# GSSAPIAuthentication yes
# GSSAPICleanupCredentials yes

全部註釋掉,然後重啟sshd服務;再測試登入:
引用
# time ssh
real    0m2.229s
user    0m0.006s
sys     0m0.002s

恢復標準!

使用expect實現scp ssh自動輸入密碼登入

1 Comment

expect是一種自動互動語系,能實現在shell腳本中為scp和ssh等自動輸入密碼自動登入。
下面給出scp和ssh的使用示例:
1、scp

    expect -c "
      spawn scp root@1.2.3.4:/root/1.log /root
      expect {
        "*assword" {set timeout 300; send "password
";}
        "yes/no" {send "yes
"; exp_continue;}
      }
      expect eof"

2、ssh

    #!/bin/bash
    expect -c "
    spawn ssh root@192.168.1.204 "ls;"
    expect {
        "*assword" {set timeout 300; send "password
";}
        "yes/no" {send "yes
"; exp_continue;}
          }
    expect eof
                "

 解決Metadata file does not match checksum錯誤

在使用yum更新包的時候,常報下面的錯誤:
引用
Reading repository metadata in from local files
primary.xml.gz            100% |=========================| 1.7 MB    02:25
http://www.mirrorservice.org/sites/apt.sw.be/redhat/el4/en/i386/dag/repodata/primary.xml.gz:
[Errno -1] Metadata file does not match checksum
Trying other mirror.

   有時候當置換了幾個對映後就可以了。但經常也會發現最終是失敗的。由於我的系統是依賴yum更新的,若使用國外網路源的時候出這樣的問題,影響挺大的。
   Google搜尋了一下,是一個常見問題,也提供了一些方法。只是後來發現,這些方法要不就是沒有說清楚,要不就是誤解。經由測試,最終基本可以解決了。

一、原因
從該位址找到一段說明:點擊
引用
To reduce load, download.fedora.redhat.com (official host) contains the ~1kB checksum for the metadata. The metadata (usually ~1 – 2 MB) is downloaded off mirrors. After downloading metadata, Yum compares the two to make sure they're one and the same.
Now, think of this: download.fedora.redhat.com updates their metadata and checksums, so you're getting the new checksum. The mirror's cronjobs havn't gone yet, therefore no synching and the metadata isn't the newest, it doesn't match.

The solution is not to makecache; Although it may help it will take forever and still not 100% solve the problem. The main problem is not giving the mirrors enough synch time. Typically, cron runs every hour, and give it a bit of time to download the changes, so I'd say try running maybe 10 minutes after an hour and you'll have no problem (eg 3:10, 4:10, 5:10, etc…). If you get closer to :50 (3:50, :50, etc) you'll start seeing more syncing issues.

Again, this too isn't 100% perfect but more of a guideline. There's a lot of guesswork…

大概的意思是說:
引用
當 生成metadata資料的時候,會一同產生校驗資料。而傳輸的時候,會用該校驗資料判斷metadata是否完整。這時候就會產生一個問 題,mirror對映當從源網路覆制資料回來時,下載了metadata,但還沒下載校驗資料(或由定時任務產生校驗資料,但這時定時任務還沒有執行)。 這時,如果剛好你正使用yum從該對映更新,就會發生Metadata file does not match checksum的問題了。
文中提供的解決方法是,根據大部分的對映都是每小時進行一次資料同步或生成校驗資料的,所以,不要選取接近整點的時候更新資料,而應選取整點過後再更新。但這只是建議,不能保證一定能解決該問題。

參考該文章的內容,我們可以看看yum更新下載的資料: /var/cache/yum,根據你定義的repo.d檔案內容,會分開多層目錄,每層代表一個更新路徑。
引用
例如:/var/cache/yum/rpmforge
其中,primary.xml.gz、filelists.xml.gz、和other.xml.gz就是metadata訊息,而repomd.xml就是校驗資料。其使用的是sha1進行校驗的。

找到原因,解決就不難了。

二、解決
1、清理快取
執行:
# yum clean all

先把就的快取資料都去掉。

2、下載metadata和校驗資料
先進入yum對應的目錄,再下載:
# cd /var/cache/yum/rpmforge
# wget –cache=off http://apt.sw.be/redhat/el4/en/i386/dag/repodata/repomd.xml
# wget –cache=off http://apt.sw.be/redhat/el4/en/i386/dag/repodata/primary.xml.gz
# wget –cache=off http://apt.sw.be/redhat/el4/en/i386/dag/repodata/filelists.xml.gz
# wget –cache=off http://apt.sw.be/redhat/el4/en/i386/dag/repodata/other.xml.gz

3、校驗資料
執行:
引用
# sha1sum other.xml.gz filelists.xml.gz primary.xml.gz
74fcc9f9e218cfdbc1ac2b5ac17ff7d912267bdf  other.xml.gz
3f4b2e9a5efc67c0cdf329c69f041daa82a2346c  filelists.xml.gz
bd2033e1fd7a7d1f1b92ce7b880919bd685217f8  primary.xml.gz

對照repomd.xml中的訊息:
引用
# cat repomd.xml |grep -w 'checksum'|grep -v 'open-checksum'
   <checksum type="sha">74fcc9f9e218cfdbc1ac2b5ac17ff7d912267bdf</checksum>
   <checksum type="sha">3f4b2e9a5efc67c0cdf329c69f041daa82a2346c</checksum>
   <checksum type="sha">bd2033e1fd7a7d1f1b92ce7b880919bd685217f8</checksum>

若資料正確,則說明metadata和校驗資料是符合的。可以使用yum更新了,不會再重新下載metadata。
否則,可以再等待一下,或需要從其他的對映取得更新咯。

三、建議
因為我們不能控制對映更新的速度和時間,而我們的工作只是避免了yum可能發生誤判的情況,但並不能完全保證上面的工作是完成的。
從盡可能避免該問題的角度出發,有幾個建議:
1、選取好的對映
設定yum.repos.d中baseurl或mirrorlist從好的對映下載。若知道某個對映速度快,則乾脆用baseurl固定,而不要使用mirrorlist了。

2、排查網路問題
網上提供的方法大部分是轉載這裡的。其建議使用–cache=off參數(表示不使用伺服器中的高速快取中的資料)。
但實際上,我發現除非網路有問題,否則是否使用該參數拿回來的資料不應該有有區別的。
如:
引用
# sha1sum primary.xml.gz*
bd2033e1fd7a7d1f1b92ce7b880919bd685217f8  primary.xml.gz
bd2033e1fd7a7d1f1b92ce7b880919bd685217f8  primary.xml.gz.1

※primary.xml.gz是使用–cache=off參數的,而primary.xml.gz.1是沒有使用該參數的。
所以,如果網路出現問題,是會影響到yum下載資料的完整性的。而使用–cache=off既然沒壞,不妨使用咯。

IP位址衝突解決辦法討論(二)

「擺脫」由操作不當引起的麻煩

由操作不當因素造成的IP位址衝突現象可能是最為常見的,這種現象往往會頻繁出現於以下幾個場合:一是一些用心不良的上網使用者為了偷偷獲得某台重要主電腦系統的管理員權限,而有意偷用目的重要主電腦系統的IP位址,從而造成上網位址衝突現象; 二是局功能變數網中的非法破壞分子,為了實現破壞局功能變數網穩定運行的目的,故意製造IP位址衝突故障,比方說,他們只要將自己的電腦IP位址,設定成與局功能變數網核心電腦或核心網路裝置的IP位址相同,就會造成局功能變數網訪問不能標準的現象;三是普通上網使用者在網路訪問過程中,由於無意中的操作不當,造成了上網位址發生衝突現象,例如在反覆安裝、卸載掃毒軟體或應用程式的時候,在頻繁查殺網路病毒的時候,在不斷調整上網參數的時候,很容易會發生無法上網的故障,對待這樣的網路故障,很多上網使用者會自己動手,隨意調整自己系統的配置參數,這樣一來發生位址衝突現象的幾率就十分巨大。

很明顯,無論是有意操作還是無意操作,都有可能造成上網位址發生衝突的故障;為了「擺脫」由操作不當引起的IP位址衝突故障,不少網路管理員往往會通過位址綁定的方法,直接將局功能變數網電腦的IP位址與對應的網路卡MAC位址互相綁定在一起,如此一來就限定了特定的網路卡裝置只能使用特定的IP位址進行上網連線,而使用其他IP 位址進行上網時就無法完成,那樣的話惡意使用者即使偷偷搶用了重要主電腦系統的IP位址,他也不能順利地連線到網路中,那麼位址衝突現象也就不會發生了;不過仔細分析一下,我們或許會發現這種方法也許並不是最有效的解決辦法,這是什麼原因呢?

這是因為上面的位址綁定方法,只能限制惡意使用者偷偷使用局功能變數網中重要主電腦系統的上網位址,但是不能有效防範合法使用者自己操作不當引起的位址衝突現象;例如,合法電腦的IP位址雖然被完成綁定到特定網路卡裝置上了,但是合法使用者仍然可以使用其他IP位址進行上網,當合法使用者由於自己操作上的不當,隨意選用了其他上網位址進行網路連線時,還是可能會出現位址衝突現象的,這個過程與合法使用者是否修改網路卡MAC位址沒有任何關係。具體地說,簡單地將IP位址與網路卡MAC位址綁定在一起的方法,只能有效防範惡意使用者偷偷搶用別人的IP位址,但是無法防範合法使用者操作上的無意失誤引起的IP位址衝突現象,很明顯上面的位址綁定方法,並不能徹底「擺脫」由操作不當引起的麻煩。

有鑒於此,在規模比較大的局功能變數網網路中,我們必須在核心交換機上同時採用兩種位址綁定操作,以便徹底「擺脫」由操作不當引起的麻煩:一種是將全部可信任電腦的IP位址與它們的網路卡MAC 位址綁定在一起,另外一種就是將其他沒有被使用到的閒置IP位址集中綁定到一個根本不存在的MAC位址上。經由這樣的雙重位址綁定操作,局功能變數網中的任何一台可信任電腦系統只能使用事先特殊的IP位址進行上網連線,而不能隨意使用其他的位址進行上網訪問。日後,要是有新的可信任電腦需要接入到局功能變數網網路中時,網路管理員只要從核心交換機上釋放一個閒置的上網位址出來,並且將這個釋放出來位址綁定到新的可信任電腦網路卡MAC位址上。這種雙重位址綁定的方法,經由實踐測試,筆者發現這種方法在「擺脫」由操作不當引起的位址衝突故障方面,效果非法的好,而且這種方法在防止ARP病毒襲擊方面也有不錯的效果。

另外,還有一種極端情況,即使我們採用雙重位址綁定的方法來防範,仍然還可能發生位址衝突現象:那就是惡意使用者同時得到了目的重要主電腦的網路卡MAC位址以及IP位址,而且可信任電腦恰好又不在網路上時,惡意使用者只要強行將自己電腦的網路卡MAC位址修改成重要主電腦的網路卡MAC 位址,再將自己電腦的IP位址設定成目的IP位址,那樣的話位址衝突就會發生了。不過,從實際管理網路的過程中,筆者發現這種極端情況出現的幾率非常低,畢竟這種情況的出現要同時符合三個條件:一要獲得重要主電腦的MAC位址,二要獲得對應系統的IP位址,三要確保重要主電腦系統不能線上。

當然,對於規模不大的局功能變數網網路來說,可能局功能變數網中沒有核心交換機,此時我們只要在用戶端系統中執行簡單的位址綁定操作就可以了。在進行這種操作時,我們可以先開啟用戶端系統的「開始」選單,點選其中的「運行」選項,在跳出的系統運行對話框中,執行「cmd」指令,開啟DOS指令行工作視窗;在該視窗中輸入「ipconfig /all」指令,點選換行鍵後,從對應的結果介面中得到對應系統的網路卡MAC位址與上網位址,將這些位址訊息記錄下來;之後再在DOS指令行工作視窗中,執行「arp X Y arpa」字串指令(其中X為目的IP位址,Y為網路卡MAC位址),完成位址綁定操作。

你要儘快擁有『Linux主機』讓他營運起來幫你賺錢!

自己用體力與時間賺錢太辛苦啦!
每個人一天都是24小時,休息與睡覺就要八小時,更何況不可能一整年都不休假….
用『Linux主機』幫你24小時賺錢(一年365天無修→你要怎樣找到更勤勞的賺錢方式?)
再說,距離是一個難以解決的難題(唯有網路無距離,能把商品賣到任何國家)
就算自己沒有商品,掛Google或聯盟行銷的商品也能賺到佣金與獎金
管他是那裡的人,只要『訪客』有點擊你就能有收入

我時常在想,養一個兒子或女兒就有可以將來養你一輩子嗎?
不!女而會嫁出去,而兒子要養老婆、還要養孫子、還要買房子、買車子、替孫子繳學費……
這就是台語講的『世傳世』一代傳一代(物種繁衍的宿命)不能怪也不能奢望。

我寧願養一台『Linux主機』來當自己後半輩子的依靠。
不管你多老,只要你能打鍵盤,就能賺錢(還怕老了或病了就沒有收入?)

年輕時就投入經營網路,有一台機器幫你賺錢(你一定會比較輕鬆)
經過幾年後你會發現:你的網站累積多少文章、照片、影片(數位內容)
那些(數位內容)都是你的網路資源,你也會發現有多少商機是因為你有網路
所以人家找上你,機會找上你,財富找上你(除非你不去經營他)

我時常出國,跟我一起出國的朋友都羨慕我,因為不管出國多久,旅遊多少天(我都是:天天有收入)你選擇怎樣的賺錢方式,就決定你要過怎樣的生活!
因為我選擇『網路事業』,只要帶著筆電或平版電腦,走道那裡都能遙控我的事業。

 

sshd 安全設定 ( 設定"禁止使用ssh名單" )

SSH 伺服器的設定檔是 /etc/ssh/sshd_config,以下是一些 SSH 的安全配置:

為了加強SSH安全性, 除了限制root帳號登入這種必備的手段之外, 還參照了前輩們的做法, 從三部分來著手:

一. sshd_config 部分

這是一個很簡單的設定手段, 除了限制root之外, 還順便限制連線數, 如下:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 2

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication yes

# ChallengeResponseAuthentication=no
#UsePAM no
UsePAM yes

1. SSH 預設會使用 Port 22,將它改成其他的埠號,找到:

Port 22 換成:

Port new_port

2. 禁止 root 直接登入,先要登入一般賬戶,再用 su 指令切換到 root,把 PermitRootlogin 設成 no:

PermitRootlogin no

3. 只給予特定使用者或群組登入 SSH,以下是准許 my_name 使用者及 my_group 群組登入:

AllowUsers my_name
AllowGroups my_group

4. 禁止使用空密碼登入:

PermitEmptyPasswords no

最後儲存檔案,並重新啟動 SSH 伺服器。

—————————————————————————————————

二.利用hosts.deny與hosts.allow 設定可以連線的ip:

先在 /etc/hosts.allow 裡面, 設定哪些ip是可以連線的, 例如前輩們所舉例的:
sshd:140.128.1.123

, 接著, 再到 /etc/hosts.deny 裡面設定拒絕所有ip連線:
sshd:all

於是, 就只有在 /etc/hosts.allow 清單裡面的IP, 才可以使用ssh 來主機連線, 其餘都會被拒絕掉.

—————————————————————————————————

三. 利用pam機制:

在最上面那文章裡面提到, 利用pam機制, 讓sshd接到連線時, 先檢查是否在黑名單之中的做法. 方法很簡單, 就是在/etc/pam.d/ssh裡面增加下面的設定:

auth required pam_stack.so service=system-auth
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/sshd_user_deny_list onerr=succeed
account required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth

session required pam_loginuid.so

(特別注意, 上面設定都是同一行, 並無斷行)
特別新增的是紅色字的部分. 當你的名字在該檔案( /etc/sshd_user_deny_list )之中時, 就無法利用ssh來登入系統.

利用以上三個方法, 可以讓你的主機在提供sshd連線的時候, 安全度提升不少. 但切記, 經常的檢查與更新, 減少不必要的服務, 增加許多的安全限制, 才是主機管理的最佳策略!

網頁&資料庫  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

Linux主機防火牆規則(Linux主機伺服器架設技術)

Linux 安裝完畢,便已內建基本的防火牆規則,它是採 IPTABLES 來進行封包過濾的動作。
預設的規則列主要在防止外面主機連線至主機,被阻擋的服務有 FTP, SSH, Samba網芳等。

Linux主機防火牆基本原理:

設定檔

設定規則列位置及套用方式是 Linux 專用的方法,與其他 Debian OS 不同。

    * 使用工具: iptables
    * 規則列位置: /etc/rc.local
    * 修改後套用
      root@dns:~# service rc.local start
    * 註: rc.local 原本設計是為開機後要手動執行特定工作的設定區,Linux 把它借來放置防火牆規則列

Linux主機防火牆基本觀念:

    * IPTABLES = "/sbin/iptables"
      這一行是指:設定 IPTABLES 這個變數,以後只要看到 $IPTABLES 這個字串,就代表 /sbin/iptables 這個指令

    * $IPTABLES -F
      這一行是指:把之前所有已設過的規則清空(flush)

Linux主機防火牆封包進出主機方向:

在 /etc/rc.local 內之「設定 filter table 的預設政策」會看到三行設定值,如下:

###—————————————————–###
# 設定 filter table 的預設政策
###—————————————————–###
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

筆者將其簡化說明如下:

    * INPUT   –> 外面要進入主機的網路封包,主要用於規範外面如何連線至主機上的各種服務,與 NAT 內網無關
    * OUTPUT  –> 從主機出去的網路封包。
    * FORWARD –> 從 B 網卡轉至 A 網卡,規範於有 NAT 主機或透通式防火牆用途時,內轉外網路封包之控管。
    * 依上例,預設所有的封包皆開放,不阻擋


INPUT規則列的寫法

規則列的寫法,是把預設政策擺在最下面一行,例外規則擺上面,如下所例

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 22 -j DROP

上面的規則列可以用下面這張圖來表達,預設 22 埠是不被連線的,但有四個綠點例外。
Iptables sample.png

進階處理
取消某個通訊埠的阻擋

只要把所有該 port (–dport)的規則列前面加上 # 變成註解,或直接刪除即可,以 FTP 示例如下:

# 只有本主機所屬網段才能連到這台主機的 FTP SERVER port 21
# $IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 21 -j ACCEPT
# $IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 21 -j ACCEPT
# $IPTABLES -A INPUT -p tcp –dport 21 -j DROP

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 22 -j DROP

新增例外連線範圍

若要新增例外連線點,一定要加在相同埠值區塊最後一行之前(建議第一行),假設我們要加中華電信某個網段 59.127.0.0/16 至 Port 22 的例外點上,做法如下:

    * 編輯 /etc/rc.local (紅字為新增部分)
      root@dns:~# vi /etc/rc.local

# 只有本主機所屬網段才能連到這台主機的 ssh port 22
$IPTABLES -A INPUT -p tcp -s 59.127.0.0/16 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 203.68.102.0/24 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 22 -j DROP

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

新增某個通訊埠連線限制
以 TCP 1723 為例

假設主機有架 VPN 服務,經由「netstat -nlp」查詢後得知其使用的埠值為 TCP 1723。因此,為避免不具善意的網客隨便亂測密碼,我們可以在 /etc/rc.loal加上其連線限制。

假設允許的網段為

   1. 校內: 163.26.182.0/24
   2. 校外某點: 220.130.230.76

    * 編輯 /etc/rc.local,在 IPv4 的設定區(就是 /sbin/ip6tables -F 之上),依 port 值排序,大約在網芳區塊後面加上。
      root@dns:~# vi /etc/rc.local(紅字為新增部分)

 ……

$IPTABLES -A INPUT -p tcp –dport 139 -j DROP
$IPTABLES -A INPUT -p tcp –dport 445 -j DROP
$IPTABLES -A INPUT -p udp –dport 137 -j DROP
$IPTABLES -A INPUT -p udp –dport 138 -j DROP

$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 220.130.230.76 –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

/sbin/ip6tables -F
/sbin/ip6tables -A INPUT -p tcp –dport 21 -j DROP
/sbin/ip6tables -A INPUT -p tcp –dport 22 -j DROP
/sbin/ip6tables -A INPUT -p tcp –dport 23 -j DROP
 ……

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

以 ICMP 為例

預設不讓外面網路任意點可以 PING 本主機,造就本主機不存在的假象,但選定數點開放偵測。假設允許的網段為

   1. 教網中心:163.26.200.0/24
   2. 校內: 163.26.182.0/24
   3. 校外某點: 220.130.230.76

    * 編輯 /etc/rc.local,在 IPv4 的設定區,Port 21 規則列上方。
      root@dns:~# vi /etc/rc.local(紅字為新增部分)

 ……

$IPTABLES -A INPUT -p icmp -s 163.26.182.0/24 -j ACCEPT
$IPTABLES -A INPUT -p icmp -s 163.26.200.0/24 -j ACCEPT
$IPTABLES -A INPUT -p icmp -j DROP

# 只有本主機所屬網段才能連到這台主機的 FTP server port 21
$IPTABLES -A INPUT -p tcp -s 163.26.182.0/24 –dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 127.0.0.1 –dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 21 -j DROP
 ……

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

防止 DoS 攻擊

筆者朋友主機最近遭到 DoS 攻擊,我本來以 iptables -m limit 來處理,但發現它會不分來源一律阻擋,這樣無辜的 IP Address 也受到限制,非常不公平,思考並搜尋了一個晚上,後來決定以限制單一 IP 同時連線數(connlimit),來處理此類攻擊,它會把單一 IP 來源同時要求服務(–syn)的連線數,限制在一定的數量以內,正常用人工手動點網頁,就算該網頁有 FrameSet ,應也不致於大過 12(自已用手拼命點得到的結論)才對。因此在設定此限制時,以每一個 IP 同時連線數不得超過 15 為參數,並進行後續的觀察。在設定後,經過一段時間的觀察,CPU 再也不會一直維持在 90-100% 高檔了,大約只會偶而跳至 60-70% ,一般皆在 10 % 以內。重點是它只 tcp-reset 有問題的來源,無辜的人仍可享受應有的速度。

設定方式:

    * 請確認 syslog 有下列參數
          o Linux 在 /etc/syslog.conf
          o Ubuntu 在 /etc/rsyslog.d/50-default.conf

# iptables 的記錄可以寫入 /var/log/kern.log
kern.*                          -/var/log/kern.log

    * 先把可能攻擊的 ip 寫入 /var/log/kern.log ,再把它的封包無聲的丟掉;以同時 15 個連線為限。

$IPTABLES -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 15 -j LOG –log-level 4
$IPTABLES -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 15 -j REJECT –reject-with tcp-reset

    * 分析攻擊可能來源
          o 螢幕觀看(以 tab 鍵分隔欄位)
            root@dns:~# cat /var/log/kern.log |awk '{print $1 " " $2 " " $9}'
          o 轉至純文字,以供下載至試算表統計
            root@dns:~# cat /var/log/kern.log |awk '{print $1 " " $2 " " $9}' > /root/dosatt.txt
            呈現的結果部分截取如下:

May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.251.81.94
May    10    SRC=60.250.181.66
May    10    SRC=60.250.181.66

    * 鎖了吧,可疑者!
      若某個 IP 來源您不認識,但每天常常超過,人工點網頁的極限(同時超過 15 個連線數),可以再加以下規則,把它鎖了吧!

$IPTABLES -A INPUT -i eth0 -p tcp -s 60.250.xxx.xx –dport 80 -j DROP

使用 ntpdate 做主機的網路校時

一直以來都忘了做這件事,這回做了之後,順手記一下。

參考連結: 時間與頻率國家標準實驗室 、 鳥哥的 Linux 私房菜之 如何在 Linux 系統自動網路校時?

因為不做 ntp 伺服器,只要安裝 ntp-client 套件即可:

    urpmi ntp-client

使用 time.stdtime.gov.tw 的時間校時:

    ntpdate time.stdtime.gov.tw

將校準後的時間寫入 BIOS clock :

    hwclock -w

這樣就完成校時了。將上述兩個步驟加入 crontab ,於每日早上 6:00 自動校時:

    crontab -e
    0 6 * * * /usr/sbin/ntpdate time.stdtime.gov.tw;/usr/sbin/hwclock -w

完成!

Linux主機(文字輸入下)關機與重新開機指令

shutdown:關機

shutdown -參數 時間 訊息

k:並非真正關機,只是送出訊息

r:關機後重新開機

h:關機後不重新開機

例如:
shutdown -h now (立即關機)

f:快速關機

n:快速關機,不要經過init的程序

c:取消關時的程序

t:在警告訊息和刪除信號間做停留
時間可用now或任意數字 (代表分鐘)

 reboot:重新開機

 

Manjaro Linux(或簡稱 Manjaro)是基於 Arch Linux 的 Linux 發行版,使用 Xfce 、GNOME和 KDE Plasma 作為預設桌面環境,和 Arch 一樣,採用滾動更新。其目標是為 PC 提供易於使用的自由的作業系統。

Manjaro是基於Arch Linux並且擁有一個漂亮的用戶界面的操作系統。
Manjaro並不像Debian或者Arch這些Linux發行版一樣歷史悠久,但是它依然十分的穩定而可靠,從而在各色發行版中顯得鶴立雞群。

與 Arch Linux 的關係:
Manjaro Linux 基於 Arch Linux,但擁有自己獨立的軟體倉庫。
Manjaro 的目標是讓強大的 Arch 更方便使用者使用,Manjaro 使用著名的 Pacman 且可以直接利用 AUR 上的資源。
Manjaro 本身使用三個軟體倉庫:不穩定庫,即含有那些不成熟的 Arch 包,這些包與 Arch 源有 1-2 天 的延後;測試庫,每周同步一次,包含那些 Arch 不穩定源的包;以及穩定庫,包含那些由開發團隊確認穩定的軟體。

Manjaro Linux 自由的作業系統 官網:
https://manjaro.org/

Manjaro Linux 歷史:
2013年年中,Manjaro 進入 beta 階段。
系統的關鍵部分,如 GUI 安裝程式(目前使用的是 Antergos 安裝程式的分支)、包管理器(Pacman)、MHWD(Manjaro HardWare Detection,Manjaro 硬體檢測軟體)以及 Manjaro 設定管理器都已經實現了。

發布版本
Manjaro Linux 官方支援的桌面環境包括 Xfce (首選)、GNOME和 KDE Plasma。社群支援的桌面環境包括:MATE、LXDE、Cinnamon、Awesome、Bspwm、 Budgie、i3、LXQt和Openbox等。
同時,也有預裝單獨的視窗管理員的社群版本。另外,Manjaro 還提供網路版(NET-Edition),可組態自訂的圖形環境。此外,通過 Manjaro Linux 的官方倉庫可安裝其它視窗管理員,如 Razor-qt 等[6]

使用者使用預裝了桌面環境或者視窗管理員的 Manjaro Linux 的話,也可以選擇通過官方軟體倉庫下載安裝其它桌面環境或者視窗管理員。



Manjaro Linux 特性:

Manjaro Linux 擁有開箱即用的多媒體支援、成熟的硬體辨識軟體,並支援多核 CPU。Manjaro 擁有命令列安裝器和圖形安裝器。
同時滾動更新也意味著使用者無需通過重新安裝系統或系統更新來更新自己的作業系統。
軟體套件管理由 Pacman 處理,未來也計劃提供一個 GUI 版本。Manjaro 有 32 位 和 64 位 的版本,且都與 Arch 相容。可對其進行組態,選擇是與使用穩定庫的 Arch 同步(預設),或者是與不穩定的Arch 庫同步。

Manjaro 軟體庫由內建的 BoxIt 工具管理,BoxIt 類似git。

Manjaro 對顯示卡驅動的相容性高,可自主選擇安裝開源驅動或者閉源驅動。


Manjaro Linux 反應:
2013年1月,DistroWatch 的 Jesse Smith 審閱了 Manjaro 0.8.3 版本。他指出:「Manjaro 進度很快。這是一個輕量級的系統,其使用的 Xfce 桌面回應速度很快。該發行版會盡力沿著其設計初衷走下去。
Smith 在更新時遇到了一些問題。
他說道:「其中一個嚴重的問題是當我試圖進行更新時遇到的。之前幾天的試用都很完美,但當更新後,系統就不能啟動了。
以回滾或不同啟動參數的方式都無法進入登陸階段。很遺憾,這標誌著我的 Manjaro 試用期結束了,同時也提醒我注意那些捲動發行版含有的風險。



Smith 總結道: Manjaro 適合那些有經驗的Linux使用者,安裝和使用 Manjaro 都需要豐富的相關知識。

2014年7月,DistroWatch 的 Jesse Smith 審閱了 Manjaro 0.8.10 版本。
他總結道:「我過去曾經嘗試過 Manjaro,我認為它在過去有著不錯的品質,但並沒有特別突出的地方。但我在過去的一周改變了我的想法。
Manjaro 大概是 Arch Linux 最好的衍生版本,且我已經使用它有數天之久了。這個發行版不但易於設定,其更讓人感到親切,搭配著漂亮的圖形化軟體套件管理程式,高品質的系統安裝程式和相當有幫助的歡迎介面。

Manjaro 帶有很多有用的軟體和多媒體支援。在我使用這個發行版的期間沒有發生嚴重的問題,事實上是幾乎沒有問題,這大概會是我今年使用最久且相當吸引人的桌面發行版之一。

Linux下的rename指令

Dos/Windows下,對檔案改名用rename。
Linux下對檔案或目錄改名該用mv。
Linux下也有個叫rename的指令。
都是rename,但功能上就有點差異了。
Linux下的rename更像批次改名的工具,是util-linux套件中提供的。

一、基本功能
從mv和rename指令的man文件中,可以看到如下訊息:
引用
mv – move (rename) files
rename – Rename files

也就是說,mv也能用於改名,但不能實現批次處理(改名時,不支援*等符號的),而rename可以。
rename使用的格式:

$ rename foo foo0 foo?

rename需要提供三個參數,然後才能決定最終結果。
模擬一下man文件的例子,原檔案:
引用
$ for i in `seq 100`;do touch foo$i;done
$ ls
foo1    foo18  foo27  foo36  foo45  foo54  foo63  foo72  foo81  foo90
foo10   foo19  foo28  foo37  foo46  foo55  foo64  foo73  foo82  foo91
foo100  foo2   foo29  foo38  foo47  foo56  foo65  foo74  foo83  foo92
foo11   foo20  foo3   foo39  foo48  foo57  foo66  foo75  foo84  foo93
foo12   foo21  foo30  foo4   foo49  foo58  foo67  foo76  foo85  foo94
foo13   foo22  foo31  foo40  foo5   foo59  foo68  foo77  foo86  foo95
foo14   foo23  foo32  foo41  foo50  foo6   foo69  foo78  foo87  foo96
foo15   foo24  foo33  foo42  foo51  foo60  foo7   foo79  foo88  foo97
foo16   foo25  foo34  foo43  foo52  foo61  foo70  foo8   foo89  foo98
foo17   foo26  foo35  foo44  foo53  foo62  foo71  foo80  foo9   foo99

改名結果:
(紅色是沒有改動的,藍色是有改動的一部分)
引用
$ rename foo foo0 foo?
$ ls
foo01  foo100  foo20  foo30  foo40  foo50  foo60  foo70  foo80  foo90
foo02  foo11   foo21  foo31  foo41  foo51  foo61  foo71  foo81  foo91
foo03  foo12   foo22  foo32  foo42  foo52  foo62  foo72  foo82  foo92
foo04  foo13   foo23  foo33  foo43  foo53  foo63  foo73  foo83  foo93
foo05  foo14   foo24  foo34  foo44  foo54  foo64  foo74  foo84  foo94
foo06  foo15   foo25  foo35  foo45  foo55  foo65  foo75  foo85  foo95
foo07  foo16   foo26  foo36  foo46  foo56  foo66  foo76  foo86  foo96
foo08  foo17   foo27  foo37  foo47  foo57  foo67  foo77  foo87  foo97
foo09  foo18   foo28  foo38  foo48  foo58  foo68  foo78  foo88  foo98
foo10  foo19   foo29  foo39  foo49  foo59  foo69  foo79  foo89  foo99
$ rename foo foo0 foo??
$ ls
foo001  foo011  foo021  foo031  foo041  foo051  foo061  foo071  foo081  foo091
foo002  foo012  foo022  foo032  foo042  foo052  foo062  foo072  foo082  foo092
foo003  foo013  foo023  foo033  foo043  foo053  foo063  foo073  foo083  foo093
foo004  foo014  foo024  foo034  foo044  foo054  foo064  foo074  foo084  foo094
foo005  foo015  foo025  foo035  foo045  foo055  foo065  foo075  foo085  foo095
foo006  foo016  foo026  foo036  foo046  foo056  foo066  foo076  foo086  foo096
foo007  foo017  foo027  foo037  foo047  foo057  foo067  foo077  foo087  foo097
foo008  foo018  foo028  foo038  foo048  foo058  foo068  foo078  foo088  foo098
foo009  foo019  foo029  foo039  foo049  foo059  foo069  foo079  foo089  foo099
foo010  foo020  foo030  foo040  foo050  foo060  foo070  foo080  foo090  foo100

該例子給出了兩種檔案批次更名的用法:
引用
第一個參數:被置換掉的字串
第二個參數:置換成的字串
第三個參數:符合要置換的檔案模式

rename支援通配符,基本的通配符有以下幾個:
引用
?    可替代單個字元
*    可替代多個字元
[charset]    可替代charset集中的任意單個字元

二、其他例子
看看*的作用:
引用
$ rm -f *
$ for i in `seq 100`;do touch foo$i;done
$ rename foo foo0 foo*
$ ls
foo01    foo018  foo027  foo036  foo045  foo054  foo063  foo072  foo081  foo090
foo010   foo019  foo028  foo037  foo046  foo055  foo064  foo073  foo082  foo091
foo0100  foo02   foo029  foo038  foo047  foo056  foo065  foo074  foo083  foo092
foo011   foo020  foo03   foo039  foo048  foo057  foo066  foo075  foo084  foo093
foo012   foo021  foo030  foo04   foo049  foo058  foo067  foo076  foo085  foo094
foo013   foo022  foo031  foo040  foo05   foo059  foo068  foo077  foo086  foo095
foo014   foo023  foo032  foo041  foo050  foo06   foo069  foo078  foo087  foo096
foo015   foo024  foo033  foo042  foo051  foo060  foo07   foo079  foo088  foo097
foo016   foo025  foo034  foo043  foo052  foo061  foo070  foo08   foo089  foo098
foo017   foo026  foo035  foo044  foo053  foo062  foo071  foo080  foo09   foo099

再看看[charset]的作用:
引用
$ rm -f *
$ for i in `seq 100`;do touch foo$i;done
$ rename foo foo0 foo[9]*
$ ls
foo09   foo099  foo17  foo26  foo35  foo44  foo53  foo62  foo71  foo80
foo090  foo1    foo18  foo27  foo36  foo45  foo54  foo63  foo72  foo81
foo091  foo10   foo19  foo28  foo37  foo46  foo55  foo64  foo73  foo82
foo092  foo100  foo2   foo29  foo38  foo47  foo56  foo65  foo74  foo83
foo093  foo11   foo20  foo3   foo39  foo48  foo57  foo66  foo75  foo84
foo094  foo12   foo21  foo30  foo4   foo49  foo58  foo67  foo76  foo85
foo095  foo13   foo22  foo31  foo40  foo5   foo59  foo68  foo77  foo86
foo096  foo14   foo23  foo32  foo41  foo50  foo6   foo69  foo78  foo87
foo097  foo15   foo24  foo33  foo42  foo51  foo60  foo7   foo79  foo88
foo098  foo16   foo25  foo34  foo43  foo52  foo61  foo70  foo8   foo89

不難理解吧,找環境測試一下就明白了。用rename可以減少部分寫for迴圈的工作,還是比較方便的。

虛擬主機(次網域)設定
虛擬主機這功能,可以為本台電腦底下某個 user 的個人網頁賦予正式的網址。
例如,我們可以把 http://por.tw/~【~的目錄名稱】/ 改成 http://【~的目錄名稱】.por.tw。在改造的過程要完成以下幾件事:

 

先在修改檔案 etc/bind/db.por.tw(你的網址)
DNS Server 加一筆DNS 正解記錄:【【~的目錄名稱】.por.tw IN A 113.61.187.47】,與 dns.por.tw 共用相同的 IP。
例如: www.por.tw IN A 113.61.187.47

在 /etc/apache2/sites-available/ 加上 【~的目錄名稱】.por.tw 的站台資料,範例如下 :

 

建立檔案:【~的目錄名稱】wh2esites-available/【~的目錄名稱】wh2es

 

<VirtualHost 113.61.187.47>
ServerAdmin 【~的目錄名稱】@por.tw
ServerName 【~的目錄名稱】.por.tw
DocumentRoot /home/【~的目錄名稱】/public_html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/【~的目錄名稱】/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddType application/x-httpd-php .php
</Directory>

 

</VirtualHost>

 

在 /etc/apache2/sites-enabled/ 底下做鍵結
root@dns: # cd /etc/apache2/sites-enabled/
root@dns: /etc/apache2/sites-enabled/ # ln -s /etc/apache2/sites-available/【~的目錄名稱】wh2es

 

最後重新啟動 DNS 及 Apache2 Server 啟用新設定值
root@dns: # /etc/init.d/bind9 restart
root@dns: # /etc/init.d/apache2 restart

 

—————————————————————————————————-

Modoboa 是一個用於 Linux 的開源信件伺服器託管和管理平台。
它是用 Python 編寫的,使用 Postfix 和 Dovecot 來傳送和接收電子信件。
它使用 Nginx 網路伺服器和 MySQL/PostgreSQL 資料庫。
它容許您建立無限的信箱和無限的信件功能變數。
它可以與 Let’s Encrypt 整合以加密您的電子信件伺服器和外部網路之間的所有通信。
它帶有一個基於 Web 的管理面板,用於管理功能變數、信箱、別名等。

先決條件:
運行 Debian 10 的伺服器。
指向您的伺服器 IP 的有效功能變數名。
在伺服器上配置了 root 密碼。

入門:
在開始之前,使用以下指令將您的系統包更新到最新版本:

apt-get update -y

接下來,使用以下命令安裝其他所需的依賴項:

apt-get install git curl gnupg2 wget -y

接下來,使用以下命令設置系統主機名稱:

hostnamectl set-hostname modoboa.example.com

安裝 Modoboa
接下來,使用以下命令下載最新版本的 Modoboa:

git clone https://github.com/modoboa/modoboa-installer

 

下載完成後,將目錄更改為 Modoboa 並使用以下命令檢查配置:

 

cd modoboa-installer
./run.py --stop-after-configfile-check example.com

這將在您當前的工作目錄中創建一個新的配置文件 installer.cfg。

接下來,使用以下命令編輯配置文件:

nano installer.cfg

 

更改以下幾行:

 

[certificate] 
generate = true 
type =letsencrypt 

[letsencrypt] 
email = hitjethva@gmail.com 

[database] 
engine = postgres 
host = 127.0.0.1 
install = true

保存並關閉文件,然後使用以下命令開始安裝:

./run.py --interactive example.com

安裝完成後,您應該得到以下輸出:

Welcome to Modoboa installer!

Warning:
Before you start the installation, please make sure the following DNS records exist for domain 'modoboa.example.com':
  mail IN A   
       IN MX  modoboa.example.com.

Your mail server will be installed with the following components:
modoboa automx amavis clamav dovecot nginx razor postfix postwhite spamassassin uwsgi radicale opendkim
Do you confirm? (Y/n) Y
The process can be long, feel free to take a coffee and come back later ;)
Starting...
Generating new certificate using letsencrypt
Installing amavis
Installing spamassassin
Installing razor
Installing clamav
Installing modoboa
Installing automx
Installing radicale
Installing uwsgi
Installing nginx
Installing opendkim
Installing postfix
Installing postwhite
Installing dovecot
Congratulations! You can enjoy Modoboa at https://modoboa.example.com (admin:password)

訪問 Modoboa Web 界面
現在,打開您的 Web 瀏覽器並輸入 URL https://modoboa.example.com。您應該會看到 Modoboa 登錄頁面:

提供預設使用者名:admin,密碼:password 然後點擊登入按鈕。您將被重導至以下頁面上的 Modoboa 控制台:

結論
在上面的文章中,您學習瞭如何在 Linux 伺服器上安裝 Modoboa。
您現在可以加入您的第一個功能變數並開始向其他電子信件位址傳送信件。

 

Linux FTP指令使用案例

1 Comment

之前我們說過linux scp的指令,是用來兩台Linux伺服器之前傳輸資料的。那麼我們如何在Linux伺服器與沒有SSH的虛擬主機傳輸資料呢,我們可以使用Linux的FTP指令來實現,下面是一些使用案例。

    ftp www.centos.bz

這個指令表示試圖連線www.centos.bz的FTP伺服器,如果完成連線上,就會要求輸入FTP使用者名和密碼。

    ftp> help

連線上FTP伺服器後,鍵入help就會列出所有的FTP指令。

    ftp> ls

此指令是列出遠端伺服器現用的目錄的所有目錄和檔案。

    ftp> cd customers

這個指令是改變遠端目錄為customers。

    ftp> cd ..

改變遠端現用的目錄到父級目錄

    ftp> lcd images

改變本地伺服器現用的目錄為images

    ftp> ascii

改為ascii的傳輸模式

    ftp> binary

改為binary的傳輸模式

    ftp> get image1.jpg

下載遠端伺服器的image1.jpg檔案到本地伺服器。注意:如果本地伺服器存在image1.jpg,將會被覆蓋。

    ftp> put image2.jpg

上傳本地伺服器的image2.jpg檔案到遠端伺服器。注意:如果遠端伺服器存在image2.jpg,將會被覆蓋。

    ftp> !ls

在指令前加「!」,表示執行本地伺服器的指定指令。所以,!ls表示列出本地伺服器的現用的目錄的檔案和目錄。

    ftp> mget *.jpg

使用mget指令可以下載多個圖片檔案,此指令表示下載副檔名名為jpg的所有檔案。

    ftp> mput *.jpg

上傳所有」.jpg」檔案。

    ftp> mdelete *.jpg

刪除遠端伺服器的」jpg」檔案。

    ftp> prompt

開啟或關閉「提醒模式」,以便讓操作多個檔案時直接執行指令而不提醒確認。

    ftp> quit

離開FTP程式。

IP位址衝突解決辦法討論 (一)

一個網路組建起來往往是比較輕鬆、容易的,不過要想讓網路始終能夠高效、安全地運行好,卻是一件非常困難的事情。暫不說各式各樣的網路應用會讓網路管理員忙個不停,單單IP位址衝突這一故障現象解決起來就非常麻煩的,因為造成位址衝突的因素往往比較多。不過,作為網路管理員來說,我們只要根據具體的故障現象進行依次排查,相信故障解決還是有規律可循的。

「擺脫」由裝置安裝引起的麻煩

當裝置損壞或系統癱瘓時,相信很多人都會選取重換裝置或重裝系統,這時IP位址衝突現象就十分容易出現,這是為什麼呢?出現這種奇怪現象,主要是上網使用者安裝裝置不當造成的,這種現象在安裝新網路卡裝置時更容易出現;因為當使用者發現自己的網路卡裝置工作狀態不標準,或不能使用時,往往沒有按照正確的方法先將舊網路卡裝置從系統中卸載乾淨,這就造成了舊網路卡裝置雖然被移除了,但是它的配置訊息內含上網位址等訊息,仍然儲存在電腦系統中,這時當我們嘗試將舊網路卡裝置使用的上網位址,配置給新網路卡裝置位址時,就會發生IP位址衝突現象。

當我們不幸遭遇由網路卡裝置安裝引起的IP位址衝突現象時,可以先想辦法將殘留在電腦系統中的舊網路卡配置訊息,全部清除乾淨;要做到這一點,我們可以先用滑鼠右鍵點選電腦系統桌面上的「我的電腦」圖示,從右鍵選單中點選「屬性」選項,跳出本地電腦的系統屬性視窗,點選其中的「硬體」索引片,進入「硬體」選項設定頁面,繼續點選該頁面中的「裝置管理器」按鈕,跳出系統裝置管理器介面;

雖然從該介面中無法直接找到被移走的舊網路卡裝置,但是開啟該介面選單欄中的「檢視」下拉選單,選取其中的 「顯示隱藏的裝置」指令選項,這樣一來Windows系統就會自動把那些處於隱藏狀態的所有硬體裝置都顯示出來,這當然也包括舊網路卡裝置的「影子」了;選中舊網路卡裝置的「影子」選項,並用滑鼠右鍵點選該選項,再執行快捷選單中的「卸載」指令,那樣的話Windows系統就會自動把殘留在本地系統中的舊網路卡驅動程式以及配置訊息全部刪除乾淨;

下面,我們只要按照正確的方法將新網路卡裝置插入到電腦主板中,同時為新網路卡裝置配置以前的上網位址,這個時候就能避免上網位址衝突的現象了。

當然,為了徹底「擺脫」由裝置安裝引起的麻煩,我們日後在更換新裝置之前,必須按照正確的操作步驟,將舊裝置從系統中徹底地卸載乾淨,而不能隨意地對舊裝置進行強行移除。

「擺脫」由自動配置引起的麻煩

在管理電腦數量比較少的局功能變數網網路時,網路管理員可能會為這些電腦配置靜態位址,一來可以方便管理,二來能夠滿足各式網路應用;但是,在規模相當大的局功能變數網網路中,繼續為電腦配置靜態位址,就顯得非常麻煩了,因為這樣的工作量非常大,而且也容易出現位址衝突現象,於是網路管理員會在局功能變數網中架設 DHCP伺服器,來為這些電腦自動配置上網位址,以便提高網路管理效率。

那麼,在電腦採用自動取得位址模式上網的情況下,會不會發生IP位址衝突現象呢?這種現象同樣可能存在!當我們沒有正確設定DHCP伺服器的位址池參數時,IP位址衝突現象就可能會發生。大家知道,在預設狀態下,不少ADSL裝置或寬頻路由器裝置只要啟用了DHCP功能,那麼DHCP功能就會自動把對應工作子網中的所有IP位址,全部加入到 DHCP伺服器的IP位址池中。例如,寬頻路由器裝置預設使用的上網位址往往為192.168.1.1,當我們無意中將寬頻路由器裝置內建的DHCP服務功能啟用運行之後,那麼DHCP服務功能就會智慧地將192.168.1.X這個工作子網中的全部IP位址,統統新增到DHCP伺服器位址池中,如此一來就會發生什麼現象呢?

我們知道,為了提高局功能變數網重要主電腦系統的啟動速度,不少網路管理員往往會採用手動方法為重要主電腦系統配置一個固定的IP位址,以便讓重要主電腦系統在啟動過程中節省申請上網位址的時間。比方說,如果本地網路中有10台重要主電腦系統使用了固定的上網位址,它們的上網位址假設被逐一設定成 192.168.1.30~192.168.1.39這10個固定IP位址;如果固定位址為192.168.1.32的重要主電腦系統有一段時間沒有開機運行,而這個時候本地網路中恰恰有另外一台重要主電腦系統使用了自動取得位址模式進行上網連線時,那麼寬頻路由器裝置內建的DHCP伺服器就會自動搜尋到 192.168.1.32位址還處於閒置狀態,這個時候DHCP伺服器就會「擅自作主」地將192.168.1.32位址,強行配置給那台採用自動取得位址模式上網的普通主電腦系統了,倘若此時之前使用192.168.1.32 固定位址的重要主電腦系統正在進行網路連線時,那麼IP位址衝突現象就發生了。在實際管理局功能變數網網路的過程中,由DHCP服務功能造成的上網位址頻繁衝突現象出現的概率仍然是非常大的。

為了「擺脫」由DHCP服務引起的位址衝突麻煩,我們應該正確設定好DHCP伺服器的IP位址池參數,而不要輕易使用預設的參數;在進行調整位址池參數時,應該將一部分IP位址預先保留出來,不加入到位址池中作自動配置使用。例如,我們不妨在寬頻路由器裝置內建的DHCP伺服器中,將其中的位址池參數調整為192.168.1.20~192.168.1.60,將前面20個左右的IP位址預先保留下來,以便用於使用固定位址進行連網的重要主電腦系統使用,如此一來動態位址與固定位址相互之間就會不互相影響了,日後DHCP伺服器也就不會隨意將固定IP位址自動配置給採用自動取得位址模式上網的主電腦系統了,那麼由DHCP服務造成的上網位址衝突現象也就不容易發生了。

當然,除了動態上網位址與靜態上網位址容易發生衝突外,局功能變數網中位於不同位置處的DHCP伺服器相互之間也容易發生位址衝突現象,比方說在一些局功能變數網網路中,有可能會同時出現硬體防火牆裝置、ADSL撥號裝置、列印伺服器裝置、寬頻路由器裝置等等,這些裝置往往都內建有DHCP服務功能,要是DHCP服務功能恰恰被同時啟用的話,那麼這些DHCP服務配置出去的上網位址可能就會發生衝突現象了。為了避免由多個DHCP服務造成的上網位址衝突現象,我們不妨在實際管理網路的時候,為這些多個DHCP伺服器配置不同的訪問優先級,也可以採用劃分多個不同工作子網的做法,確保每一個DHCP服務只能在一個獨立的工作子網中啟用運行,最為直接的就是將那些無關的DHCP伺服器強行停用,讓局功能變數網網路中只保留一台DHCP伺服器標準運行。

網路技術概論(Linux主機伺服器架設技術)

網路的基本理論,提供給學員網管人員參考。希望對網管在網路故障偵錯、伺服安裝與設定等能有一定的幫助。

網路(NetWork)是利用傳輸線(或無線電波),把四散的電腦連結起來,使彼此的資料可以互通。
在早期,台灣網路尚未十分發達之前,電腦與電腦之間如果要交換文件,大多是靠磁碟片來做為媒介。
只是有時資料量太大,多張碟片就會變成一種麻煩。因此在當時,會利用電腦列表埠,以 LL3 線材連結,再塔配特定軟體,把兩台電串接起來,以方便交換檔案。
網路,就有點像是這個樣子,但更加的複雜化。

到了現代,大多數人對網路的印象就是上網(surf the internet),因為在網路的世界,可以玩游戲、看新聞、購物…等。
在這樣的概念之下,我們可以發現有兩個主體觀念出現:一是網站服務主機 (Server),如 tw.yahoo.com,它可以提供新聞、購物、拍賣、字典…等眾多服務,等客人上門。
另一個是:客戶端電腦(Client),它只負責讓使用者在網址列上輸入網址,按個「Enter」,便把對方的網頁秀在螢幕上。
而這兩者之間地理上的距離,可以是近在咫尺,也可能是遠在天邊。
為達成此目的,在此簡要介紹。

網際網路InterNet

我們知道,網路叫「Net」,以學員而例,整個電腦用網路線接起來,便會形成「網際網路」。
依此理論,兩所學員互連,便是「校園網路」與「校園網路」之間互連。
而英文字:「inter-net」便是代表了這個狀況:「網路與網路之間」互連,簡言之,InterNet 就是全世界串在一起的網路系統,讓我們可以在學員連到自己學員的官方網站,也可以連到美國 amazon 買書,或是大陸淘寶網購物。

網路基本概念
OSI 七層次架構與 TCP/IP 四層次架構

    OSI 七層
    TCP / IP 四層
    簡要說明
Layer 7
    應用層
    
應用層
 
功能:應用程式,如 IE, Firefox, FTP…等
相關設備:電腦、網路電話、入侵防禦系統(IPS)等
Layer 6
    表達層
Layer 5
    對談層
Layer 4
    傳送層
    TCP / UDP
    

功能:控制資料傳輸之正確性;為應用程式開設服務窗口(Port)
TCP:強調資料正確;多用於 HTTP, FTP等注重資料完整性的網路服務
UPD:強調資料傳送順暢;多用於多媒體資料或網路電話語音傳送
相關設備:防火牆等
Layer 3
    網路層
    IPv4 / ICMP / ARP
IPv6 / NDP(芳鄰探索協定)     

功能:定義網際網路位址(v4/v6);網卡 MAC 位址之對映
相關設備:路由器或 L3 Switch
Layer 2
    資料連接層
    Host-to-Network
MAC
    

功能:實際負責網路封包的傳送與接收之硬體設備
每張網卡皆會有一組全球唯一值的 MAC 位址
相關設備:有線/無網網卡、集線器
Layer 1
    實體層
網路的相連,中間隔了很多各種不同的設備。要讓它們之間能互通有無,就必須遵循相同的語言(通訊協定),否則你講你的,他講他的,誰也上不了網。基於這個構想,國際標準組織(ISO)就制定一組開放系統互連(OSI)參考模型。TCP/IP 網路架構也是基於這個理念所發展而成,而且,它在美國強力的推廣之下,已然取得全球的認可,成為全球互連的主要標準。以下,把上面兩篇引薦文繁雜的內容,整理簡化成以下幾個重點:
Socket

   1. Server 應用程式啟動後,必先建立網路 Socket ,而這個 Socket 包含了 IP 位址及監聽 Port Number(1-1024)
   2. Client 應用程式啟動並開始連線時,同樣會建妥 Socket,只是 client 的 Port Number 介於 1024 -65535
   3. Client 連線至 Server 時,便形成 Socket pair,進行連線並傳輸資料

Soket Pair

Client應用程式
例:Firefox
    →     

Server 應用程式
例:Apache2+PHP

來源 IP Address
例: 163.26.182.99
    

目的 IP Address
例: 163.26.200.3

來源 Port
例:port 6524
    

目的地 Port
例: 80

資料傳送

    * Server 端會先把所有等待傳輸的資料切割打包(建立封包),再分批送至 client 端。 而且它並不是乖乖的把所有封包依順序走同一條路(路由)到目的地,而是由路由器挑出所有可能的較短路徑,分批送出。到了目的地之後,再組合回來。
    * 每個封包(Packet),皆分成 header 及 data 兩大部分,其中 header 便記載來源 IP,目的地 IP,以及通訊協定等資料
    * 封包送至 Client 時,要先判斷目的地的 IP Address 是否處在同一網段
          o 同網段 → 找到對方的網卡,把封包送出去
                + IPv4:透過 ARP 查詢,找到該網卡之 MAC Address ,經由集線器傳送封包
                + IPv6:透過 NDP(Neighbor Discovery Protocol)之 neighbor solicitataion message 暨 neighbor advertisement message,找到目的地 MAC 位置後,把封包送至對方主機
          o 不相同 → 把封包交給路由器處理
                + IPv4:由 ARP 查詢,找到路由器的 MAC Address,直接交給路由器,路由器再根據目的地 IP Address 送至對方主機
                + IPv6:由 NDP 的 Router solicitation message 暨 Router advertisement message,找到路由器 MAC 位址,再交由其處理傳送

    * 判斷是否相同網段的方法,請見下一段文件「IPv4網段分割」之簡要說明
    * 關於 IPv6 的芳鄰探索協定(Neighbor Discovery Protocol; NDP),可參考下列文件
          o http://140.116.82.34/dclin/technique_paper/IPv6/neighbor_discovery.htm
          o http://technet.microsoft.com/en-us/library/cc781068%28WS.10%29.aspx
          o http://www.cu.ipv6tf.org/literatura/chap6.pdf
          o http://www.cu.ipv6tf.org/literatura/chap4.pdf

以IPv4為例細說不同網段兩台電腦交換資料的過程

本文是承接上面資料傳送部分,進一步以圖片來加強說明。文章是以 IPv4 作為說明的主軸,與 IPv6 的差異點僅在尋找 MAC Address 的過程不同(IPv4→ARP; IPv6→NDP),其餘的部分是一樣的。

甲主機有資料要送到乙主機,資料封包會由應用層到資料鏈結層,層層加上 Header,其中比較重要的是:

    * 從應用層傳到網路層時:加上來源 IP 及目的地 IP
    * 往下送至資料鏈結層時:加上乙主機的 MAC Address
      因甲主機依其網路設定值,在判讀乙主機的 IP Adress 後知道,他們同處一個網段,因此直接加上乙主機的 MAC Address
    * 最後封包由實體層送至 Switch Hub

當封包送到 Switch Hub 時,Switch Hub 經判讀封包的 Hearder 得知目的 MAC Address,便直接把封包丟給乙主機,完成傳送。乙主機接收封包之後,會從最下層,層層分解封包,分述如下:

    * 上傳到網路層 (IP 層):解析出來源 IP Address
    * 再往上到傳輸層 (TCP .or. UDP)時:解析出 port 值,依其值轉給適當之應用程式
    * 到最上方的三層(process/application)時:由網路應用程式接收來自甲主機的資料

網內與網外節點如何溝通

甲主機有資料要送到另一網段的乙主機,其傳送過程如下:

    * 資料封包下到網路層時:加上來源 IP 及目的地 IP
    * 再往下到資料鍵結層時:加上 Router 1 的 MAC Address
      因為甲主機分析後發現:乙主機與他並不在同一網段,所以他會把目的地的 MAC Address 設成 Gateway MAC Address,也就是《Router 1》,至於 Router 1 要如何建立路徑通往 Router 2 ,就不是甲主機的事情了。
    * 送到 Router 1 的資料鍵結層時:Router 1 會把目的地的 MAC Address 改成 Router 2 ,並經由路由表判定,送至 Router 2
    * 當資料封包送至 Router 2 時:Router 2 會根據網段內的 IP ←→ MAC 對照表(ARP 表),把資料封包送至乙主機
      如果,Router 2 在 ARP 表找不到乙主機的 IP Address 與 MAC 對照時,會在網段內進行 ARP 廣播,向各節點詢問:【請擁有此 IP Address 的主機把 MAC Address 交出來】,乙主機接受到此訊息,便會對 Router 2 做 ARP 回應。得到乙主機 MAC Address 的 Router 2,便直接把封包傳給了它。
    * 得到來自甲主機封包的乙主機,其處理程序與上例一致

IP 基本概念

IP 位址的英文為 Ineternet Protocol Address,它是各網路設備上的一組全球唯一識別碼,也可以說是「網路地址」,有了這個地址,電腦與電腦之間的資料才可以正確的被傳送。此時,有人也許會有一些疑慮? 「MAC 位址不也是全球唯一值,為何不使用它來擔任地址的工作?」。原因為: MAC Address 的編碼原則為【廠商識別】+【流水號】,因此只能從它了解其出廠別,無法知其所在的網段所在(地理位置)。因此,必須建立「網路地址」的機制,並依網段來區辨不同的使用團體(Network),進而找到使用者所在(IP Address)。目前,全球通用的 IP Address 版本有二:第四版(IPv4)及第六版(IPv6),而第四版已廣為全球共用,第六版目前仍待推廣。以下筆者針對這兩種版本,做一簡單的描述:
IPv4及IPv6位址表示法

IPv4 概念

IPv4 的網路位址是由四個中進位數字加三個點組成,例: 【163.26.200.1】。可是每一組數字,只允許從 0 到 255 之間,共28 個數字。也就是說,它是由四組 (0 到 28-1)數值所組合而成的符號,代表著某一特定網路地點。依此觀念可知,全球可用的網路節點數是 256 x 256 x 256 x 256 = 232 個節點。

IPv6 概念

第六版的 IP 位址表示法,稱之為 IPv6 。它改用 8 組,每組 4 個 16 進位值來表示,詳見上圖。依此其理論可用範圍為:

  0000:0000:0000:0000:0000:0000:0000:0000 ~ FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

高達 2128 個節點,這麼多點,就算扣除一些保留用途的特殊範圍(FF0x, FE8x…)外,比起 IPv4 來,仍是巨量,依此便可解決 IPv4 的不足。

IPv4 網段分割

雖然目前全球通用的 IP 定址法版本有二,而且它們無論在「定址大小」、「虛擬IP」、「尋找 MAC」…等功能、做法有所不同,但網段分割這部分的原理相同,因此,筆者直接以 IPv4 為例,來解釋網段之分割原理。

無論是 IPv4 或 IPv6 ,它們可都是必須擔當起全球所有上網設備間的互連,在這麼龐大的網路節點上,設備間要能跨縣、跨國交換資料,就要有一套管理方式才可以,也就所謂的分段措施。他們把全部的 IP 切成一段段來分配。而且,每分割完一個網段,其第一個 IP 及最後一個 IP ,皆不可以使用。第一個 IP 稱之為【網段代表號】;最後一個 IP 是【廣播】。例如: 163.26.200.0 – 163.26.200.255 這個 C Class 的網段的 ".0" 及 ".255" 皆是不可運用的 IP。

TCP/IP 的分段是一種階層式定址法,也就是每一個 IP Address皆包含了兩種意義:一是網路位址,另一是主機位址。以 163.26.182.34 為例,其中 【163.26.182】這三組數字是該網段的網路位址,【.34】則是主機位址。判斷是否同段的運算法則為【遮罩】法,什麼是遮罩呢?就是用〔 IP 〕去和〔遮罩〕的二進位碼做 AND 邏輯運算,若兩組不同 IP 和某一遮罩 AND 邏輯運算完,得到相同的值,就代表他們處再同一段網段內。說明如下:

網路遮罩 NetMask
AND 運算

二進位的 AND 邏輯運算是說: 只有《1+1》才等於 1 ;其他相加皆是 0。亦即, 《1+0》《0+1》《0+0》皆等於 0。

舉列如下

請問以下兩組 IPv4 Addres,那一組的兩個 IP 是位於同一網段內? 它們的 NetMask 皆是 255.255.255.128

    IP1: 163.26.108.130  → 10100011.00011010.01101100.10000010
    IP2: 163.26.108.201  → 10100011.00011010.01101100.11001001
Netmask: 255.255.255.128 → 11111111.11111111.11111111.10000000

    IP3: 163.26.100.130  → 10100011.00011010.01100100.10000010
    IP4: 163.26.108.36   → 10100011.00011010.01101100.00100100
Netmask: 255.255.255.128 → 11111111.11111111.11111111.10000000

第一組:
    IP1: 163.26.108.130     IP2: 163.26.108.201
AND
運算     10100011.00011010.01101100.10000010
+ 11111111.11111111.11111111.10000000
————————————–
10100011.00011010.01101100.10000000     10100011.00011010.01101100.11001001
+ 11111111.11111111.11111111.10000000
————————————–
10100011.00011010.01101100.10000000
結果     163.26.108.128     163.26.108.128

第二組:
    IP3: 163.26.108.130     IP4: 163.26.108.36
AND
運算     10100011.00011010.01101100.10000010
+ 11111111.11111111.11111111.10000000
————————————–
10100011.00011010.01101100.10000000     10100011.00011010.01101100.00100100
+ 11111111.11111111.11111111.10000000
————————————–
10100011.00011010.01101100.00000000
結果     163.26.108.128     163.26.108.0

由以上 AND 運算結果得知,第一組得到同一個答案,但第二組則否。因此可說,只有第一組的兩個 IP Address 是位在同網段內。而且,而這個所算出的答案就是「網段代表號」,也就是前文所說的第一個不能動的 IP Address。

IPv4 網路分段原則

IPv4 的網段,會有所謂 A Class、B Class 及 C Class 等說法,至於,我們所說的 A class , B class, C class 到底是什麼意思呢?它可以是兩種意義:

(一). 國際網路組織分配 IP 網段給各國各組織,所制定的遊戲規則。如下表:

    * A Class : 0 – 127.xxx.xxx.xxx 的 IP (0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx),皆是以一個 A Class 的量分配出去。
    * B Class : 128- 191.xxx.xxx.xxx 的 IP(10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxx),分配時,是切成 B Class 的量分配出去。
    * C Class: 192 – 223.xxx.xxx.xxx 的 IP(110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxx),分配時,是切成 C Class 的量分配出去。
    * 224.xxx.xxx.xxx 的 IP 保留其他用途

(二). 另一意義是:它是一種計量單位

    * 一個 A Class 的量: A.0.0.0 — A.255.255.255 共 256 x 256 x 256 = 16, 777,216 個 IP。
    * 一個 B Class 的量: A.A.0.0 — A.A.255.255 共 256 x 256 = 65,536 個 IP。
    * 一個 C Class 的量: A.A.A.0 — A.A.A.255 共 256 個 IP。

如何判定遮罩

在前文,筆者是給 IPv4 Address 及 Netmask,再去判斷這些 IP Address 是否位處同一網段。現在,如果只給一個 IPv4 Address 及其網段大小,那麼,要如何計算出遮罩的數字? 請見下文分解。

以一個 C Class 為例

我們以 163.26.200.0 一個 C Class 為例,它的範圍是: 163.26.200.0 — 163.26.200.255 。轉成二進位值如下:
10100011.00011010.11001000.00000000


10100011.00011010.11001000.11111111

建立遮罩的原則是:

    * 【網路位址:不會變的部份,如 163.26.200:底下的遮罩值皆填 《1》】
    * 【主機位址:會變的部份,如最後的 0 – 255:底下的遮罩值皆填《0》】。

依此原則:

    * 遮罩二進位值: 11111111.11111111.11111111.00000000 (前面不變的填 1,會變動的部分填 0 )
    * 遮罩十進位值: 255.255.255.0
    * 由二進位值計算,共得到 24 個 《1》,所以本網段也寫成 163.26.200.0/24
    * 值「24」在 IPv6 叫做 prefix 24,它代表子網路的大小

以半個 C Class 為例

我們以 163.26.108.128 開始之後半段 C Class 網段為例,它的範圍是: 163.26.108.128 — 163.26.108.255,轉成二進位值如下:
10100011.00011010.01101100.10000000


10100011.00011010.01101100.11111111

依上面的原則:

    * 遮罩二進位值:11111111.11111111.11111111.10000000
    * 遮罩十進位值:255.255.255.128
    * 由二進位值計算,共得 25 個《1》,所以本網段也可以記成 163.26.108.128/25

給某個網址及遮罩,請找出其網段代表號及廣播位置

實務上,若只給您一個 IP 值,再告訴您網路遮罩,您要如何算出此網段之代表號及廣播,並以另一型式寫出該網段。
範例: 163.26.119.131 / 255.255.255.192

10100011.00011010.01110111.10000011/11111111.11111111.11111111.11000000

    * 分析一:前面共有 26 個數字不能變化
    * 分析二:所以 10100011. 00011010. 01110111. 10 (163.26.119.128 是不會變化的)
    * 分析三,最小值(代表號)便是: 10100011. 00011010. 01110111. 10000000 (163.26.119.128)
    * 分析四,最大值(廣播)便是: 10100011. 00011010. 01110111. 10111111 (163.26.119.191)
    * 因此,網段另一種寫法是: 163.26.119.128/26

作業: 163.26.62.90 / 255.255.255.192

    * 提示:請自行把上述兩個值轉成二進位值,再進行分析,便可得解。

網路設備如何配置 IP
IPv4 分配原則

網路設備介接至學術網路時,皆會得到一個網段,可能是 1 個 C Class,也可能是半個或 1/4 個 C Class,而網段內某些 IP 是有固定用途的,解說如下:

    * Network:第一個 IP 是網段代表號
    * DNS Server:第二個 IP 給 DNS Server 使用
    * 防火牆: 倒數第三個 IP
    * L3 Switch (路由器):倒數第二個 IP
    * 廣播:最後一個 IP

IPv6 分配原則

    * IPv6 各校配發查詢 http://voip.tnc.edu.tw/ngn/ipv6-iplist.pdf
    * DNS1 Server:2001:288:75xx::1
    * DNS2 Server:2001:288:75xx::2 (非必要)
    * L3 Switch (路由器): 2001:288:75xx::ff

IPv6 文件

相信在看完 IPv4 的相關觀念後,再來理解 IPv6 便不會太大困難。而關於 IPv6 的解說,下面這篇文章已著墨甚多,請大家參閱。

    * IPv6 參考文件: http://ipv6.tnc.edu.tw/ipv6

網路硬體

在講完軟體的通訊協定暨其簡易的運作原理後,再來要談談實現這些運作的硬體設備有那些,並簡單交代一下其歷史,以方便讀者了解一些名稱之命名由來。
各種網路拓樸

網路拓樸可以是兩種意義:

   1. 依理論上電子訊號在設備間交換所走的路徑及其原理而定
   2. 依實際上網路設備安裝位置及佈線型式來看

目前,在各大市面上所販賣的設備,無論是有線或無線,幾乎都是採用乙太網路 (ethernet)之通訊協定(802.3)產品,而這也是各國中小學所採用的硬體設備。所以在下文,筆者只針對乙太網路做詳細的介紹。其餘,請自行參考相書籍。

乙太網路(ethernet)簡介
資料傳遞原理

乙太網路訊號傳送的拓樸是採用【匯流排式(BUS)+廣播】式,也就是,大家都是必須經由同一條公共走道送出訊息。而且,甲電腦要送資料給乙電腦時,是由甲把資料經由匯流排( BUS)廣播到所有節點。每個節點接到封包後,發現不是他的,便直接丟棄。只有乙電腦拆封後,看一下收件人是自己,才會把它接收起來。

因為此一特性,所以在 BUS 上,一次只允許一台傳送資料,若兩台同時傳送,就會發生碰撞(Collision)。為了解決此問題,它採用了載波感應多重存取/碰撞偵測 (Carrier Sense Multiple Access / Collision Detection; CSMA/CD) 基頻技術。也就是說,一台設備要送訊號之前,要先聽一下(listen),道路是否正在使用中,若沒人用,才送出資料。若有人用,就再等。但即使如此,仍可能因兩台同時偵測到沒人用,同時送出封包而發生碰撞。一碰撞,此節點會立即發出擁塞(jam)訊息到 BUS 上。此一 BUS 上的設備接到 jam 訊息後,便會中止動作,進入等待狀態,過一段時間,才又隨機啟動傾聽/傳送的動作。

搭配早期的乙太網路設備圖 (請參考下圖),就很容易理解上述的原理。依圖示,我們發現電腦間利用 RG58 線材(類似電視第四台的訊號線),所建構成的 BUS 來溝通訊息。
Net rg58.png

橋接器 bridge

若同一條 BUS 的節點數太多台,導致碰撞的機率大增。網路會因為 jam 太多而緩慢不堪。因此,就產生了《橋接器》設備,來切割碰撞區域,如下圖所示。橋接器的兩側,皆是單獨的碰撞區域。A區的甲工作站要送資料給B區的戊工作站時。甲在A區先做廣播的動作,橋接器接收了此封包,經拆封後,發現收件人的 MAC 位置是在B區,它就會在B區再廣播一次。自然,戊工作站也就可以收得到。

問題來了:【橋接器怎麼會知道收件人的 MAC 位置在那一區?】。這是因為橋接器會為 A 及 B 區建立 MAC Address 清單。

交換式集線器 (L2 Switch Hub)

講到這裡,諸位有沒有發現:【為什麼我們學員都沒上述的設備?】。這是因為,上述網路設備皆是古董級的東西了。從現在起,我們要開始講目前各校會使用到的設備,首先,從交換式集線器 (Switch Hub)講起,它與 Bridge 一樣,是屬於第二層的設備,只看得懂 MAC 。

從橋接器的分區模型中,來思考一下:【如果買多一點橋接器,每台電腦皆有其專屬的橋接器,那不就不必擔心碰撞的問題了,不是嗎?】。亦即,每個分區只放一台電腦,資料封包自然也就碰不著了。實現這個理想的產品就叫《交換式集線器》,Switch Hub 每個 port ,都是一個橋接器,而且只連接一台設備。在其內部會動態記錄每個節點的 MAC Address,當有兩個節點間要傳送資料封包時,Switch Hub 便會依各自的 MAC Address 建立起兩者之間的專屬連線,資料一旦傳送完畢,立即切斷。由以上可知,集線器是在 OSI 七層次架構的第二層(資料連接層)運作,因此一般的集線器最前面會加個「L2」字樣,代表它只能根據 MAC Address 傳送封包。至於封包內的 IP 位址是第幾代(v4 or v6),與它完全無關。

Switch Hub 在實體佈線上,以單一集線器來看,是屬於星狀拓樸。也就是說,每個節點,皆把線材集中到它身上。再由它來為各節點間建立溝通的管道。但以整個學員的佈線來看,它是由一台台的集線器堆疊而成,看起來比較像是樹狀拓樸。因此,我們會有一個思考:「單一台集線器,當然符合每個節點皆有其單一MAC記錄,但多台集線器之間怎麼交換這些 MAC 位址?」,其實這個問題在 IEEE 802.3 通訊協定早就有妥善的規畫,而且硬體廠商只要遵循其規畫做成產品,便可互通。而使用者只要將這些集線器組合(switch hub set),想像成一台巨大的集線器就好。

交換式路由器 (L3 Switch Router)

交換式集線器只解決了校內網路各節點溝通的需求,如果,要上到學術網路 (TANet) 或是 InterNet ,又該怎麼辨?我們知道,在 Internet 的世界要找到對方,只能靠《IP Address》,而不是靠 MAC Address,可是校內的的交換器是第二層的設備,只記錄了各節點的 MAC Address ,根本無法憑 IP Address 找節點。那麼,校內節點,要連接到遠方的節點時,要怎麼辨?是不是要有一個設備,幫忙找出連結對方節點的道路,並把資料丟過去。而,這個幫忙找路的設備就叫【路由器】。

由於路由器必須要有能力解析 IP Address ,所以,它是隸屬於第三層的網路設備。

Linux 的 Live CD 或 DVD 是指什麼?(是什麼用途)

我們在國外網站下載Linux安裝光碟時,有時會發現有兩個版本的ISO光碟映象檔案可以下載
那到底要下載那一個?如果ISO光碟映象檔案有加註明 Live CD 那是什麼意思?
有時也會在網路上看到 Live CD(或DVD)版的ISO光碟映象檔案下載,Live CD是指什麼?

LiveCD是指透過CD或是DVD便能開機的作業系統,除了作業系統本身的必要項目外,還可以另行安裝其它的應用程式。
適合用於展示(demo),緊急救援(rescue),測試(testing)等應用。

一般而言,要在電腦上安裝作業系統,都得歷經切割分割區,建立檔案系統(也就是格式化),再經過一定的安裝步驟才能完成,此時作業系統是安裝在硬碟上,但是有些玩家便開始研究,如何不安裝作業系統到硬碟,便能夠直接從光碟片執行,具體的作法不外乎,取出作業系統的核心檔案,修改部分設定;但是設定過程繁瑣,門檻又高(必須對於作業系統『非常』瞭解)。

對於此種不需要安裝到硬碟,就可以啟動執行的作業系統稱之為『Live系統』,一般大多以CD(或DVD)的方式存在,目前也有以DVD的方式存在,其他周邊設備,例如磁片、大姆哥(USB隨身碟)也都可以。

由於自行製作的門檻極高,所幸目前已經有很多現成的LiveCD,部分作業系統(例如:Linux、BSD)因為 Open Source 的原因,可以直接下載別人製作完成的光碟映像檔(iso檔),燒錄成光碟後立刻可以使用,至於 Microsoft 的 Windows 也有 LiveCD 嗎?當然可以,但是有版權的問題,無法直接下載現成的光碟映像檔直接使用,必須自行透過工具(例如:BartPE),製作LiveCD。

以下針對目前知名的 Live CD(或DVD)整理清單如下:
Red Hat / Fedora based:
Linux4all LiveCD, Basilisk
Adios
Berry Linux

Mandrake based:
MandrakeMove
APODIO
PCLinuxOS

Debian based
DemoLinux
Knoppix
Gnoppix
LinEx

Slackware based
MoviX, eMoviX and MoviX2
Slax
Stux
Sentry_Firewall_CD

Gentoo based
Gentoo LiveCD
Jollix
SystemRescueCd

BSD base
FreeSBIE (Based on FreeBSD)
Frenzy mini-CD (Based on FreeBSD)
DragonFly BSD

Microsoft Windows based
BartPE

Others
SkyOS

看完這些琳瑯滿目的LiveCD後,您心中可能會問, Live CD(或DVD)的用途為何?
Live CD(或DVD)的重點在於作業系統不需要安裝到硬碟中,所以優點是這點,缺點也是。
因為光碟已經有作業系統,免了安裝以及後續維護的困擾,所以適合用於展示用的機器,中/小學的教育訓練,幼兒的教育訓練
(例如:拿 Knoppix 給小孩練習電腦,打電動玩具,因為不需要使用硬碟,所以不需要擔心硬碟crash,重新安裝/設定…等問題)
但是缺點也是因為光碟的唯讀性,如果需要更改設定或是更新版本,更新或是製作LiveCD的時間及步驟都比較繁瑣。

Live CD(或DVD)並不適合取代原來安裝於硬碟的作業系統,而是用於某些特別的場合,可以有效降低維護的負擔,又不用擔心硬碟損壞或是中毒,這麼棒的東西,趕快去試試 Live CD(或DVD)!