UNIX® 命令行是一種WYTIWYG(即所輸即所得)的接口。UNIX 提供了大量的命令,使用這些命令,您可以對內核和用戶空間中各種可用的資源進行操作。您需要對 CPU 的使用情況進行監視嗎?可以嘗試使用 top 或 ps。您需要刪除所有以 .bak 結尾的文件嗎?可以嘗試使用 rm *.bak。您需要獲得關於一個新的命令的幫助嗎?可以運行 man。
但是,當您所需要的資源位於廣域網 (WAN) 和全球 Internet 中的遠程系統時,那又應該如何處理呢?這裡引用 The Hitchhiker's Guide to the Galaxy 中的一句話,“您不必驚慌失措”。通過 UNIX 命令行可以很容易地下載和上傳文件、連接到遠程計算機並詢問遙遠的服務器和網絡的狀態。請做好准備:讓我們開始一次“太陽系外”的奇妙旅行。
在本地進行工作,將信息傳輸到全球
在本系列的第 1 部分和第 2 部分中,您了解了使用 UNIX 命令行可以完成各種各樣的工作。只需要輸入相應的內容,包括管道 (|) 或重定向,您就可以創建即興的數據處理器,從而實現比將其中的這些部分簡單地加在一起更強大的功能。
盡管日常使用的某些資源很可能位於本地,即位於您的工作站中,但是相當數量的、並且越來越多的資產(如文件、電子郵件消息和工具)可能存儲在遠程系統中,即位於連接到您的 WAN 或者 Internet 的計算機中。Web 浏覽器提供了對這些資源的通用訪問方式,但是有一點需要注意:指向-點擊很快會變得令人厭倦,甚至很麻煩,特別是當您必須對大量的條目進行檢索時。而且,如果您希望使用腳本 來完成重復性的或容易出錯的任務時(從本質上說,是進行捕獲和重放),窗口浏覽器並不是一種好的工具。
與 ls、cp、mail、uptime、du manage 和 query local resources 一樣,UNIX 還提供了一套用於訪問遠程資源的命令行工具。本文將向您介紹其中的一些工具,包括一個有用的技巧,它可以簡化對遠程系統的訪問並保護您的身份驗證憑據。具體來說,您將了解 wget、curl 和安全 Shell (ssh)。wget 和 curl 工具可以用來傳輸文件,而使用 ssh,您可以安全地登錄到遠程系統中,快速地和輕松地傳輸文件。
Telnet(和其他工具)存在的問題
如果您的系統中運行了 rsh(或者其變種——rcp、rexec、rlogin 或 Irdist)或 telnet,那麼請立即禁用並刪除這些命令以及相關的守護進程。另外,如果您不允許使用匿名文件傳輸協議 (FTP),請同時禁用 FTP 軟件。
rsh 和 FTP 的漏洞有關 rsh 和 FTP 中可能存在的漏洞的更詳細的信息和說明,請參閱“Security Vulnerability between FTP and Berkeley Rsh/Rlogin Protocols”和“Stupid, Stupid Protocols:Telnet, FTP, rsh/rcp/rlogin”。
盡管 rsh 和 telnet 在 UNIX 中使用了很長的時間,但是攻擊者可以輕松地利用這兩種實用工具的其中之一來危害您的系統。當發現該軟件正在運行時,您或您的系統管理員應該停止並刪除它,並使用 ssh 來代替這些包。
對於特權 FTP 訪問,可以使用 sftp。將 rdist 替換為更高級的 rsync。或者,如果您必須提供匿名 FTP(或通過 HTTP 進行下載),請確保使用防火牆硬件和軟件將所有可以公開訪問的計算機與敏感的內部服務器隔離。
但是首先,讓我們來討論一下密碼所帶來的討厭的問題。
“您不需要討厭的密碼!”
通常,對大多數計算機和服務的訪問都受到保護。在有些情況下,進行身份驗證(從而獲得訪問該系統的權限)可能需要復雜的質詢-響應交換、安全套接字層 (SSL) 證書、甚至生物測定掃描。然而在一般情況下,通過密碼就可以獲得訪問權限。與您的個人識別號碼 (PIN) 相同,您的密碼也是保密的,如果您選擇了合適的密碼,那麼其他的人將很難猜到它。將您的用戶名和強密碼組合在一起,這樣可以提供足夠的安全性加強。
當然,強密碼可能難以記住,並且當您需要收集和記住另一個 8 字符的密鑰(數字、標點符號及其組合)時,情況變得更復雜。反復地輸入同一個密碼會讓人感到討厭,更糟糕的是,它極大地阻礙了自動化的實現。
正因為認識到這些阻礙的存在,所以許多命令行實用工具都允許您將用戶名和密碼作為命令行參數。例如,您可以使用下面的命令登錄到一個 FTP 站點,而無需進行人工干預:
ftp ftp://joe:[email protected]
然而,使用這種方法可能會將您的憑據洩漏給共享該計算機的其他用戶。(可以嘗試使用 ps -Aeww,例如,查看完整的命令行和系統中每個進程的環境。)
為了提供與命令行相同的簡潔性,而又不會帶來危險,許多程序可以從一個名為 .netrc(讀做 net-r-c)的文件中讀取您的憑據,該文件通常位於 ~/.netrc 目錄中。您的 .netrc 文件必須僅具有所有者讀寫模式(即模式 0600 或者 -rw-------),並且該文件中的每個條目都必須遵守下面這種簡單的語法格式:
machine ftp.example.com login zaphod password I()Trillian! machine www.magazine.com login abner password MmG8y*tr default login anonymous password [email protected]
前面兩行提供了 machine 關鍵字和該計算機的域名、login 關鍵字和您在該計算機上的登錄名、password 關鍵字以及緊跟其後的登錄密碼。最後一行中的憑據為任何沒有專門指定的系統提供了缺省值。default 行必須是您的 .netrc 文件中的最後一行。(有關 .netrc 文件完整的配置選項,可以輸入 man 5 netrc 以查看 .netrc 的 man 頁面。)
顯然,如果文件中包含任何標識數據,那麼請確保它僅具有用戶讀寫模式(模式 600)或用戶只讀模式(模式 400),以防止意外地覆蓋或刪除該文件。您可能還希望使用模式 700 來保護您的 home 目錄。
現在,每當您啟動一個支持 .netrc 的應用程序(包括接下來將要討論的那些應用程序)時,會自動地將登錄名和密碼傳遞給所需的服務,而無需通過鍵盤進行輸入。通常,您可以使用 -n 選項禁用這種自動登錄 特性。
傳遞的過程
除了用於浏覽 Web 頁面的 HTTP 和基於 SSL 的 HTTP (HTTPS) 外,FTP 是最常用的 Internet 應用程序協議之一。通過 FTP,客戶端可以連接到服務器、獲取目錄和文件的列表、下載文件(即,從服務器請求一個文件)或上傳文件(即,向服務器發送一個文件,以進行持久保存)。ftp://ftp.example.com/path/to/anotherfile.zip 和 ftp://user:[email protected]/path/to/file.zip URL 格式表示,使用 FTP 協議連接到 ftp.example.com 並下載 /path/to/anotherfile.zip 文件。後面的這個 URL 簡單地為登錄添加了相應的憑據。
在大多數桌面計算機中,這兩種 URL 將啟動浏覽器或缺省的 FTP 應用程序來下載指定的文件。然而,在 wget 命令行實用工具中也可以使用相同的 URL,它是一種用於通過 HTTP、HTTPS 和 FTP 進行文件下載的健壯的實用工具。它支持 .netrc 文件,並且無需進行交互,對於實現自動化來說,使用它非常合適。如果您的系統中沒有 wget,您可以從 GNU Software Foundation 下載其源代碼。它包含幾個簡單的命令,適用於所有的 UNIX 變種,您可以將這個實用工具放到您個人的 bin 目錄或者某個中央目錄。
假設已經有了 .netrc 文件,讓我們來研究一些示例,看看 wget 究竟可以完成哪些工作。(在下面的示例中,提供了相應的行號以供參考,您不需要輸入這些數值。)清單 1 顯示了如何在命令行中輕松地使用 wget 來下載文件。