文档库 最新最全的文档下载
当前位置:文档库 › 鸟哥的 Linux 私房菜 -- Linux 防火墙与 NAT 伺服器

鸟哥的 Linux 私房菜 -- Linux 防火墙与 NAT 伺服器

鸟哥的 Linux 私房菜 -- Linux 防火墙与 NAT 伺服器
鸟哥的 Linux 私房菜 -- Linux 防火墙与 NAT 伺服器

為取得較佳瀏覽結果,請愛用 firefox 瀏覽本網頁

| 繁體主站 | 簡體主站 | 基礎篇 | 伺服器 | 企業應用 | 桌面應用 | 安全管理 | 討論板 | 酷學園 | 書籍戡誤 | 鳥哥我 | 崑山資傳

|

 切換解析度為 800x600

最近更新日期:201從第七章的圖 7.1-1 我們可以發現防火牆是整個封包要進入主機前的第一道關卡,但,什麼是防火牆?Linux 的防火牆哪些機制? 防火牆可以達到與無法達到的功能有哪些?防火牆能不能作為區域防火牆而不是僅針對單一主機而已呢實,Linux 的防火牆主要是透過 Netfilter 與 TCP Wrappers 兩個機制來管理的。其中,透過 Netfilter 防火牆機制,我們可達到讓私有 IP 的主機上網 (IP 分享器功能) ,並且也能夠讓 Internet 連到我內部的私有 IP 所架設的 Linux 伺服器 (DNAT 能)!真的很不賴喔! 這一章對您來說,也真的有夠重要的啦!

9.1 認識防火牆

9.1.1 開始之前來個提醒事項

9.1.2 為何需要防火牆

9.1.3 Linux 系統上防火牆的主要類別

9.1.4 防火牆的一般網路佈線示意

9.1.5 防火牆的使用限制

9.2 TCP Wrappers

9.2.1 哪些服務有支援: ldd

9.2.2 /etc/hosts.{allow|deny} 的設定方式

9.3 Linux 的封包過濾軟體: iptables

9.3.1 不同 Linux 核心版本的防火牆軟體

9.3.2 封包進入流程:規則順序的重要性!

9.3.3 iptables 的表格 (table) 與鏈 (chain)

9.3.4 本機的 iptables 語法

9.3.4-1 規則的觀察與清除

9.3.4-2 定義預設政策 (policy)

9.3.4-3 封包的基礎比對:IP, 網域及介面裝置: 信任裝置, 信任網域

9.3.4-4 TCP, UDP 的規則比對:針對埠口設定

9.3.4-5 iptables 外掛模組:mac 與 state

9.3.4-6 ICMP 封包規則的比對:針對是否回應 ping 來設計

9.3.4-7 超陽春用戶端防火牆設計與防火牆規則儲存

