LPI Linux 認證/基礎網路配置
(LPIC-2 版本 4.5)
權重 3
描述: 候選人應該能夠配置一個網路裝置,使其能夠連線到本地、有線或無線和廣域網。本目標包括能夠在單個網路(包括 IPv4 和 IPv6 網路)內的各種子網之間進行通訊。
關鍵知識領域
- 配置和操作乙太網網路介面的實用程式
- 配置無線網路。
術語和實用程式
ipifconfigroutearpiwiwconfigiwlist
getty 是你用於撥號連線的程式。你不需要它進行撥號連線。除了顯示登入提示符外,它還有助於接聽電話。最初,getty 用於從啞終端登入計算機。它今天的主要用途是登入 Linux 控制檯。有幾種不同的 getty 程式,但其中一些在撥號連線時與調變解調器配合良好。getty 程式通常在啟動時啟動。它必須從 /etc/inittab 檔案中呼叫。在這個檔案中,你可能會發現一些你需要稍微編輯的示例。希望這些示例適合你電腦上安裝的 getty 版本。
有四種不同的 getty 程式可供選擇,這些程式可與調變解調器用於撥號連線:mgetty、uugetty、getty_em 和 agetty。以下小節將簡要概述它們。agetty 是四者中最弱的,它主要用於直接連線的文字終端。mgetty 支援傳真和語音郵件,而 Uugetty 不支援。據稱 mgetty 缺少 uugetty 的一些功能。getty_em 是 uugetty 的簡化版本。因此,mgetty 可能是你最好的選擇,除非你已經熟悉 uugetty(或難以獲取 mgetty)。這些 getty 程式的語法不同,因此請確保在 /etc/inittab 中檢查你是否對使用的任何 getty 使用了正確的語法。
為了檢視電腦上關於各種 getty 的文件,請使用“locate”命令。鍵入:locate "*getty*"(包括引號可能會有幫助)。請注意,許多發行版只將該程式稱為 getty,即使它實際上可能是 agetty、uugetty 等。但如果你閱讀手冊頁(鍵入:man getty),它可能會顯示它是哪個 getty。這應該是路徑為 /sbin/getty 的 getty 程式。
Getty 在登入後“退出”(並且可以重新生成)
登入後,你將注意到(透過使用“top”、“ps -ax”或“ptree”)getty 程序不再執行。它發生了什麼?為什麼如果你的 shell 被殺死,getty 會再次重啟?原因如下:在你輸入使用者名稱後,getty 會獲取它並呼叫 login 程式,告訴它你的使用者名稱。getty 程序被 login 程序替換。login 程序會詢問你的密碼,檢查它,並啟動密碼檔案中指定的任何程序。這個程序通常是 bash shell。如果是這樣,bash 會啟動並替換 login 程序。請注意,一個程序替換另一個程序,並且 bash shell 程序最初是作為 getty 程序啟動的。這將在下文中解釋。
現在,在 /etc/inittab 檔案中,getty 應該在被殺死後重新生成(重啟)。它在呼叫 getty 的行上說明了這一點。
示例:來自 /etc/inittab 的 getty 條目 S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
但是,如果 bash shell(或 login 程序)被殺死,getty 就會重新生成(重啟)。為什麼?好吧,login 程序和 bash 都是 getty 的替代品,並繼承了其前任建立的訊號連線。實際上,如果你觀察細節,你將注意到替換程序將具有與原始程序相同的程序 ID。因此,bash 在某種程度上是偽裝成 getty,具有相同的程序 ID 號。如果 bash 被殺死,就像 getty 被殺死一樣(即使 getty 已經不再執行)。這會導致 getty 重新生成。
當一個人登出時,該序列埠上的所有程序都會被殺死,包括 bash shell。如果調變解調器的 DCD 電壓下降傳送了一個掛起訊號到序列埠(如果已啟用),這也可能發生。登出或 DCD 下降都會導致 getty 重新生成。可以透過手動殺死 bash(或 login)來強制 getty 重新生成,方法是在“top”中按 k 鍵等,或使用“kill”命令。你可能需要使用訊號 9(它不能被忽略)來殺死它。
說明的迴圈
init - spawns -> getty -- starts -> login - starts --> shell
\ /
\---------------<< returns control to <<------------/
你可以透過名稱開頭的減號來識別登入 shell。
示例:ps 輸出(已過濾)walter 32255 0.0 0.7 4012 1772 pts/36 Ss 14:53 0:00 -bash
mgetty 是作為 uugetty 的替代品編寫的,uugetty 在 mgetty 出現之前就已存在很長時間。兩者都用於調變解調器,但 mgetty 更好(除非你已經承諾使用 uugetty)。Mgetty 也可用於直接連線的終端。除了允許撥號登入外,mgetty 還提供傳真支援和自動 PPP 檢測。當 mgetty 正在等待傳入電話呼叫時,它允許撥號出去。有一個名為 vgetty 的輔助程式,它處理某些調變解調器的語音郵件。mgetty 文件很好(除了語音郵件)。要自動啟動 PPP,必須編輯 /etc/mgetty/login.conf 以啟用“AutoPPP”你可以在 http://www.leo.org/~doering/mgetty/ 和 http://alpha.greenie.net/mgetty/ 找到有關 mgetty 的最新資訊。
getty_ps 包含兩個程式:getty 用於控制檯和終端裝置,uugetty 用於調變解調器。格雷格·漢金斯(Serial-HOWTO 的前作者)使用 uugetty,因此他關於 uugetty 的著作包含在這裡。請參閱 Uugetty。
這是 uugetty 的簡化版本。它是在 Vern Hoxie 完全對 getty_ps 和 uugetty 所需的複雜支援檔案感到困惑後編寫的。它是 Vern Hoxie 透過 ftp 從 scicom.alphacdc.com/pub/linux 提供的序列埠實用程式和資訊的集合的一部分。該集合的名稱是 serial_suite.tgz。
本小節已經很長時間了,因為作者嘗試使用 agetty 進行撥號連線。agetty 看似很簡單,因為沒有初始化檔案。但是當我嘗試使用它時,它會在沒有 CD 訊號的情況下開啟序列埠。然後,它在建立連線之前將登入提示符和 /etc/issue 檔案傳送到調變解調器,處於 AT 命令狀態。調變解調器認為所有這些都是 AT 命令,如果它包含任何“at”字串(偶然),它很可能會對你的調變解調器配置檔案產生不利影響。回顯戰爭可能會開始,其中 getty 和調變解調器會來回不斷地傳送相同的字串。如果你遇到這種情況,你可能會看到“重新生成得太快”錯誤訊息。為了防止這種情況,你需要停用調變解調器的所有回顯和結果程式碼(E0 和 Q1)。此外,使用 agetty 的 -i 選項來防止傳送任何 /etc/issue 檔案。
如果你在調變解調器埠啟動 getty,幾秒鐘後發現該埠執行的是登入程序而不是 getty,這意味著一個虛假的使用者名稱已從調變解調器傳送到 agetty。為了防止這種情況發生,我必須在調變解調器中儲存我的撥入配置檔案,以便它在開機時生效。另一個儲存的配置檔案用於撥出。然後,任何使用調變解調器的撥出程式必須在其初始化字串中使用 Z、Z0 或 Z1 來初始化調變解調器進行撥出(透過載入儲存的撥出配置檔案)。如果配置檔案 1 用於撥入,則使用 Z1 載入它,等等。如果你想稍後監聽撥入,則需要將調變解調器重置為撥入配置檔案。並非所有撥出程式都可以在退出時執行此重置操作。
因此,雖然 agetty 可以在你正確設定調變解調器硬體中的撥入配置檔案的情況下正常工作,但它可能最適合虛擬控制檯或終端而不是調變解調器。如果 agetty 正在執行用於撥入,則沒有簡單的方法撥出。當有人第一次撥入 agetty 時,他們應該按下回車鍵以獲取登入提示符。Debian 發行版中的 agetty 只是名為 getty。
關於 mingetty 和 fbgetty
[edit | edit source]mingetty 是一個小型 getty,只能用於顯示器(通常的控制檯),因此你不能將其與調變解調器一起用於撥入。fbgetty 與上述相同,但支援幀緩衝器。
基本網路配置
為 PPP 配置 PAP/CHAP 身份驗證
如果你要連線的伺服器需要 PAP 或 CHAP 身份驗證,請編輯你的 PPP 選項檔案並新增以下行
# # force pppd to use your ISP user name as your 'host name' during the authentication process name <your ISP user name> # you need to edit this line # # If you are running a PPP *server* and need to force PAP or CHAP uncomment the appropriate # one of the following lines. Do NOT use these is you are a client connecting to a PPP server (even if # it uses PAP or CHAP) as this tells the SERVER to authenticate itself to your machine (which # almost certainly can't do - and the link will fail). #+chap #+pap # # If you are using ENCRYPTED secrets in the /etc/ppp/pap-secrets file, then uncomment the # following line. Note: this is NOT the same as using MS encrypted passwords as can be # set up in MS RAS on Windows NT. #+papcrypt
基本網路配置 使用 MSCHAP
Microsoft Windows NT RAS 可以設定為使用 CHAP(挑戰/握手身份驗證協議)的變體。在你的 PPP 原始碼包中,你會找到一個名為 README.MSCHAP80 的檔案,其中討論了這一點。
你可以透過為 pppd 啟用除錯來確定伺服器是否正在使用此協議請求身份驗證。如果伺服器請求 MS CHAP 身份驗證,你會看到類似於以下的行
rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]
這裡的重要資訊是 auth chap 80。為了使用 MS CHAP,你需要重新編譯 pppd 以支援它。有關如何編譯和使用此變體的說明,請參閱 PPP 原始檔中的 README.MSCHAP80 檔案中的說明。
請注意,目前此程式碼只支援連線到 MS Windows NT 伺服器的 Linux PPP 客戶端。它不支援設定使用 MSCHAP80 身份驗證的 Linux PPP 伺服器。
PAP/CHAP 金鑰檔案
[edit | edit source]如果你使用 pap 或 chap 身份驗證,則還需要建立金鑰檔案。它們是
/etc/ppp/pap-secrets /etc/ppp/chap-secrets
它們必須由使用者 root 擁有,root 組擁有,並且具有 740 的檔案許可權以確保安全。關於 PAP 和 CHAP 的第一個要點是它們旨在對計算機系統進行身份驗證,而不是使用者。什麼?有什麼區別?我聽到你在問。好吧,一旦你的計算機與伺服器建立了 PPP 連線,你係統上的任何使用者都可以使用該連線 - 不僅僅是你。這就是為什麼你可以使用 PPP 設定連線兩個 LAN(區域網)的 WAN(廣域網)鏈路。
PAP 可以(並且對於 CHAP 來說確實需要)雙向身份驗證 - 這意味著每個計算機都需要有效的使用者名稱和金鑰來驗證另一臺參與的計算機。但是,這不是大多數提供撥號 PPP PAP 身份驗證連線的 PPP 伺服器的操作方式。
話雖如此,你的 ISP 可能已經給你提供了使用者名稱和密碼,允許你連線到他們的系統,然後連線到網際網路。你的 ISP 並不關心你計算機的名稱,因此你可能需要使用你 ISP 提供的使用者名稱作為你計算機的名稱。這可以透過使用 name 使用者名稱選項來完成 pppd。因此,如果你要使用 ISP 提供的使用者名稱,請在你的 /etc/ppp/options 檔案中新增以下行
name your_user name_at_your_ISP
到你的 /etc/ppp/options 檔案。從技術上講,你應該真正使用 name our_user name_at_your_ISP 用於 PAP,但 pppd 足夠智慧,可以在需要使用 PAP 時將 name 解釋為 user。使用 name 選項的優點是它也適用於 CHAP。
由於 PAP 用於驗證計算機,因此從技術上講,你還需要指定遠端計算機名稱。但是,由於大多數人只有一個 ISP,因此你可以在金鑰檔案中使用萬用字元 (*) 作為遠端主機名。還值得注意的是,許多 ISP 運營多個調變解調器庫,這些庫連線到不同的終端伺服器 - 每個伺服器都有不同的名稱,但可以透過單個(旋轉)撥號號碼訪問。因此,在某些情況下,很難提前知道遠端計算機的名稱,因為這取決於你連線到的終端伺服器!基本網路配置
PAP 金鑰檔案
[edit | edit source]/etc/ppp/pap-secrets 檔案看起來像
# Secrets for authentication using PAP # client server secret acceptable_local_IP_addresses
這四個欄位用空格分隔,最後一個欄位可以為空(這就是你想要為從 ISP 獲取動態和可能靜態 IP 分配所做的)。假設你的 ISP 給了你一個使用者名稱 fred 和密碼 flintstone,你將在 /etc/ppp/options[.ttySx] 中設定 name fred 選項,並按如下方式設定你的 /etc/ppp/pap-secrets 檔案
# Secrets for authentication using PAP # client server secret acceptable local IP addresses fred * flintstone
這表示對於本地機器名稱 fred(我們已經告訴 pppd 使用它,即使它不是我們的本地機器名稱)以及任何伺服器,都使用密碼(金鑰) flintstone。請注意,我們不需要指定本地 IP 地址,除非我們必須強制使用特定的本地靜態 IP 地址。即使你嘗試這樣做,它也不太可能起作用,因為大多數 PPP 伺服器(出於安全原因)不允許遠端系統設定他們要獲得的 IP 號碼。
CHAP 金鑰檔案
[edit | edit source]這要求你擁有相互身份驗證方法 - 也就是說,你必須允許你的機器驗證遠端伺服器,並且遠端伺服器驗證你的機器。
因此,如果你的機器是 fred,遠端伺服器是 barney,你的機器將設定 name fred remotename barney,而遠端機器將在他們各自的 /etc/ppp/options.ttySx 檔案中設定 name barney remotename fred。
fred 的 /etc/chap-secrets 檔案看起來像
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses fred barney flintstone barney fred wilma
對於 barney 來說
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses barney fred flintstone fred barney wilma
特別注意,兩臺機器都必須有雙向身份驗證的條目。這允許本地機器驗證自己對遠端伺服器,以及遠端伺服器驗證自己對本地機器。
處理多個 PAP 身份驗證連線
[edit | edit source]一些使用者有多個伺服器,他們使用 PAP 連線到這些伺服器。只要你在要連線的每臺機器上都有不同的使用者名稱,這就不成問題。
但是,許多使用者在他們連線到的兩臺(或更多臺 - 甚至所有)系統上都有相同的使用者名稱。這就會在正確選擇 /etc/ppp/pap-secrets 中的適當行時出現問題。
正如你所料,PPP 提供了一種克服此問題的機制。PPP 允許你使用 remotename 選項為連線的遠端(伺服器)端設定“假定名稱”。
假設你使用使用者名稱 fred 連線到兩個 PPP 伺服器。你將在你的 /etc/ppp/pap-secrets 中設定以下內容
fred pppserver1 barney fred pppserver2 wilma
現在,要連線到 pppserver1,你將在你的 ppp-options 中使用 name fred remotename pppserver1,而對於 pppserver2,則使用 name fred remotename pppserver2。
由於你可以使用 file filename 選項選擇要與 pppd 一起使用的 ppp 選項檔案,因此你可以設定一個指令碼來連線到你的每個 PPP 伺服器,正確選擇要使用的選項檔案,從而選擇正確的 remotename 選項。
關鍵術語、檔案和實用程式
/sbin/route /sbin/ifconfig PAP, CHAP, PPP /etc/*
練習
[edit | edit source]