9.3.5 IPv4 的核心管理功能:/proc/sys/net/ipv4/*

9.4 單機防火牆的一個實例

9.4.1 規則草擬

9.4.2 實際設定

9.5 NAT 伺服器的設定

9.5.1 什麼是 NAT? SNAT? DNAT?

9.5.2 最陽春 NAT 伺服器: IP 分享功能

9.5.3 iptables 的額外核心模組功能

9.5.4 在防火牆後端之網路伺服器 DNAT 設定

9.6 重點回顧

9.7 本章習題

9.8 參考資料與延伸閱讀

9.9 針對本文的建議:https://www.wendangku.net/doc/cb1202991.html,/viewtopic.php?p=114475

9.1 認識防火牆

網路安全除了隨時注意相關軟體的漏洞以及網路上的安全通報之外,你最好能夠依據自己的環境來訂定防火牆機制! 這樣對於你的網路環境,會比較有保障一點喔!那麼什麼是防火牆呢?其實防火牆就是透過定一些有順序的規則,並管制進入到我們網域內的主機 (或者可以說是網域) 資料封包的一種機制!更廣的來說,只要能夠分析與過濾進出我們管理之網域的封包資料, 就可以稱為防火牆。

防火牆又可以分為硬體防火牆與本機的軟體防火牆。硬體防火牆是由廠商設計好的主機硬體, 這部硬體火牆內的作業系統主要以提供封包資料的過濾機制為主,並將其他不必要的功能拿掉。因為單純作為防火牆功能而已, 因此封包過濾的效率較佳。至於軟體防火牆呢?那就是我們這個章節要來談論的啊! 軟體防火牆本身就是在保護系統網路安全的一套軟體(或稱為機制),例如 Netfilter 與 TCP Wrappers 都可以稱為軟體防火牆。

無論怎麼分,反正防火牆就是用來保護我們網路安全的咚咚就對啦!我們這個章節主要在介紹 Linux 系統本身提供的軟體防火牆的功能,那就是 Netfilter 。至於 TCP Wrappers 雖然在基礎篇的第十八章認識系統服務裡面談過了,我們這裡還會稍微簡單的介紹啦!

9.1.1 開始之前來個提醒事項

由於本章主要的目的在介紹 Netfilter 這種封包過濾式的防火牆機制,因此網路基礎裡面的許多封包與訊框的概念要非常清楚, 包括網域的概念, IP 網域的撰寫方式等,均需有一定的基礎才行。請到第二章加強一下 MAC, IP, ICMP, TCP, UDP 等封包表頭資料的認識,以及 Network/Netmask 的整體網域(CIDR) 寫法等。

另外,雖然 Netfilter 機制可以透過 iptables 指令的方式來進行規則的排序與修改,不過鳥哥建議你利用shell script 來撰寫屬於你自己的防火牆機制比較好,因為對於規則的排序與彙整有比較好的觀察性,以讓你的防火牆規則比較清晰一點。所以在你開始瞭解底下的資料之前,希望你可以先閱讀過相關的資料了:

已經認識 Shell 以及 Shell script;

已經閱讀過第二章網路基礎的內容;

已經閱讀過第七章認識網路安全的內容;

已經閱讀過第八章路由器的內容,瞭解重要的路由概念;

最好擁有兩部主機以上的小型區域網路環境,以方便測試防火牆;

做為區域防火牆的 Linux 主機最好有兩張實體網卡,可以進行多種測試,並架設 NAT 伺服器9.1.2 為何需要防火牆

仔細分析第七章的圖 7.1-1 可以發現, 封包進入本機時,會通過防火牆、伺服器軟體程序、SELinux與檔案系統等。所以基本上,如果你的系統 (1)已經關閉不需要而且危險的服務; (2)已經將整個系統的所有軟體都保持在最新的狀態; (3)權限設定妥當且定時進行備份工作; (4)已經教育使用者具有良好的網路、系統操作習慣。 那麼你的系統實際上已經頗為安全了!要不要架設防火牆?那就見仁見智囉!

不過,畢竟網路世界是很複雜的,而 Linux 主機也不是一個簡單的東西,說不定哪一天你在進行某個軟體的測試時, 主機突然間就啟動了一個網路服務,如果你沒有管制該服務的使用範圍,那麼該服務就等於對所有 Internet 開放, 那就麻煩了!因為該服務可能可以允許任何人登入你的系統,那不是挺危險?

所以囉,防火牆能作什麼呢?防火牆最大的功能就是幫助你『限制某些服務的存取來源』! 舉例來

說: (1)你可以限制檔案傳輸服務 (FTP) 只在子網域內的主機才能夠使用,而不對整個 Internet 開放;

(2)你可以限制整部 Linux 主機僅可以接受客戶端的 WWW 要求,其他的服務都關閉; (3)你還可以限整部主機僅能主動對外連線。反過來說,若有用戶端對我們主機發送主動連線的封包狀態 (TCP 封包SYN flag) 就予以抵擋等等。這些就是最主要的防火牆功能了!

所以鳥哥認為,防火牆最重要的任務就是在規劃出:

切割被信任(如子網域)與不被信任(如 Internet)的網段;

劃分出可提供 Internet 的服務與必須受保護的服務;

分析出可接受與不可接受的封包狀態;

當然啦,咱們 Linux 的 iptables 防火牆軟體還可以進行更細部深入的 NAT (Network Address Translation)的設定,並進行更彈性的 IP 封包偽裝功能,不過,對於單一主機的防火牆來說, 最簡單的任務還是面那三項就是了!所以,你需不需要防火牆呢?理論上,當然需要! 而且你必須要知道『你的系統哪些資料與服務需要保護』,針對需要受保護的服務來設定防火牆的規則吧! 底下我們先來談一談,那在 Linux 上頭常見的防火牆類型有哪些?

9.1.3 Linux 系統上防火牆的主要類別

基本上,依據防火牆管理的範圍,我們可以將防火牆區分為網域型與單一主機型的控管。在單一主機型的控管方面, 主要的防火牆有封包過濾型的 Netfilter 與依據服務軟體程式作為分析的 TCP Wrapper 兩種。若以區域型的防火牆而言, 由於此類防火牆都是當作路由器角色,因此防火牆類型主要則有封包過濾的 Netfilter 與利用代理伺服器 (proxy server) 進行存取代理的方式了。

Netfilter (封包過濾機制)

所謂的封包過濾,亦即是分析進入主機的網路封包,將封包的表頭資料捉出來進行分析,以決定該連線為放行或抵擋的機制。 由於這種方式可以直接分析封包表頭資料,所以包括硬體位址(MAC), 軟體址 (IP), TCP, UDP, ICMP 等封包的資訊都可以進行過濾分析的功能,因此用途非常的廣泛。(其實主要析的是 OSI 七層協定的 2, 3, 4 層啦)

在 Linux 上面我們使用核心內建的 Netfilter 這個機制,而 Netfilter 提供了 iptables 這個軟體來作為防火牆封包過濾的指令。由於 Netfilter 是核心內建的功能,因此他的效率非常的高! 非常適合於一般小型環境的設定呢!Netfilter 利用一些封包過濾的規則設定,來定義出什麼資料可以接收, 什麼資料需要剔除,以達到保護主機的目的喔!

TCP Wrappers (程式控管)

另一種抵擋封包進入的方法,為透過伺服器程式的外掛 (tcpd) 來處置的!與封包過濾不同的是, 這種機制主要是分析誰對某程式進行存取,然後透過規則去分析該伺服器程式誰能夠連線、誰不能連線

由於主要是透過分析伺服器程式來控管,因此與啟動的埠口無關,只與程式的名稱有關。 舉例來說我們知道 FTP 可以啟動在非正規的 port 21 進行監聽,當你透過 Linux 內建的 TCP wrappers 限制 FTP 時, 那麼你只要知道 FTP 的軟體名稱 (vsftpd) ,然後對他作限制,則不管 FTP 啟動在哪個埠口,都會被該規則管理的。

Proxy (代理伺服器)

其實代理伺服器是一種網路服務,它可以『代理』使用者的需求,而代為前往伺服器取得相關的資料。就有點像底下這個圖示吧:

圖 9.1-1、Proxy Server 的運作原理簡介9.1.4 防火牆的一般網路佈線示意

圖 9.1-2、單一網域,僅有一個路由器的環境示意圖

內部網路包含安全性更高的子網路,需內部防火牆切開子網路:

一般來說,我們的防火牆對於 LAN 的防備都不會設定的很嚴格,因為是我們自己的 LAN 嘛!所以是信任網域之一囉!不過,最常聽到的入侵方法也是使用這樣的一個信任漏洞! 因為你不能保證所有使用企業內部電腦的使用者都是公司的員工,也無法保證你的員工不會『搞破壞!』 更多時候是由於某些外來訪客利用移動式裝置 (筆記型電腦) 連接到公司內部的無線網路來加以竊取企業內部的重要資訊。

呵呵!所以,如果你有特別重要的部門需要更安全的保護網路環境,那麼將 LAN 裡面再加設一個防牆,將安全等級分類,那麼將會讓你的重要資料獲得更佳的保護喔!整個架構有點像下圖所示。

圖 9.1-3、內部網路包含需要更安全的子網路防火牆

在防火牆的後面架設網路伺服器主機

還有一種更有趣的設定,那就是將提供網路服務的伺服器放在防火牆後面,這有什麼好處呢? 如下圖所示,Web, Mail 與 FTP 都是透過防火牆連到 Internet 上面去,所以, 底下這四部主機在 Internet 上面Public IP 都是一樣的!(這個觀念我們會在本章底下的 NAT 伺服器的時候再次的強調)。 只是透過防火牆的封包分析後,將 WWW 的要求封包轉送到 Web 主機,將 Mail 送給 Mail Server 去處理而已(透過port 的不同來轉遞)。

好了,因為四部主機在 Internet 上面看到的 IP 都相同,但是事實上卻是四部不同的主機, 而當有攻擊者想要入侵你的 FTP 主機好了,他使用各種分析方法去進攻的主機,其實是『防火牆』那一部, 攻者想要攻擊你內部的主機,除非他能夠成功的搞定你的防火牆,否則就很難入侵你的內部主機呢!

而且,由於主機放置在兩部防火牆中間,內部網路如果發生狀況時 (例如某些使用者不良操作導致中啊、 被社交工程攻陷導致內部主機被綁架啊等等的) ,是不會影響到網路伺服器的正常運作的。 這種方式適用在比較大型的企業當中,因為對這些企業來說,網路主機能否提供正常穩定的服務是很重要的!

不過,這種架構下所進行的設定就得包含 port 的轉遞,而且要有很強的網路邏輯概念, 可以釐清封雙向溝通時的流動方式。對於新手來說,設定上有一定的難度, 鳥哥個人不太建議新手這麼做,還是等以後有經驗之後再來玩這種架構吧!

圖 9.1-4、架設在防火牆後端的網路伺服器環境示意圖

通常像上圖的環境中,將網路伺服器獨立放置在兩個防火牆中間的網路,我們稱之為非軍事區域(DMZ)。 DMZ 的目的就如同前面提到的,重點在保護伺服器本身,所以將 Internet 與 LAN 都隔離開來,如此一來不論是伺服器本身,或者是 LAN 被攻陷時,另一個區塊還是完好無缺的!

9.1.5 防火牆的使用限制

從前面的分析中,我們已經知道過封包濾式防火牆主要在分析 OSI 七層協定當中的 2, 3, 4 層,既然如此的話, Linux 的 Netfilter 機制到底可以做些什麼事情呢?其實可以進行的分析工作主要有:拒絕讓 Internet 的封包進入主機的某些埠口

這個應該不難瞭解吧!例如你的 port 21 這個 FTP 相關的埠口,若只想要開放給內部網路的話,那麼當 Internet 來的封包想要進入你的 port 21 時,就可以將該資料封包丟掉!因為我們可以分析的到該封包表頭的埠口號碼呀!

拒絕讓某些來源 IP 的封包進入

例如你已經發現某個 IP 主要都是來自攻擊行為的主機,那麼只要來自該 IP 的資料封包,就將他丟棄!這樣也可以達到基礎的安全呦!

拒絕讓帶有某些特殊旗標 (flag) 的封包進入

最常拒絕的就是帶有 SYN 的主動連線的旗標了!只要一經發現,嘿嘿!你就可以將該封包丟棄呀!

分析硬體位址 (MAC) 來決定連線與否

如果你的區域網路裡面有比較搗蛋的但是又具有比較高強的網路功力的高手時,如果你使用 IP 來抵擋他使用網路的權限,而他卻懂得反正換一個 IP 就好了,都在同一個網域內嘛! 同樣還是在搞破壞?怎麼辦?沒關係,我們可以鎖死他的網路卡硬體位址啊!因為 MAC 是銲在網路卡上面的所以你只要分析到該使用者所使用的 MAC 之後,可以利用防火牆將該 MAC 鎖住,呵呵!除非他能夠一換再換他的網路卡來取得新的 MAC,否則換 IP 是沒有用的啦!

雖然 Netfilter 防火牆已經可以做到這麼多的事情,不過,還是有很多事情沒有辦法透過 Netfilter 來完喔! 什麼?設定防火牆之後還不安全啊!那當然啦!誰說設定了防火牆之後你的系統就一定安全?

火牆雖然可以防止不受歡迎的封包進入我們的網路當中,不過,某些情況下,他並不能保證我們的網路一定就很安全。 舉幾個例子來談一談:

防火牆並不能很有效的抵擋病毒或木馬程式

假設你已經開放了 WWW 的服務,那麼你的 WWW 主機上面,防火牆一定得要將 WWW 服務的port 開放給 Client 端登入才行吧!否則你的 WWW 主機設定了等於沒有用對吧!也就是說,只要進入你的主機的封包是要求 WWW 資料的,就可以通過你的防火牆。那好了,『萬一你的 WWW 伺服器軟體有漏洞,或者本身向你要求 WWW 服務的該封包就是病毒在偵測你的系統』時,你的防牆可是一點辦法也沒有啊! 因為本來設定的規則就是會讓他通過啊。

防火牆對於來自內部 LAN 的攻擊較無承受力

一般來說,我們對於 LAN 裡面的主機都沒有什麼防火牆的設定,因為是我們自己的 LAN 啊,所當然就設定為信任網域了!不過, LAN 裡面總是可能有些網路小白啊,雖然他們不是故意要搞破壞, 但是他們就是不懂嘛!所以就亂用網路了。這個時候就很糟糕,因為防火牆對於內部的規則定通常比較少, 所以就容易造成內部員工對於網路誤用或濫用的情況。

所以啦,還是回到第七章的圖 7.1-1的說明去看看,分析一下該圖示,你就會知道,在你的 Linux 主機實地上網之前,還是得先:

關閉幾個不安全的服務;

升級幾個可能有問題的套件;

架設好最起碼的安全防護--防火牆--

其他相關的訊息還是請到第七章認識網路安全裡面去看一看怎麼增加自身的安全吧!

9.2 TCP Wrappers

在進入主題之前,我們先來玩一個簡單的防火牆機制,那就是 TCP Wrappers 這玩意兒。如同前面說的,TCP wrappers 是透過用戶端想要連結的程式檔名,然後分析用戶端的 IP ,看看是否需要放行。那麼哪些式支援 TCP wrappers 的功能?這個 TCP wrappers 又該如何設定?我們這裡先簡單的談談吧!(這個小節僅簡單的介紹過 TCP wrappers ,更多相關功能請參考基礎學習篇的第十八章內容喔!)

9.2.1 哪些服務有支援

說穿了, TCP wrappers 就是透過 /etc/hosts.allow, /etc/hosts.deny 這兩個寶貝蛋來管理的一個類似防火牆機制, 但並非所有的軟體都可以透過這兩個檔案來控管,只有底下的軟體才能夠透過這兩個檔案來管理防火牆規則,分別是:

由 super daemon (xinetd) 所管理的服務;

有支援 libwrap.so 模組的服務。

經由 xinetd 管理的服務還好理解,就是設定檔在 /etc/xinetd.d/ 裡面的服務就是 xinetd 所管理的啊! 那什麼是有支援 libwrap.so 模組呢?就讓我們來進行底下的例題,你就比較容易明白囉:

例題:

請查出你的系統有沒有安裝 xinetd ,若沒有請安裝。安裝完畢後,請查詢 xinetd 管理的服務有哪些?

答:

[root@www ~]# yum install xinetd

Setting up Install Process

Package 2:xinetd-2.3.14-29.el6.x86_64 already installed and latest version

Nothing to do

# 畫面中顯示,已經是最新的 xinetd !所以,已經有安裝囉!

# 接下來找出 xinetd 所管理的服務群!

[root@www ~]# chkconfig xinetd on<==要先讓 xinetd on 後才能看到底下的

[root@www ~]# chkconfig --list

....(前面省略)....

xinetd based services:

chargen-dgram: off

chargen-stream: off

....(中間省略)....

rsync: off<==下一小節的範例就用這玩意兒來解釋

tcpmux-server: off

telnet: on

上述結果最終輸出的部分就是 xinetd 所管理的服務群囉!上述的服務之防火牆簡易設定,都可以透過 TCP wrappers 來管理的嚕!

例題:

請問, rsyslogd, sshd, xinetd, httpd (若該服務不存在,請自行安裝軟體),這四個程式有沒有支援 tcp wrappers 的抵擋功能?

答:

由於支援 tcp wrappers 的服務必定包含 libwrap 這一個動態函式庫,因此可以使用 ldd 來觀察該服務即可。 簡單的使用方式為:

[root@www ~]# ldd $(which rsyslogd sshd xinetd httpd)

# 這個方式可以將所有的動態函式庫取出來查閱,不過需要眼睛搜尋。

# 可以透過底下的方式來處理更快!

[root@www ~]# for name in rsyslogd sshd xinetd httpd; do echo $name; \

> ldd $(which $name) | grep libwrap; done

rsyslogd

sshd

libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb41d3c9000)

xinetd

libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f6314821000)

httpd

上述的結果中,在該檔名檔下有出現 libwrap 的,代表有找到該函式庫,才有支援 tcp

wrappers。 所以, sshd, xinetd 有支援,但是 rsyslogd, httpd 這兩支程式則不支援。也就是說, httpd 與 rsyslogd 不能夠使用 /etc/hosts.{allow|deny} 來進行防火牆機制的控管。

9.2.2 /etc/hosts.{allow|deny} 的設定方式

那如何透過這兩個檔案來抵擋有問題的 IP 來源呢?這兩個檔案的語法都一樣,很簡單的:

:

<服務 (亦即程式名稱)> :

# 上頭的 > < 是不存在於設定檔中的喔!

我們知道防火牆的規則都是有順序的,那這兩個檔案與規則的順序優先是怎樣呢?基本上是這樣的先以 /etc/hosts.allow 為優先比對,該規則符合就予以放行;

再以 /etc/hosts.deny 比對,規則符合就予以抵擋;

若不在這兩個檔案內,亦即規則都不符合,最終則予以放行。

我們拿 rsync 這個 xinetd 管理的服務來進行說明好了,請參考底下的例題吧:

例題:

先開放本機的 127.0.0.1 可以進行任何本機的服務,然後,讓區網 (192.168.1.0/24) 可以使用

rsync , 同時 10.0.0.100 也能夠使用 rsync ,但其他來源則不允許使用 rsync 喔。

答:

我們得要先知道 rsync 的服務啟動的檔名為何,因為 tcp wrappers 是透過啟動服務的檔名來

管理的。 當我們觀察 rsync 的設定檔時,可以發現:

[root@www ~]# cat /etc/xinetd.d/rsync

service rsync

{

disable = yes

flags = IPv6

socket_type = stream

wait = no

user = root

server = /usr/bin/rsync<==檔名叫做 rsync

server_args = --daemon

log_on_failure += USERID

}

因此程式欄位的項目要寫的是 rsync 喔!因此,我們應該要這樣設定的:

[root@www ~]# vim /etc/hosts.allow

ALL: 127.0.0.1<==這就是本機全部的服務都接受!

rsync: 192.168.1.0/255.255.255.0 10.0.0.100

[root@www ~]# vim /etc/hosts.deny

rsync: ALL

上面的例題有幾個重點,首先, tcp wrappers 理論上不支援 192.168.1.0/24 這種透過 bit 數值來定義的網域, 只支援 netmask 的位址顯示方式。另外,如果有多個網域或者是單一來源,可以透過空格來累加。 如果想要寫成多行呢?也可以啊!多寫幾行『 kshd: IP 』的方式也可以,不必要將所有資料集中在一行啦!因為 tcp wrappers 也是一條一條規則比對嘛!

基本上,你只要理解這些資料即可!因為絕大部分的時刻,我們都會建議使用底下介紹的 Netfilter 的機制來抵擋封包。 那讓我們準備開始來玩玩 iptables 封包過濾防火牆吧!

9.3 Linux 的封包過濾軟體:iptables

上面談了這麼多,主要還是希望你能瞭解到防火牆是什麼這個議題!而且也希望你知道防火牆並非萬能的。 好了,那麼底下我們終於可以來瞧一瞧,那目前我們的 2.6 版這個 Linux 核心到底使用什麼核心功能來進行防火牆設定?

9.3.1 不同 Linux 核心版本的防火牆軟體

Linux 的防火牆為什麼功能這麼好?這是因為他本身就是由 Linux 核心所提供,由於直接經過核心來處理,因此效能非常好! 不過,不同核心版本所使用的防火牆軟體是不一樣的!因為核心支援的防火牆是逐漸演進而來的嘛!

Version 2.0:使用 ipfwadm 這個防火牆機制;

Version 2.2:使用的是 ipchains 這個防火牆機制;

Version 2.4 與 2.6 :主要是使用 iptables 這個防火牆機制,不過在某些早期的 Version 2.4 版本的

distributions 當中,亦同時支援 ipchains (編譯成為模組),好讓使用者仍然可以使用來自 2.2 版的

ipchains 的防火牆規劃。不過,不建議在 2.4 以上的核心版本使用 ipchains 喔!

因為不同的核心使用的防火牆機制不同,且支援的軟體指令與語法也不相同,所以在 Linux 上頭設定屬於你自己的防火牆規則時,要注意啊,先用 uname -r 追蹤一下你的核心版本再說!如果你是安裝2004 年以後推出的 distributions ,那就不需要擔心了,因為這些 distributions 幾乎都使用 kernel 2.6 版的核心啊! ^_^

9.3.2 封包進入流程:規則順序的重要性!

前面的幾個小節裡面我們一直談到:『防火牆規則』,咦!啥是規則啊?因為 iptables 是利用封包過的機制, 所以他會分析封包的表頭資料。根據表頭資料與定義的『規則』來決定該封包是否可以進入主機或者是被丟棄。 意思就是說:『根據封包的分析資料 "比對" 你預先定義的規則內容, 若封包資料與規則內容相同則進行動作,否則就繼續下一條規則的比對!』 重點在那個『比對與分析順序』上。

舉個簡單的例子,假設我預先定義 10 條防火牆規則好了,那麼當 Internet 來了一個封包想要進入我的主機, 那麼防火牆是如何分析這個封包的呢?我們以底下的圖示來說明好了:

圖 9.3-1、封包過濾的規則動作及分析流程

當一個網路封包要進入到主機之前,會先經由 NetFilter 進行檢查,那就是 iptables 的規則了。 檢查通則接受 (ACCEPT) 進入本機取得資源,如果檢查不通過,則可能予以丟棄 (DROP) ! 上圖中主要的目的在告知你:『規則是有順序的』!例如當網路封包進入 Rule 1 的比對時, 如果比對結果符合 Rule ,此時這個網路封包就會進行 Action 1 的動作,而不會理會後續的 Rule 2, Rule 3.... 等規則的分析了。

而如果這個封包並不符合 Rule 1 的比對,那就會進入 Rule 2 的比對了!如此一個一個規則去進行比對就是了。 那如果所有的規則都不符合怎辦?此時就會透過預設動作 (封包政策, Policy) 來決定這個封的去向。 所以啦,當你的規則順序排列錯誤時,就會產生很嚴重的錯誤了。 怎麼說呢?讓我們看看下這個例子:

假設你的 Linux 主機提供了 WWW 的服務,那麼自然就要針對 port 80 來啟用通過的封包規則,但是你發現 IP 來源為 192.168.100.100 老是惡意的嘗試入侵你的系統,所以你想要將該 IP 拒絕往來,最後,有的非 WWW 的封包都給他丟棄,就這三個規則來說,你要如何設定防火牆檢驗順序呢?

1.

Rule 1 先抵擋 192.168.100.100 ;

2.

Rule 2 再讓要求 WWW 服務的封包通過;

3.

Rule 3 將所有的封包丟棄。

這樣的排列順序就能符合你的需求,不過,萬一你的順序排錯了,變成:

1.

Rule 1 先讓要求 WWW 服務的封包通過;

2.

Rule 2 再抵擋 192.168.100.100 ;

3.

Rule 3 將所有的封包丟棄。

此時,那個 192.168.100.100 『可以使用你的 WWW 服務』喔!只要他對你的主機送出 WWW 要求封包,就可以使用你的 WWW 功能了,因為你的規則順序定義第一條就會讓他通過,而不去考慮第二條規則!這樣可以理解規則順序的意義了嗎! 現在再來想一想,如果 Rule 1 變成了『將所有的封包丟棄』,Rule 2 才設定『WWW 服務封包通過』,請問,我的 client 可以使用我的 WWW 服務嗎?呵呵答案是『否?』想通了嗎? ^_^

9.3.3 iptables 的表格 (table) 與鏈 (chain)

圖 9.3-2、iptables 的表格與相關鏈示意圖

圖 9.3-3、iptables 內建各表格與鏈的相關性

上面的圖示很複雜喔!不過基本上你依舊可以看出來,我們的 iptables 可以控制三種封包的流向:封包進入 Linux 主機使用資源 (路徑 A): 在路由判斷後確定是向 Linux 主機要求資料的封包,要就會透過 filter 的 INPUT 鏈來進行控管;

封包經由 Linux 主機的轉遞,沒有使用主機資源,而是向後端主機流動 (路徑 B): 在路由判斷前進行封包表頭的修訂作業後,發現到封包主要是要透過防火牆而去後端,此時封包就會透過路徑 B 來跑動。 也就是說,該封包的目標並非我們的 Linux 本機。主要經過的鏈是 filter 的

FORWARD 以及 nat 的 POSTROUTING, PREROUTING。 這路徑 B 的封包流向使用情況,我們會在本章的 9.5 小節來跟大家作個簡單的介紹。

封包由 Linux 本機發送出去 (路徑 C): 例如回應用戶端的要求,或者是 Linux 本機主動送出的包,都是透過路徑 C 來跑的。先是透過路由判斷, 決定了輸出的路徑後,再透過 filter 的

OUTPUT 鏈來傳送的!當然,最終還是會經過 nat 的 POSTROUTING 鏈。

Tips:

有沒有發現有兩個『路由判斷』呢?因為網路是雙向的,所以進與出要分

開來看!因此,進入的封包需要路由判斷, 送出的封包當然也要進行路由

判斷才能夠發送出去啊!瞭解乎?

由於 mangle 這個表格很少被使用,如果將圖 9.3-3 的 mangle 拿掉的話,那就容易看的多了:

圖 9.3-4、iptables 內建各表格與鏈的相關性(簡圖)

透過圖 9.3-4 你就可以更輕鬆的瞭解到,事實上與本機最有關的其實是 filter 這個表格內的 INPUT 與OUTPUT 這兩條鏈,如果你的 iptables 只是用來保護 Linux 主機本身的話,那 nat 的規則根本就不需要理他,直接設定為開放即可。

不過,如果你的防火牆事實上是用來管制 LAN 內的其他主機的話,那麼你就必須要再針對 filter 的FORWARD 這條鏈,還有 nat 的 PREROUTING, POSTROUTING 以及 OUTPUT 進行額外的規則訂定才行。 nat 表格的使用需要很清晰的路由概念才能夠設定的好,建議新手先不要碰!最多就是先玩一玩陽春的 nat 功能『IP 分享器的功能』就好了! ^_^!這部份我們在本章的最後一小節會介紹的啦!9.3.4 本機的 iptables 語法

理論上,當你安裝好 Linux 之後,系統應該會主動的幫你啟動一個陽春的防火牆規則才是, 不過這個陽春防火牆可能不是我們想要的模式,因此我們需要額外進行一些修訂的行為。不過,在開始進行底下的練習之前, 鳥哥這裡有個很重要的事情要告知一下。因為 iptables 的指令會將網路封包進行過濾及抵擋的動作,所以, 請不要在遠端主機上進行防火牆的練習,因為你很有可能一不小心將自己關在家門外! 盡量在本機前面登入 tty1-tty6 終端機進行練習,否則常常會發生悲劇啊!鳥哥以前剛剛在玩iptables 時,就常常因為不小心規則設定錯誤,導致常常要請遠端的朋友幫忙重新開機...

剛剛提到咱們的 iptables 至少有三個預設的 table (filter, nat, mangle),較常用的是本機的 filter 表格, 這也是預設表格啦。另一個則是後端主機的 nat 表格,至於 mangle 較少使用,所以這個章節我們並不會討論 mangle。 由於不同的 table 他們的鏈不一樣,導致使用的指令語法或多或少都有點差異。 在這個小節當中,我們主要將針對 filter 這個預設表格的三條鏈來做介紹。底下就來玩一玩吧!

Tips:

防火牆的設定主要使用的就是 iptables 這個指令而已。而防火牆是系統管

理員的主要任務之一, 且對於系統的影響相當的大,因此『只能讓 root 使

用 iptables 』,不論是設定還是觀察防火牆規則喔!

9.3.4-1 規則的觀察與清除

如果你在安裝的時候選擇沒有防火牆的話,那麼 iptables 在一開始的時候應該是沒有規則的,不過,可能因為你在安裝的時候就有選擇系統自動幫你建立防火牆機制,那系統就會有預設的防火牆規則了! 無論如何,我們先來看看目前本機的防火牆規則是如何吧!

9.3.4-2 定義預設政策 (policy)

清除規則之後,再接下來就是要設定規則的政策啦!還記得政策指的是什麼嗎?『 當你的封包不在你設定的規則之內時,則該封包的通過與否,是以 Policy 的設定為準』,在本機方面的預設政策中,假設你對於內部的使用者有信心的話, 那麼 filter 內的 INPUT 鏈方面可以定義的比較嚴格一點,而FORWARD 與 OUTPUT 則可以訂定的鬆一些!通常鳥哥都是將 INPUT 的 policy 定義為 DROP 啦,其兩個則定義為 ACCEPT。 至於 nat table 則暫時先不理會他。

[root@www ~]# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

選項與參數:

-P :定義政策( Policy )。注意,這個 P 為大寫啊!

ACCEPT :該封包可接受

DROP :該封包直接丟棄,不會讓 client 端知道為何被丟棄。

範例:將本機的 INPUT 設定為 DROP ,其他設定為 ACCEPT

[root@www ~]# iptables -P INPUT DROP

[root@www ~]# iptables -P OUTPUT ACCEPT

[root@www ~]# iptables -P FORWARD ACCEPT

[root@www ~]# iptables-save

# Generated by iptables-save v1.4.7 on Fri Jul 22 15:56:34 2011

*filter

:INPUT DROP [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

COMMIT

# Completed on Fri Jul 22 15:56:34 2011

# 由於 INPUT 設定為 DROP 而又尚未有任何規則,所以上面的輸出結果顯示:

# 所有的封包都無法進入你的主機!是不通的防火牆設定!(網路連線是雙向的)

看到輸出的結果了吧?INPUT 被修改了設定喔!其他的 nat table 三條鏈的預設政策設定也是一樣的方式,例如:『 iptables -t nat -P PREROUTING ACCEPT』就設定了 nat table 的 PREROUTING 鏈為可接的意思!預設政策設定完畢後,來談一談關於各規則的封包基礎比對設定吧。

9.3.4-3 封包的基礎比對:IP, 網域及介面裝置

開始來進行防火牆規則的封包比對設定吧!既然是網際網路,那麼我們就由最基礎的 IP, 網域及埠口亦即是 OSI 的第三層談起,再來談談裝置 (網路卡) 的限制等等。這一小節與下一小節的語法你一定要記住,因為這是最基礎的比對語法喔!

[root@www ~]# iptables [-AI 鏈名] [-io 網路介面] [-p 協定] \

> [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP|REJECT|LOG]

選項與參數:

-AI 鏈名:針對某的鏈進行規則的 "插入" 或 "累加"

-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,

使用 -A 就可以加上第五條規則!

-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。

例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號

鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。

-io 網路介面:設定封包進出的介面規範

-i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;

-o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;

-p 協定:設定此規則適用於哪種封包格式

主要的封包格式有: tcp, udp, icmp 及 all 。

-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:

IP :192.168.0.100

網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。

若規範為『不許』時,則加上 ! 即可,例如:

-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;

-d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。

-j :後面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)

iptables 的基本參數就如同上面所示的,僅只談到 IP 、網域與裝置等等的資訊, 至於 TCP, UDP 封包有的埠口 (port number) 與狀態 (如 SYN 旗標) 則在下小節才會談到。 好,先讓我們來看看最基礎的幾規則,例如開放 lo 這個本機的介面以及某個 IP 來源吧!

範例:設定 lo 成為受信任的裝置,亦即進出 lo 的封包都予以接受

[root@www ~]# iptables -A INPUT -i lo -j ACCEPT

仔細看上面並沒有列出 -s, -d 等等的規則,這表示:不論封包來自何處或去到哪裡,只要是來自 lo 這個介面,就予以接受!這個觀念挺重要的,就是『沒有指定的項目,則表示該項目完全接受』的意思! 例如這個案例當中,關於 -s, -d...等等的參數沒有規定時,就代表不論什麼值都會被接受囉。

這就是所謂的信任裝置啦!假如你的主機有兩張乙太網路卡,其中一張是對內部的網域,假設該網卡的代號為 eth1 好了, 如果內部網域是可信任的,那麼該網卡的進出封包就通通會被接受,那你就能用:『iptables -A INPUT -i eth1 -j ACCEPT』 來將該裝置設定為信任裝置。不過,下達這個指令前要特別注意,因為這樣等於該網卡沒有任何防備了喔!

範例:只要是來自內網的 (192.168.100.0/24) 的封包通通接受

[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT

# 由於是內網就接受,因此也可以稱之為『信任網域』囉。

範例:只要是來自 192.168.100.10 就接受,但 192.168.100.230 這個惡意來源就丟棄

[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT

[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

# 針對單一 IP 來源,可視為信任主機或者是不信任的惡意來源喔!

[root@www ~]# iptables-save

# Generated by iptables-save v1.4.7 on Fri Jul 22 16:00:43 2011

*filter

:INPUT DROP [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [17:1724]

-A INPUT -i lo -j ACCEPT

-A INPUT -s 192.168.100.0/24 -i eth1 -j ACCEPT

-A INPUT -s 192.168.100.10/32 -i eth1 -j ACCEPT

-A INPUT -s 192.168.100.230/32 -i eth1 -j DROP

COMMIT

# Completed on Fri Jul 22 16:00:43 2011

這就是最單純簡單的防火牆規則的設定與觀察方式。不過,在上面的案例中,其實你也發現到有兩條規則可能有問題? 那就是上面的特殊字體圈起來的規則順序。明明已經放行了 192.168.100.0/24 了,所以那個 192.168.100.230 的規則就不可能會被用到!這就是有問題的防火牆設定啊!瞭解乎?那該怎辦就重打啊!@_@! 那如果你想要記錄某個規則的紀錄怎麼辦?可以這樣做:

[root@www ~]# iptables -A INPUT -s 192.168.2.200 -j LOG

[root@www ~]# iptables -L -n

target prot opt source destination

LOG all -- 192.168.2.200 0.0.0.0/0 LOG flags 0 level 4

看到輸出結果的最左邊,會出現的是 LOG 喔!只要有封包來自 192.168.2.200 這個 IP 時, 那麼該封包的相關資訊就會被寫入到核心訊息,亦即是 /var/log/messages 這個檔案當中。 然後該封包會繼續進行續的規則比對。所以說, LOG 這個動作僅在進行記錄而已,並不會影響到這個封包的其他規則比對的。 好了,接下來我們分別來看看 TCP,UDP 以及 ICMP 封包的其他規則比對吧!

9.3.4-4 TCP, UDP 的規則比對:針對埠口設定

我們在第二章網路基礎談過各種不同的封包格式, 在談到 TCP 與 UDP 時,比較特殊的就是那個埠口(port),在 TCP 方面則另外有所謂的連線封包狀態, 包括最常見的 SYN 主動連線的封包格式。那麼如何針對這兩種封包格式進行防火牆規則的設定呢?你可以這樣看:

[root@www ~]# iptables [-AI 鏈] [-io 網路介面] [-p tcp,udp] \

> [-s 來源IP/網域] [--sport 埠口範圍] \

> [-d 目標IP/網域] [--dport 埠口範圍] -j [ACCEPT|DROP|REJECT]

選項與參數:

--sport 埠口範圍:限制來源的埠口號碼,埠口號碼可以是連續的,例如 1024:65535

--dport 埠口範圍:限制目標的埠口號碼。

事實上就是多了那個 --sport 及 --dport 這兩個玩意兒,重點在那個 port 上面啦! 不過你得要特別注意因為僅有 tcp 與 udp 封包具有埠口,因此你想要使用 --dport, --sport 時,得要加上 -p tcp 或 -p udp 的參才會成功喔!底下讓我們來進行幾個小測試:

範例:想要連線進入本機 port 21 的封包都抵擋掉:

[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

範例:想連到我這部主機的網芳 (upd port 137,138 tcp port 139,445) 就放行

[root@www ~]# iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT

[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT

[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT

瞧!你可以利用 UDP 與 TCP 協定所擁有的埠口號碼來進行某些服務的開放或關閉喔!你還可以綜合

理呢!例如:只要來自 192.168.1.0/24 的 1024:65535 埠口的封包,且想要連線到本機的 ssh port 就予以擋,可以這樣做:

[root@www ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 \

> --sport 1024:65534 --dport ssh -j DROP

如果忘記加上 -p tcp 就使用了 --dport 時,會發生啥問題呢?

[root@www ~]# iptables -A INPUT -i eth0 --dport 21 -j DROP

iptables v1.4.7: unknown option `--dport'

Try `iptables -h' or 'iptables --help' for more information.

你應該會覺得很奇怪,怎麼『 --dport 』會是未知的參數 (arg) 呢?這是因為你沒有加上 -p tcp 或 -p ud 的緣故啊!很重要喔!

除了埠口之外,在 TCP 還有特殊的旗標啊!最常見的就是那個主動連線的 SYN 旗標了。 我們在iptables 裡面還支援『 --syn 』的處理方式,我們以底下的例子來說明好了:

範例:將來自任何地方來源 port 1:1023 的主動連線到本機端的 1:1023 連線丟棄

[root@www ~]# iptables -A INPUT -i eth0 -p tcp --sport 1:1023 \

> --dport 1:1023 --syn -j DROP

一般來說,client 端啟用的 port 都是大於 1024 以上的埠口,而 server 端則是啟用小於 1023 以下的埠口在監聽的。所以我們可以讓來自遠端的小於 1023 以下的埠口資料的主動連線都給他丟棄! 但不適用FTP 的主動連線中!這部份我們未來在二十一章的 FTP 伺服器再來談吧!

9.3.4-5 iptables 外掛模組:mac 與 state

在 kernel 2.2 以前使用 ipchains 管理防火牆時,通常會讓系統管理員相當頭痛!因為 ipchains 沒有所謂封包狀態模組,因此我們必須要針對封包的進、出方向進行管控。舉例來說,如果你想要連線到遠端主機的 port 22 時,你必須要針對兩條規則來設定:

本機端的 1024:65535 到遠端的 port 22 必須要放行 (OUTPUT 鏈);

遠端主機 port 22 到本機的 1024:65535 必須放行 (INPUT 鏈);

這會很麻煩!因為如果你要連線到 10 部主機的 port 22 時,假設 OUTPUT 為預設開啟 (ACCEPT), 你依舊需要填寫十行規則,讓那十部遠端主機的 port 22 可以連線到你的本地端主機上。 那如果開啟全的 port 22 呢?又擔心某些惡意主機會主動以 port 22 連線到你的機器上! 同樣的道理,如果你要讓本地端主機可以連到外部的 port 80 (WWW 服務),那就更不得了? 這就是網路連線是雙向的一個很重要的概念!

好在我們的 iptables 免除了這個困擾!他可以透過一個狀態模組來分析 『這個想要進入的封包是否為剛剛我發出去的回應?』 如果是剛剛我發出去的回應,那麼就可以予以接受放行!哇!真棒!這樣就不用管遠端主機是否連線進來的問題了! 那如何達到呢?看看底下的語法:

鸟哥的linux私房菜:鸟哥的Linux私房菜目录 鸟哥的linux私房菜

鸟哥的linux私房菜:鸟哥的Linux私房菜目录鸟哥的 linux私房菜 鸟哥的linux私房菜:鸟哥的Linux私房 菜目录鸟哥的linux私房菜 话题:鸟哥的linux私房菜兴趣爱好什么是操作系统什么是磁盘阵列文件目录第一部分认识Linux及Linux主机规划安装第1章什么是Linux21.1 什么是Linux31.1.1 计算机:计算的辅助工具31.1.2 什么是操作系统31.1.3 Linux之前UNIX的历史51.1.4 关于GNU计划91.2 Torvalds的Linux开发 111.2.1 与Minix之间111.2.2 386硬件的多任务测试111.2.3 初次发布Linux 0.02121.2.4 Linux的开发:虚拟团队的产生131.2.5 Linux 版本141.3 Linux的特性151.3.1 Linux的特性161.3.2 Linux的优缺点161.3.3 其他相关信息171.4 习题181.5 参考资料19第2章如何学习Linux202.1 Linux的应用212.2 基础学习222.2.1 从头学习222.2.2 选择工具书232.2.3 实践再实践232.3 学习方法232.3.1 X Window还是命令行242.3.2 主机/网络数据查询242.3.3 向别人提问252.3.4 笔者的建议252.4 习题26第3章 Linux主机的规划273.1 认识主机硬 件 组件283.1.1 认识计算机的硬件配置283.1.2 选择适合Linux系统的主机配 置333.1.3 Linux中的硬件设备号353.2 安装Linux前的规划363.2.1 选择适当的版本363.2.2 主机服务规划与硬件的关系373.2.3 主机硬盘的主要规划 383.2.4 练习机的安装建议393.3 实际案例393.4 习题403.5 参考资料41第4 章安装FC4与多重启动技巧424.1 安装Linux的第一步:规划434.1.1 练习机的规划434.1.2 硬盘连接与硬盘号444.1.3 识别硬盘分区454.1.4 Linux安装模式中硬盘分区的选择(极重要)464.2 开始安装Fedora Core Release IV474.2.1

【IT专家】【Linux】鸟哥的Linux私房菜基础学习篇整理(一)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系【Linux】鸟哥的Linux私房菜基础学习篇整理(一)2014/07/28 265 最近,一直在写PPC的模拟器和汇编器,也在做设计。因此重新看了看《鸟哥的Linux私房菜》,还是有好多命令不太熟悉。就打算写几篇blog 记下来。1. nl [-bnw] filename:添加行号打印参数:-b:指定行号指定的方式,主要有两种:-b a:表示不论是否为空行,也同样列出行号(类似cat -n);-b t:如果有空行,空的那一行不要列出行号(默认值)。-n:列出行号表示的方法,主要有三种:-n ln:行号在屏幕的最左方显示;-n rn:行号在自己字段的最右方显示,且不加0;-n rz:行号在自己字段的最右方显示,且加0。-w:行号字段所占用的位数。2. more:一页一页翻动支持的按键:Space:代表向下翻一页;Enter:代表向下滚动一行;/字符串:代表在这个显示的内容中,向下查询“字符串”这个关键字;:f:立刻显示文件名以及目前显示的行数;q:代表立刻离开more,不再显示该文件内容;b或[ctrl]-b:代表向回翻页,不过仅对文件有用,对管道无用。3. less:一页一页翻动支持的按键:Space:向下翻动一页;[PageDown]:向下翻动一页;[PageUp]:向上翻动一页;/字符串:向下查询“字符串”这个关键字;?字符串:向上查询“字符串”这个关键字;n:重复前一个查询(与/或?有关);N:反向重复前一个查询(与/或?有关);q:退出。4. head [-n number] filename:取出前面几行参数:-n:后面接数字,代表要显示的行数;5. tail [-nf] filename:取出后面几行参数:-n:后面接数字,代表要显示的行数;-f:表示持续检测后面的文件,要等到按下[ctrl]-c 才会结束tail的检测。6. od [-t TYPE] filename:查阅非纯文本文件参数:-t:后面接各种类型的输出,例如:a:利用默认的字符来输出;c:使用ASCII字符来输出;d[size]:利用十进制来输出,每个整数占用size bytes;f[size]:利用浮点数来输出,每个整数占用size bytes;o[size]:利用八进制来输出,每个整数占用size bytes;x[size]:利用十六进制来输出,每个整数占用size bytes;7. touch [-acdmt] filename:修改文件时间或创建文件参数:-a:修改访问时间;-c:修改文件的时间,若文件不存在则不创建文件;-d:后面可以接欲修改的日期而不用目前的日期,也可以使用--date=“日期或时间”;-m:仅修改mtime;-t:后面接欲修改的时间

鸟哥的私房菜读书笔记

Linux安装硬盘规划 Linux其实就是一个kernel,新内核上开发的软件无法在旧的内核上运行,比如在内核为2.6上开发出来的各种软件就无法在2.4的内核上运行,而且,不同内核的函数库也不相同。所以,选择linux版本时,需要知道该版本的kernel版本。 1.硬盘的分区与挂载 除了硬盘的代号需要特别留意之外,硬盘分区也要清楚。需要学习fdisk这个重要的分区程序,完成分区后,接下来就要格式化硬盘,格式化需要了解mke2fs命令的用法。 格式完后,需要了解挂载点(一个目录)并进行挂载,挂载使用的命令为mount。挂载前,想要使用fsk命令来检查一下该分区有没有问题。但是注意:使用fsck时,请务必先使用umount卸载要被检查的分区。 还有,如果要让某些分区在开机的时候就自动挂载,要记得将其写入/etc/fstab当中,或者是将命令完整的写到/etc/tc.d/rc.local当中。 2.软件包的选择与安装 图形界面很容易造成系统的资源损耗,因此服务器上面较少使用图形界面。为了方便以后的升级与重新安装,在选择软件包时,请务必将下面几个软件包选择进来: make,gcc,kernel-source,kernel-header及kernel—devel。 其中make和gcc是编译软件包必须用到的软件,kernel-devel是一些驱动程序在编译时会用到的函数库或系统数据,这些东西对于台式计算机并不很重要,因此在个大版本的软件包上面都没有默认安装,需要自己选择安装。这些软件通常都会放在software develop 或者utility项中,请仔细选择。 3.启动设置(Grub/Lilo) 在我们进入系统之前,主机会先读BIOS信息,然后会读取第一块硬盘的主引导扇区(Master Boot Recorder ,简称MBR),这个操作是为了让我们的主机了解数据格式,以顺利地将系统的数据读取进来。MBR上的程序,被称为开机管理程序,在linux中主要的开机管理程序有Grub和LILO两个,他们的运行方式不太相同。 区别:LILO是直接将所有的信息都写入MBR,所以当您设置完配置文件/etc/lilo.conf后,还得将LILO重新安装到MBR中。至于Grub则是使用类似指针(point)的功能,将启动信息导入配置文件/boot/grub/menu.lst中。这两个管理程序各有优缺点,可依照个人喜好来选择安装。 如果想实现“多重开机”功能,您必须了解MBR与Super Block的异同点,这都是需要学习的。 安装一台好的linux主机,最重要的一点就在于硬盘的分区,硬盘分区的考虑会影响到主机以后的扩充性,实用性,以及安全性。 了解欲架设的网站服务原理 了解每种服务的工作原理,对您以后进行调试相当有用,在主机的规划上也会有一定程度的帮助。例如:在linux上很有名气的文件服务SAMBA,它的工作原理主要是NetBiOS over TCP/IP,而如果您了解最原始的NetBIOS是无法跨网段的,亦即无法跨路由器的,那么就比较容易了解为何Windows的网络上的“网上邻居”显示的计算机数量只有局域网内部的计算机。 总之,理解服务(Service)的工作流程,将有助于服务器的架设与维护。 这还只是各个服务器的服务原理,如果是在linux上运行,您至少要了解什么事daemon(守护进程)。 服务的软件安装,漏洞修补,软件包升级 假设您已经将网络硬件配置搞定了,主机也规划好了,并且也已经可以连上

鸟哥的 Linux 私房菜

鳥哥的 Linux 私房菜 為取得較佳瀏覽結果,請愛用firefox瀏覽本網頁 第七章、Linux 檔案與目錄管理 切換解析度為 800x600 1. 目錄與路徑 1.1 相對路徑與絕對路徑 1.2 目錄的相關操作:cd, pwd, mkdir, rmdir 1.3 關於執行檔路徑的變數: $PATH 2. 檔案與目錄管理 2.1 檔案與目錄的檢視: ls 2.2 複製、刪除與移動:cp, rm, mv 2.3 取得路徑的檔案名稱與目錄名稱 3. 檔案內容查閱: 3.1 直接檢視檔案內容:cat, tac, nl 3.2 可翻頁檢視:more, less 3.3 資料擷取:head, tail 3.4 非純文字檔: od 3.5 修改檔案時間與建置新檔: touch 4. 檔案與目錄的預設權限與隱藏權限 4.1 檔案預設權限:umask 4.2 檔案隱藏屬性:chattr, lsattr 4.4 檔案特殊權限:SUID, SGID, SBIT, 權限設定 4.3 觀察檔案類型:file 5. 指令與檔案的搜尋: 5.1 指令檔名的搜尋:which 5.2 檔案檔名的搜尋:whereis, locate, find 6. 極重要!權限與指令間的關係: 7. 重點回顧 8. 本章習題 9. 參考資料與延伸閱讀 10. 針對本文的建議:https://www.wendangku.net/doc/cb1202991.html,/viewtopic.php?t=23879

目錄與路徑: 由第六章Linux的檔案權限與目錄配置中透過FHS瞭解了Linux的『樹狀目錄』概念之後,接下來就得要實際的來搞定一些基本的路徑問題了!這些目錄的問題當中,最重要的莫過於第六章也談過的『絕對路徑』與『相對路徑』的意義啦!絕對/相對路徑的寫法並不相同,要特別注意。此外,當妳下達指令時,該指令是透過什麼功能來取得的?這與PATH這個變數有關呢!底下就讓我們來談談囉! 相對路徑與絕對路徑: 在開始目錄的切換之前,你必須要先瞭解一下所謂的『路徑(PATH)』,有趣的是:什麼是『相對路徑』與『絕對路徑』?雖然前一章已經稍微針對這個議題提過一次,不過,這裡不厭其煩的再次的強調一下! ?絕對路徑:路徑的寫法『一定由根目錄 / 寫起』,例如: /usr/share/doc 這個目錄。 ?相對路徑:路徑的寫法『不是由 / 寫起』,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:『cd ../man』這就是相對路徑的寫法啦!相對路徑意指『相對於目前工作目錄的路徑!』 ?相對路徑的用途 那麼相對路徑與絕對路徑有什麼了不起呀?喝!那可真的是了不起了!假設你寫了一個軟體,這個軟體共需要三個目錄,分別是 etc, bin, man 這三個目錄,然而由於不同的人喜歡安裝在不同的目錄之下,假設甲安裝的目錄是 /usr/local/packages/etc, /usr/local/packages/bin 及 /usr/local/packages/man ,不過乙卻喜歡安裝在 /home/packages/etc, /home/packages/bin, /home/packages/man 這三個目錄中,請問如果需要用到絕對路徑的話,那麼是否很麻煩呢?是的!如此一來每個目錄下的東西就很難對應的起來!這個時候相對路徑的寫法就顯的特別的重要了! 此外,如果你跟鳥哥一樣,喜歡將路徑的名字寫的很長,好讓自己知道那個目錄是在幹什麼的,例如:/cluster/raid/output/taiwan2006/smoke 這個目錄,而另一個目錄在 /cluster/raid/output/taiwan2006/cctm ,那麼我從第一個要到第二個目錄去的話,怎麼寫比較方便?當然是『cd ../cctm』比較方便囉!對吧! ?絕對路徑的用途 但是對於檔名的正確性來說,『絕對路徑的正確度要比較好~』。一般來說,鳥哥會建議你,如果是在寫程式 (shell scripts) 來管理系統的條件下,務必使用絕對路徑的寫法。怎麼說呢?因為絕對路徑

鸟哥的Linux私房菜第二版答案整理

Linux常见问题整理 1.操作系统应该要控制硬件的哪些单元? 运算单元、控制单元、寄存器组、总线接口单元、输入/输出接口单元。 2.一个较为完整的操作系统应该包含哪些部分? 比较完整的操作系统应该包含两个组件,一个是核心与其提供的接口工具,另一个是利用核心提供的接口工具所开发的软件。 3.1GB硬盘空间等于多少KB? 1GB=1024MB=1024*1024KB. 4.在主机上安装了一张网卡,开机之后系统无法使用,确定网卡是好的,问题可能在哪里?该如何解决? 核心不能识别该网卡,也就无法控制这个网卡,需要安装对应的网卡驱动。 5.是否可以将Windows上的显卡驱动程序安装在Linux上? 不能,Linux的核心与Windows的核心是不同的。 6.在Windows上能玩的游戏,是否可以到Linux上去玩? 一般不能,Linux的核心与Windows的核心是不同的。 7.什么是软件的移植? 指将软件从一种计算机上转置到其它计算机上 8. Linux众多的版本之间有什么异同? Ubuntu是一个以桌面应用为主的Linux操作系统,Fedora 可以说是Redhat 桌面版本的延续,只不过是与开源社区合作。 9. Unix是谁写出来的? Ritchie等人用C语言写出第一个正式的UNIX核心。 10. GNU计划是谁发起的? 史托曼在1984年发起GNU计划。 11. GNU的全名是什么? GNU是GNU is Not Unix的缩写。 12. GNU主要由哪个基金会支持? 理查德·斯托曼创立了自由软件基金会来为GNU计划提供技术、法律以及财政支持。 13. 如何获取Linux发行版的可安装光盘? 可以直接找软件发行商购买安装光盘,或者到他们的官方网站上去下载ISO文件,然后刻录成光盘。 14.简单说明GNU General Public License与开放源码的精神 GPL的核心思想是“版权制度是促进社会进步的手段,版权本身不是自然权利”,GPL与开放代码的精神更多的在

鸟哥的Linux私房菜基础学习篇课后习题答案

私房菜--基础学习篇课后习题答案鸟哥的linux私房菜 Linux的规划与安装 第一篇:Linux 第一篇: 一、什么是Linux 1.一个完整的作业系统至少要能够完整的控制整个硬件,请问,作业系统应该要控制 硬件的哪些单元? 至少要能够控制:(1)input/output crontrol,(2)device control,(3)process management,(4)file management.等等! 2.核心的功能在于管控整个系统的硬件,这包括了CPU运算单元的管理,输入/输出 的管理,记忆体的管理等等。那么请问一个较为完整的作业系统,应该包含哪些部分? 应包含Kernel+Kernel Tools+Applications等等 3.一个GBytes的硬盘空间,等于几个KBytes? 1GBytes=1024MBytes*1024KBytes/MBytes=1048576KBytes 4.你在你的主机上面安装了一张网络卡,但是开机之后,系统却无法使用,您确定网 络卡是好的,那么可能的问题出在哪里?该如何解决? 因为所有的硬件都没有问题,所以,可能出问题的地方在于系统的核心(kernel)不支持这张网络卡。解决的方法,到网络卡的开发商网站,下载支援您主机作业系统的驱动程序,安装网络卡驱动程序后,就可以使用了。 5.我在一部主机上面安装Windows作业系统时,并且安装了显示卡的驱动程序,他是 没有问题的。但是安装Linux时,却无法完整的显示整个X Window。请问,我可不可以将Windows上面的显示卡驱动程序拿来安装在Linux上? 不行!因为核心不同,针对硬件所写的驱动程序也会不相同,编译器也不同,当然,驱动程序也无法在两个作业系统间相容。这也是为何开发商在他们的网站上面,都会同时提供许多不同作业系统的驱动程序之故。 6.我在Windows上面玩的游戏,可不可以拿到Linux去玩? 当然不行!跟上一题相似的,因为游戏也是一个应用程序(application),他必须要使用到核心所提供的工具来开发他的游戏,所以这个游戏是不可在不同的平台间运作的。除非这个游戏已经进行了移植。 7.什么是软件的移植? 程序是由程序码(通成为ASCII格式)经过编译器编译成为binary file之后,才能够在该作业系统上面执行。因此,您可以将您的程序的程序码修改成可以适应其他作业系统的环境,并且加以编译,使程序可以在其他平台上运作,这个修改的动作即为移植。 8.Linux本身仅是一个核心与相关的核心工具而已,不过,他已经可以驱动所有的硬 件,所以,可以算是一个很阳春的作业系统了。经过其他应用程序的开发之后,被整合成为Linux distribitions。请问众多的distributions之间,有何异同? 相同:利用同样的Linux kernel(https://www.wendangku.net/doc/cb1202991.html,),几乎相同的自由软件套件(例如GNU 里面的gcc/glibc/vi/apache/bind/sendmail...),几乎相同的操作接口(例如均使用bash/KDE/GNOME等等)。 不同:使用的kernel与各软件的版本可能会不同;各开发商加入的应用工具不同,使用的套件管理模式不同(debian与RPM)

linux学习思路

linux学习计划 二、如何学习linux Linux操作系统主要就是一些配置文件(/etc)和命令行工具(/bin /sbin /usr/bin /usr/sbin),要掌握操作系统的主要目录结构和配置文件,运用系统的命令行工具(shell 脚本)完成常规的操作系统维护工作,监控工作。进而可以安装部署一些企业应用,进行监控、管理等等。 1.重要的命令:find,sed,awk,正则…… 2.工具:gnu下的著名软件gcc,gdb,vi,make…… 3.unix编程,编译等。xwin开发方式,gtk,qt…… 4.文件系统,/dev下的设备(会用),/var下重要的东西,/etc 下的配置(常用服务配置apache, ftpd, sshd, xinetd, squid, natd, named),系统启动顺序,配置相应服务等…… 5.c,python,php等高级语言…… 三、个人水平定位 1.初级:熟练使用命令、熟悉Shell编程、能配置简单的服务,清楚各类服务相关的配置文件的位置,能看懂并可修改系统提供的配置脚本(/etc/*.*)。推荐书籍: 《鸟哥的私房菜基础篇、高级篇》 《Advanced Bash Shell》 2.中级:熟悉TCP/IP原理、OS原理、熟练使用C语言、Linux系统编程、网络编程。推荐书籍: 《The C Programming Language》 《Unix环境高级编程》 《Linux程序设计》 《TCP/IP协议详解卷一》 《Unix网络高级编程》 3.高级:内核,驱动级别。推荐书籍: 《Linux Device Driver》 《深入理解Linux内核》 《深入理解计算机系统》 《深入理解LINUX网络内幕》 四、学习途径 1.Help System 帮助文档(man) 2.online books 在线文档(wiki ,blogs)

Linux学习经典书籍全集(含电子档文件)

学习Linux经典书籍全集推荐 【文件中包含电子档,可直接打开】 Linux学习三部曲 (1)Linux使用。简单的说,学会Linux怎么使用。最好选用一种流行的Linux拿来用。如果有一天,不用Windows你不觉得用电脑别扭。那恭喜你。 经典书籍:man手册。 鸟哥的Linux私房菜基础学习篇(第三版) https://www.wendangku.net/doc/cb1202991.html,/product.aspx?product_id=20866026 Red Hat Linux 9系统管理与服务器配置(第2版) https://www.wendangku.net/doc/cb1202991.html,/product.aspx?product_id=20859121 Linux 指令与Shell编程范例速查手册 https://www.wendangku.net/doc/cb1202991.html,/product.aspx?product_id=22737737

(2)Linux应用开发。写应用程序。 Linux程序设计(第3版) https://www.wendangku.net/doc/cb1202991.html,/product.aspx?product_id=20856718 Linux高级程序设计(第3版) https://www.wendangku.net/doc/cb1202991.html,/product.aspx?product_id=22898432 UNIX环境高级编程(第3版) https://www.wendangku.net/doc/cb1202991.html,/product.aspx?product_id=9171119

(3)Linux驱动开发。需要相应的硬件。 Linux驱动程序设计(第3版) linux内核模块编程。 Linux内核设计与实现(原书第3版) OReilly. Understanding.the.Linux.Kernel.3rd.Edition

Linux习题

鸟哥的Linux 与ADSL 私房菜 一些基础的Linux 问题 最近更新日期:2005/05/23 一些基础的 Linux 问题与讨论: 注意:如果您有更好的试题,或者是有相关的数据要提供给 VBird 的话,我也会尽快的将他写到网页中的!感谢感谢!! ^_^ .. 一、什么是 Linux 呢?! 1.试说明 Unix 与 Linux 的历史? 2.简单说明 GNU General Public License (GPL)的精神: 3.什么是 Linux Distribution? 4.市面上众多的 Linux 版本当中,有何异同? 5.Linu Kernel 的功能: 6.试说明 Linux Kernel 与使用者之间的相关性? 7.试说明什么是 GUI 8.Linux 的优点: 9.Linux 是多人多任务的环境,请问何谓多任务(Multitask)与多人 (Multiuser): 二、Linux 的安装与认识 Linux 支持的硬件 1.一般而言, Linux 需要的配备并不需要太高档,但 Open Linux Server 3.1.1 需要? 2.什么是 IDE 界面,一般而言,普通 PC 允许几个 IDE 界面与装 置? 3.IDE2 的 master 之第一个 logical 磁盘中,其装置代号(文件名) 为何? 4.在硬盘分割 (Partition)时,最多有几个 primary + extended ? 5.若在分割的时候,在 IDE1 的 slave 硬盘中,分割『六个有用』 的扇区(具有 filesystem 的),此外,有两个 primary 的扇区! 请问六个扇区的代号? 6.一般而言安装 Linux 至少要有哪两个 partition 呢? 7.一般而言,在 RAM 为 64MB 或 128 MB 的系统中, swap 要开多 大? 8.光驱与软盘驱动器的代号(装置文件名)? 9.网络卡(Network Interface Card, NIC)的代号? 10.预设的 Linux 文件格式为何?又,目前常用的 Journalling 文件 格式为何?

鸟哥的私房菜(服务器篇)【第二版】练习答案

第一章架设伺服器前的准备工作 1.4 本章习题 ?如果我有一颗硬碟在A 主机上面安装了Linux 之后,拿到另一台配备相同的B 主机上面去进行开机,结果竟然无法顺利开机,你认为可能的原因是什么? 不能开机常常是因为找不到根目录的位置,而根目录找不到通常就是磁碟的装置档名错误所致。目前由于/etc/fstab 配合filesystem 都使用LABEL name ,所以不容易发生这样的情况。但如果你曾经自行手动处理过/etc/fstab 的话,那就必须要注意磁碟的装置档名了!透过修改/etc/fstab 以及/boot/grub/menu.lst 或许能够得到方法解决。 ?一般来说,在Linux 系统上,使用者预设的家目录在那个目录下?另外,新增一个使用者时,该使用者预设的家目录内容来自那个目录下? 在/etc/default/useradd 这个档案里面会规范使用者的预设家目录以及预设家目录的内容,一般来说,使用者预设家目录在/home ,至于家目录内的档案则复制来源在/etc/skel 里面。 ?我以原始码的方式进行一个套件的安装,但是在分析系统的时候,分析程式一直告诉我找不到cc 这个指令,请问这是什么问题?为何需要cc ?又,我该如何解决这个问题,好让套件可以顺利的被安装在我的Linux 上面? 因为是原始码,所以还需要编译程式来将该原始码编译成为可以在你的Linux 系统上面跑的binary 档案,在Linux 上头预设的编译程式就是gcc 这个编译器(compiler)。如果你在安装Linux 的时候,使用Linux Installer 预设的套件选择,那通常会没有安装gcc 以及make 等套件,此时,请使用yum 去处理软体的安装吧! ?我发现我的Linux 系统怪怪的,似乎有什么不知名的程序在记忆体当中跑,我该如何将这个不知名的程序捉出来,并且将他移除? 如果要捉出程序(process)的话,可以使用ps -aux 或者是直接输入top 来查询process 的ID (PID),找到PID 号码后,再以kill -9 PID 来删除该程序即可。 ?我总是无法编辑某个档案,你认为应该是什么问题造成的?那又要怎么解决? 无法编辑某个档案,可以先使用file 这个指令来查询一下该档案的格式,例如想察看/etc/shadow 的格式,可以下达:『file /etc/shadow』,如果是文字档,却还是无法编辑,那么最可能发生的原因就是『权限』的问题了。可以使用ls -l filename 察看档案权限,再以chmod 或chown 来修订该档案的权限。此外,该档案也可能含有隐藏属性,可以使用lsattr filename 查阅,再以chattr 来修订隐藏属性。 ?你认为一个称职的网管人员应该具备什么能力? 能力需求相当高,如了(1)作业系统的基础知识(不论是Linux/Unix/MAC/MS);(2)网路基础的知识;(3)个别Internet Services 的运作知识之外,还需要(4)身心保持在备战状态,以及(5)具有相当高程度的道德感、责任感与使命感。 ?我要关掉cron 这个服务,应该怎么关掉他?如果正常的方法无法关闭这个服务,可以使用什么方法来关闭? 因为cron 是一个stand alone 的服务,所以可以使用/etc/rc.d/init.d/cron stop 来关闭;如果还是无法正常关闭,可以使用ps -aux | grep cron 捉出该程序的PID ,然后以kill -9 PID 来关闭。?如果一开机就要执行某个程式,应该要将该程式写入那个档案里面? 可以直接在/etc/rc.d/rc[run-level].d 里面加入S 开头的档案,不过,更简单的作法是直接将该程式写入/etc/rc.d/rc.local ,不过,请注意该程式必须要具有可执行的权限,且rc.local 也必须要是可执行喔! 第二章基础网路概念 2.7 本章习题

鸟哥私房菜——IP 观念: IP, network, netmask, broadcast, gateway, ARP协议

IP 观念:IP, network, netmask, broadcast, gateway, ARP协议, 接着下来要跟大家介绍的是IP 这个东西,这的东西真是让人要爱又怕呀!因为没有了他,所有的网络都是没有用的咚咚!嗯!通过了网络卡的安装与驱动程序的加载之后,你的系统已经可以取得MAC 并且也可以激活NIC ( 网络卡) 了,好了,那么接着下来自然就是要让你的计算机的门牌号码被Internet 上面其它的门牌号码认识啰!这个时候就必须要有所谓的Internet Protocol, IP 这个咚咚了!这个IP 是所有网络基础里面最基础的东西,如果没有了他,那么网络将不再是网络了! · IP 的组成: 众所皆知的,IP 是由四组8 bits 的数字所组成的,最小是0.0.0.0 ,最大是255.255.255.255 ,可以这样来看: 就是这样的一个模样!由于原本是二进制的方式来计算的,为了适应人类的思考方式,所以经过十进制的表示之后,自然就是由0 ~ 255 啰!好啦!从刚刚前面我们提到的『广播』的观念来看,假设您的环境是『网络媒体共享』的环境且整个网域之中都以IP 直接互相连接的话,那么在第一次执行『软件广播』、或是因为主机找不到ARP 表对应的MAC 而执行的『软件广播』、抑或者是在『物理广播』的传送与监听接段,哈哈!『ㄟ西郎!』因为每发出一个封包可能需要255x255x255x255 部计算机同时响应!那么很可能就会造成严重的封包碰撞或者是网络停顿的状态!因此,设定IP 的朋友们很聪明的将整个IP 段分成Network + Host ( 网域+ 主机),在同一个Network 当中,每一个Host 都必须是独一无二的!何解?我们来以一个 C Class 的例子来谈一谈好了!假设是192.168.0.0 ~ 192.168.0.255 这个例子来谈: 前面的三组数字称为network ,而最后面的一组数字就被称为是host 啰!他有什么特异功能呢?还记得软件广播与ARP 表的说明吗?对啦!当你的主机发出要求讯息到你的网络媒体上面时,由于是网络层的要求了,因此在讯息当中显示的目标MAC 为FF:FF:FF:FF:FF:FF,所以其它主机会先接收该封包,并且检验里面的IP 要求,如果不是在同一个网段内的,就会将封包给他丢弃啦!而如果是同一网段内的话,就会给予响应!也就是说『如果在同一个网段之内,所有的IP 将不需要透过router 而可以互相直接沟通!』在上面的例子当中,当我们以192.168.0.0 ~ 192.168.0.255 的IP 的计算机连在一起时,他们将可以直接进行资料传送!所以呢,呵呵!当然就是很方便啰!( 请注意,在这个系统当中,network 不可变,而host 则是不可相同!否则相同的那两个IP 将无法无法联机) !那么目前我们将整个IP 简单的方类成为三个网段,分别设定为所谓的A, B, C class :

鸟哥的Linux私房菜基础学习篇课后习题答案

鸟哥的linux私房菜-基础学习篇课后习题答案 第一篇:Linux的规划与安装 一、什么是Linux 1.一个完整的作业系统至少要能够完整的控制整个硬件,请问,作业系统应该要控制 硬件的哪些单元? 至少要能够控制:(1)input/output crontrol,(2)device control,(3)process management, (4)file management.等等! 2.核心的功能在于管控整个系统的硬件,这包括了CPU运算单元的管理,输入/输出 的管理,记忆体的管理等等。那么请问一个较为完整的作业系统,应该包含哪些部分? 应包含Kernel+Kernel Tools+Applications等等 3.一个GBytes的硬盘空间,等于几个KBytes? 1GBytes=1024MBytes*1024KBytes/MBytes=1048576KBytes 4.你在你的主机上面安装了一张网络卡,但是开机之后,系统却无法使用,您确定网 络卡是好的,那么可能的问题出在哪里?该如何解决? 因为所有的硬件都没有问题,所以,可能出问题的地方在于系统的核心(kernel)不支持这张网络卡。解决的方法,到网络卡的开发商网站,下载支援您主机作业系统的驱动程序,安装网络卡驱动程序后,就可以使用了。 5.我在一部主机上面安装Windows作业系统时,并且安装了显示卡的驱动程序,他是 没有问题的。但是安装Linux时,却无法完整的显示整个X Window。请问,我可不可以将Windows上面的显示卡驱动程序拿来安装在Linux上? 不行!因为核心不同,针对硬件所写的驱动程序也会不相同,编译器也不同,当然,驱动程序也无法在两个作业系统间兼容。这也是为何开发商在他们的网站上面,都会同时提供许多不同作业系统的驱动程序之故。 6.我在Windows上面玩的游戏,可不可以拿到Linux去玩? 当然不行!跟上一题相似的,因为游戏也是一个应用程序(application),他必须要使用到核心所提供的工具来开发他的游戏,所以这个游戏是不可在不同的平台间运作的。除非这个游戏已经进行了移植。 7.什么是软件的移植? 程序是由程序码(通成为ASCII格式)经过编译器编译成为binary file之后,才能够在该作业系统上面执行。因此,您可以将您的程序的程序码修改成可以适应其他作业系统的环境,并且加以编译,使程序可以在其他平台上运作,这个修改的动作即为移植。 8.Linux本身仅是一个核心与相关的核心工具而已,不过,他已经可以驱动所有的硬 件,所以,可以算是一个很阳春的作业系统了。经过其他应用程序的开发之后,被整合成为Linux distribitions。请问众多的distributions之间,有何异同? 相同:利用同样的Linux kernel(https://www.wendangku.net/doc/cb1202991.html,),几乎相同的自由软件套件(例

蜗牛的私房菜-TestNg

引子 古人云:蜗牛也是牛 话说最近几天半年会开的一个半劲,看到大家一个个捧着大奖和NS帅的掉渣的最帅哥合影,幸福的像花儿一样,本牛内心颇不平静。人家鸟哥的私房菜都第三版了,本牛作为一个工作多年的新人还在原地打转,辗转反侧,难以入睡,终于在数了一千只羊之后,做出一个沉重的决定:我得写点东西。为了那闪耀着万丈光芒的最佳新人奖,啊不,哪怕最佳新人提名奖也好,也为了阿炳同学求知的精神,更为了质量部QA新人的质量。我是一个PHP的菜鸟,Mysql也只是会使用,所以我写的这些东西大多是以Java作为首选语言,但有些东西作为通用的思想是不受语言限制的。 万事开头难,其实开过头后也不容易。测试方面的技术好多啊,多的像天上的繁星,一.俩.仨.四个…在有限的时间里,想做最多的了解,只能从最实用的着手, 去除教条式的金科玉律。于是,一个切入点蹦了出来,那就是介绍号称下一代Java测试技术的TestNG。其实这个next generation 也只是相对于Junit 3.8这个版本,在这个版本发布5年之后,从TestNG中借鉴了许多概念的Junit 4才发行,所以了解TestNG同样有助于学习Junit及Unit系列的众多分支。 软件开发是一项风险事业。测试则是缓解项目风险最重要的手段之一。一般来说,我们应该让需求可测试,让测试自动化,让自动化测试变的容易。理念一定要先进,工具一定要先进。将这些先进的理念和工具应用于项目中,提高生产效率,这就是创新的意义所在。(声明:本段不是原创!) 一、简介 TestNG是一个测试框架,不仅仅用来做单元测试,还包括集成测试。利用注解(annotation)来标注测试类。 二、和Junit3.8的区别 1.测试方法的名字不必以test开始,命名灵活; 2.测试方法可以返回值,不必是void的; 3.测试方法可以传入参数; 4.测试类不必从TestCase中继承; 5.除了提供了BeforMethod和AfterMethod这些在测试方法之前和之后的调用的外, 还有BeforeClass、AfterClass、BeforTest、AfterTest等调用; 6.提供了依赖关系测试; 7.对测试方法进行分组; 8.对异常的测试; 三、详细介绍 3.1测试、套件和配置annotation TestNG在testng.xml中来描述和配置测试,包括配suite,test,group (include and exclude某些组),class,method(include and exclude某些测试方法),还包括package的指定。

菜鸟学习之Linux

菜鸟学习之Linux‘ls’命令实例 [日期:2014-12-30] 来源:Linux公社作者:GuiltyMan [字体:大中小] ‘ls’命令是Linux下用来显示文件目录及其目录列表的。在下方的带有每个命令简短叙述的命令列表中,有几个是有不同用法的。在这次专栏里面,我们列举了对入门学习非常有用的十几个命令。 ls命令格式如下所示: #ls[选项][文件][目录] -a列举出隐藏文件,如果一个文件或目录的名字以一个’.’开始,那么他就被称为隐藏的 -F显示文件类型,显示,/用于文件目录,*用于可执行文件,@用于非文本文件的符号链接 -lh显示长文件列表,其中带有可读格式的文件大小 -l显示带有文件类型,权限,连接数,所有者,长文件列表,所在的文件簇,文件大小,创建日期以及时间 of最后一次修改或用于文件.ld的名字中。显示指定路径的长文件列表,但是隐藏其中的内容 -R显示指定路径内容以及他的所有子目录(递归列举)

-lt以创建的时间和日期的方式排列所有文件,以创建时间由短到长的顺序排列 -ltr以创建的时间和日期的方式排列所有文件,以创建时间由长到短的顺序排列 注意:想知道更详细的ls命令信息,请查阅ls手册 例子1:列举当前工作目录的文件以及路径 [root@localhost /]# ls bin boot cgroup dev etc home lib lib64 lost+found media mnt opt proc root sbin seli nux srv sys tmp usr var [root@localhost /]# 例子2:列举当前当前路径的详细信息 [root@localhost /]# ls -l total 94 dr-xr-xr-x. 2 root root 4096 Nov 23 03:13 bin dr-xr-xr-x. 5 root root 1024 Nov 23 05:29 boot drwxr-xr-x 10 root root 4096 Nov 23 03:42 cgroup drwxr-xr-x 18 root root 3680 Dec 12 21:32 dev drwxr-xr-x. 64 root root 4096 Dec 12 21:32 etc drwxr-xr-x 8 root root 4096 Jul 19 02:43 home dr-xr-xr-x. 8 root root 4096 May 3 2014 lib dr-xr-xr-x. 8 root root 12288 Nov 23 03:13 lib64 -rw-r--r-- 1 root root 72 Dec 12 21:40 linux-stuff drwx------. 2 root root 16384 May 3 2014 lost+found drwxr-xr-x. 2 root root 4096 Sep 23 2011 media drwxr-xr-x. 3 root root 4096 Jun 22 01:14 mnt ..................................................

刘遄:作为一名新人读完《鸟哥的Linux私房菜》的感受。

刘遄:作为一名新人读完《鸟哥的Linux私房菜》的感受。 作为一名运维领域的从业者及linux技术爱好者,坦白来讲,鸟哥的linux 私房菜也是我的linux入门书籍,我绝对的认可鸟哥为这本书的付出,其书发行量巨大,陪伴了一代的运维人员,甚至被封为“linux入门神书”,渐渐的从一本linux技术书籍,上升至精神的高度,不允许再有一点反驳之声,但思索再三,还是决定阐明我的观点,与初学者分享下这不同的看法。 首先鸟哥在开篇即提到了写书的缘由是因为记性不好,所以想写出一本能够放在案头的备忘录,对书籍的内容自然就没有了太多的筛选,反而一再的扩大知识范围,最终写出的两本书厚度足足超过十厘米,敢问这种“备忘录式的入门书籍”真的适合新手来读?我认为书籍既然发行了,就不能再是个备忘录,而应该是通过作者的经验将知识不断提炼,真正让捧起书的读者看完有收获才可以。 其次是鸟哥的linux私房菜的书籍更新周期过长,2014年末时RHEL7与Centos7就已经公布,经过了一年多的迭代,已经很稳定并被广泛使用了,如果内容没有定期更新,使得技术脱离了生产环境,还怎么称作是真正实用的linux 技术?并且鸟哥的linux私房菜缺少了对新手非常重要的答疑与帮助,如果遇到了实验出错,或者有知识点悟不透,这些都可能让初学者丧失掉对linux技术的兴趣。 所以综合上面的考虑,如果再有人向你推荐鸟哥的Linux私房菜,请你回应他:“你有没有完整的看完这本书?你觉得这本书真的适合我吗?”。 2014年,我在讲课时曾经表达过这个观点,学生问我:“那还有什么推荐的书吗?”那时感到无比的尴尬,因为作为一名linux讲师,我好像除了讲课外并没有能够给学员提供的了,所以在2015年春节前夕起笔,用了一年多的时间编写了中国第一本基于红帽最新RHEL7系统的Linux书籍——《Linux就该这么学》,迫不及待的第一时间便公布到了网上,用了整整一年的时间收集读者反馈后又经过了不断的完善,现在已经初步定型,读者的反馈也越来越好,甚至得到了很多大学教授的推荐,真的是非常的欣闻,但是更欣慰的是我们国人的学员除了鸟哥的linux私房菜,又多了一本品质甚至更好的linux入门教材,如果您想要学习linux技术,可以直接在百度上搜索书名就能够找到了,耐心来试读一章,相信你会因此爱上Linux技术的。

《鸟哥的linux私房菜(基础篇)》学习笔记

《鸟哥的linux私房菜(基础篇)》学习笔记----------李晶 目录 第一部分:linux的规划与安装 (2) 1.linux历史与简介: (2) 2.分区: (2) 3.多重引导: (2) 第二部分:linux文件,目录与文件系统格式 (3) 1.管理文件权限: (3) 2.管理文件以及目录: (4) 3.管理磁盘与文件系统: (4) 4.文件的打包压缩: (5) 第三部分:shell (5) 1.vim: (5) 2.shell: (5) 3.正则表达式: (6) 4.shell编程: (7) 第四部分:用户管理 (9) 1.用户账号及权限: (9) 2.磁盘管理: (9) 3.crontab: (9) 4.作业管理: (10) 第五部分:系统管理员 (11) 1.系统服务: (11) 2.软件安装: (12) 3.x-window: (12) 4.内核编译: (12)

第一部分:linux的规划与安装 这里个人相对来说比较熟悉,对于如何安装linux书上有详细介绍。不过我一般用的都是ubuntu,这个发行版的安装并不是很复杂。 1.linux历史与简介: 计算机是由一堆硬件所组成的,操作系统是为了更加有效地控制和使用这些硬件资源。我们最熟悉的windows就是一种操作系统。但是linux是完全不同于windows的一种操作系统。众所皀知癿,Linux癿核心是由Linus Torvalds在1991年癿时候给他开发出来的。linux沿袭了unix 的许多良好的特性,最重要的也是现今非常受欢迎的原因之一就是linux是开源的,并且在其之上的软件也是免费开源的,以此为基本最后发展出来了开源社区,对整个计算机科学的发展都有很重要的作用。 linux目前有着众多的发行版,Red Hat, SuSE,Ubuntu, Fedora, Debian。我个人使用的是ubuntu-10.10。 linux的发展路径: Unix癿前身是由贝尔实验室(Bell lab.)癿Ken Thompson利用汇编语言写成的,后来在1971-1973年间由Dennis Ritchie以C语言重新改写,才称为Unix。 1977年由Bill Joy开发出BSD (Berkeley Software Distribution),这些称为Unix-like的操作系统。 1984年由Andrew Tannenbaum制作出Minix操作系统,该系统可以提供原始码以及软件; 1984年由Richard Stallman提倡GNU计划,倡导自由软件(Free software),强调其软件可以自由获得,修改,再发行。 1991年由芬兰大学生Linus Torvalds开发出Linux操作系统。Linux成功主要在于:Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。 Linux本身就是个操作系统,其开发网站在https://www.wendangku.net/doc/cb1202991.html,,我们亦称Linux操作系统最核心的数据为内核Kernel。 目前Linux核心的发展分为两种版本,分别是稳定版本偶数版,如2.6.X,适合商业和家用环境使用;一种是发展中版本如2.5.X 版,适合开发特殊功能的环境。 Linux distributions的组成有:『Linux Kernel + Free Software + Documentations(Tools) + 可完全安装的程序』所制成癿一套完整的系统。 2.分区: 目前各种机器安装linux都比较方便了,特别是像我使用ubuntu10.10,基本上全是自动安装的,不过经常困惑我们的一般都是分区。如何分区才合理呢,对于初学者,分区可以直接只分一个根分区和交换(SWAP)分区。这里值得说一下的是磁盘只能分四个主分区。不过可以通过扩展分区来扩充,这样的话就是三个主分区和多个逻辑分区。SWAP分区的大小一般建议2倍于你的物理内存。将/home等数据量会较大的目录单独分区是一个非常不错的做法,具体分配多少容量,看你最终的数据量,估算后尽量多分。 3.多重引导: 目前我们使用学习linux的最大的苦恼就是关于如何与windows共存的问题了。书中详细介绍了如何安装centOS,附带很多截图,并且也描述了在已经装了windows的情况下如何设置多重引导。这个我也有过很多关于引导的经历。现在绝大多数的引导程序都会选择使用GRUB,这是一个交互式的引导程序。当我们的引导程序如果出现故障,或者是重装了windows的时候,我们将无法正常进入linux,如果使用的系统是ubuntu这个时候可以使用如下方法:

相关文档
相关文档 最新文档