- 論壇徽章:
- 0
|
我們將介紹 TCP/IP 和以太網(wǎng) Linux 聯(lián)網(wǎng)的基本原理,說明如何使用 inetd 和 xinetd,提供保護 Linux 系統(tǒng)的重要技巧,還將說明如何設(shè)置和使用 Linux 打印服務(wù)器。
一。關(guān)于本教程
本教程涉及哪些內(nèi)容?
在本教程中,我們將介紹 TCP/IP 和以太網(wǎng) Linux 聯(lián)網(wǎng)的基本原理,說明如何使用 inetd 和 xinetd 超級服務(wù)器,提供保護 Linux 系統(tǒng)的重要技巧,還將說明如何設(shè)置和使用 Linux 打印服務(wù)器。在學習完本系列教程(共 8 篇;本篇是第 7 部分)后,您將具備成為 Linux 系統(tǒng)管理員所必需的知識,而如果您選擇參加 LPI 考試,您將有能力取得 Linux Professional Institute 頒發(fā)的 LPIC Level 1 證書(101 考試和 102 考試)。
LPI 徽標是
Linux Professional Institute
的商標。
我應(yīng)該學習這一教程嗎?
本教程是那些想學習或提高基本的 Linux 聯(lián)網(wǎng)和安全性技能的讀者的理想學習資料。而且本教程特別適合那些將在 Linux 服務(wù)器或臺式機上設(shè)置應(yīng)用程序的讀者。對于許多讀者,文中的許多問題可能是初次遇到,但經(jīng)驗較豐富的 Linux 用戶會發(fā)現(xiàn)這個教程是鞏固重要的 Linux 系統(tǒng)管理技能的極佳途徑。
如果您是 Linux 新手,我們建議您在繼續(xù)之前先學完 LPI 證書 101 考試和 102 考試準備系列前面的教程,包括:
關(guān)于作者
有關(guān)本教程內(nèi)容中的技術(shù)問題,請與作者聯(lián)系:
Daniel Robbins 居住在美國新墨西哥州阿爾伯克基(Albuquerque),他是 Gentoo Technologies, Inc. 的總裁兼 CEO,也是
Gentoo Linux
(PC 上的高級 Linux)和 Portage 系統(tǒng)(Linux 的下一代移植系統(tǒng))的創(chuàng)建者。他還是 Macmillan 出版的 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed 等書的撰稿作者。Daniel 自小學二年級起就和計算機結(jié)下不解之緣,那時他第一次接觸 Logo 編程語言,并沉溺于 Pac-Man 游戲中。這也許就是為什么至今他仍擔任 SONY Electronic Publishing/Psygnosis 首席圖形設(shè)計師的原因所在。Daniel 喜歡與妻子 Mary 和他們的女兒 Hadassah 一起共度時光。
Chris Houser 在他的許多朋友中以“欺騙專家”而聞名,自 1994 年加入印第安納州泰勒大學計算機科學網(wǎng)絡(luò)管理團隊以來,就一直是 UNIX 的擁護者,在那里,他獲得了計算機科學和數(shù)學學士學位。從那以后,他從事過 Web 應(yīng)用程序編程、用戶界面設(shè)計、專業(yè)視頻軟件支持等工作,目前他在
Compaq
從事 Tru64 UNIX 設(shè)備驅(qū)動程序的編程工作。他還參與了多個自由軟件項目,最近的項目是
Gentoo Linux
。他和他的妻子以及他們的兩只貓一起住在美國新罕布什爾州。
Aron Griffis 畢業(yè)于泰勒大學,在該校獲得計算機學士學位并被授予“理想 UNIX 公社未來的創(chuàng)立者”榮譽稱號。懷著這一目標,Aron 受雇于
Compaq
,從事編寫 Tru64 UNIX 網(wǎng)絡(luò)驅(qū)動程序的工作,他的業(yè)余時間花在對鋼琴調(diào)音或開發(fā)
Gentoo Linux
上。他和妻子 Amy(也是 UNIX 工程師)住在美國新罕布什爾州納舒尼(Nashua)。
二。TCP/IP聯(lián)網(wǎng)
簡介
設(shè)置一個由大量 Linux 機器組成的基于以太網(wǎng)的局域網(wǎng)(LAN)是常見且相對簡單的任務(wù)。通常,需要做的就是確保 Linux 系統(tǒng)都安裝了某種以太網(wǎng)卡。然后,使用以太網(wǎng)電纜將機器連接到中央以太網(wǎng)集線器或交換機。若所有系統(tǒng)都把對相應(yīng)的以太網(wǎng)卡的支持(以及 TCP/IP 支持)編譯到內(nèi)核中,則就技術(shù)而言,這些系統(tǒng)已經(jīng)具備了在新的以太網(wǎng) LAN 上通信的一切條件。
僅有以太網(wǎng)還不太夠
盡管有了讓 LAN 工作所需的所有硬件和內(nèi)核支持,仍不會有多大用處。絕大多數(shù) Linux 應(yīng)用程序與服務(wù)并不使用原始的以太網(wǎng)信息包或幀交換信息。相反,它們使用稱為 TCP/IP 的高級協(xié)議。毫無疑問,您一定聽說過 TCP/IP ― 它是一組大體上形成因特網(wǎng)基礎(chǔ)的協(xié)議(因此得名:傳輸控制協(xié)議/網(wǎng)際協(xié)議)。
解決方案:以太網(wǎng)上的 TCP/IP
于是,解決方案就是配置新的以太網(wǎng) LAN 以使它可以交換 TCP/IP 流量。要理解解決方案是如何工作的,首先需要知道一點有關(guān)以太網(wǎng)的知識。特別地,以太網(wǎng) LAN 上每臺機器中的以太網(wǎng)卡都有唯一的硬件地址。網(wǎng)卡在生產(chǎn)時就被分配了硬件地址,硬件地址看起來與下面相似:
00:01:02:CB:57:3CIP 地址簡介
這些硬件地址被用做以太網(wǎng) LAN 上單個系統(tǒng)的唯一地址。使用硬件地址的話,一臺機器可以做一些事情,例如,可以向另一臺機器發(fā)送以太網(wǎng)幀。這一方法存在的問題是基于 TCP/IP 的通信使用另一尋址方案,即稱為 IP 地址的尋址方案。IP 地址看起來如下:
192.168.1.1將 IP 地址與以太網(wǎng)接口關(guān)聯(lián) 為了使以太網(wǎng) LAN 使用 TCP/IP,需要將每臺機器的以太網(wǎng)卡(因而也就是它的硬件地址)與一個 IP 地址關(guān)聯(lián)。幸運的是,在 Linux 下有一個將 IP 地址與以太網(wǎng)接口關(guān)聯(lián)的簡便方法。事實上,如果當前正在通過 Linux 使用以太網(wǎng),那么分發(fā)版的系統(tǒng)初始化腳本中很可能有類似如下的命令:
ifconfig eth0 192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0
以上命令中,ifconfig 命令被用來關(guān)聯(lián) eth0(也就是 eth0 的硬件地址)和 192.168.1.1 IP 地址。另外,還指定了各種其它與 IP 相關(guān)的信息,包括廣播地址(192.168.1.255)和網(wǎng)絡(luò)掩碼(255.255.255.0)。當命令完成時,eth0 接口將被啟用并具有關(guān)聯(lián)的 IP 地址。使用 ifconfig -a 可以通過輸入 ifconfig -a 查看當前正在運行的所有網(wǎng)絡(luò)設(shè)備,命令執(zhí)行結(jié)果的輸出與下面相似:
eth0 Link encap:Ethernet HWaddr 00:01:02:CB:57:3C
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:5 Base address:0xc400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1065 errors:0 dropped:0 overruns:0 frame:0
TX packets:1065 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:262542 (256.3 Kb) TX bytes:262542 (256.3 Kb)
從上面的輸出可以看到一個已配置的 eth0 接口和 lo(localhost)接口。lo 接口是特殊的虛擬接口,它經(jīng)過配置以使您在即便沒有網(wǎng)絡(luò)的情況下也可以在本地運行 TCP/IP 應(yīng)用程序。TCP/IP 在運行了!當所有網(wǎng)絡(luò)接口都設(shè)置好并與相應(yīng)的 IP 地址關(guān)聯(lián)后,以太網(wǎng)網(wǎng)絡(luò)也可以用來傳送 TCP/IP 流量。LAN 上的系統(tǒng)現(xiàn)在可以用 IP 地址相互尋址,象 ping、telnet 和 ssh 這樣的命令將在機器間正常工作。名稱解析限制 然而,盡管能夠輸入 ping 192.168.1.1 這樣的命令,但還不能通過名稱引用機器。例如,不能輸入 ping mybox。要做到這一點,需要在每臺 Linux 機器上設(shè)置名為 /etc/hosts 的文件。在該文件中,要指定一個 IP 地址,以及與每個 IP 地址關(guān)聯(lián)的名稱(或多個名稱)。因此,如果我有帶三個節(jié)點的網(wǎng)絡(luò),那么我的 /etc/hosts 文件看起來可能與下面相似:
127.0.0.1 localhost
192.168.1.1 mybox mybox.gentoo.org
192.168.1.2 testbox testbox.gentoo.org
192.168.1.3 mailbox mailbox.gentoo.org
請注意:/etc/hosts 包含“l(fā)ocalhost”到 127.0.0.1 IP 地址的強制映射。我還指定了 LAN 上所有系統(tǒng)的主機名稱,包括短名稱(“mybox”)和全限定名稱(“mybox.gentoo.org”)。將這個 /etc/hosts 文件復制到每個系統(tǒng)后,我就能夠通過名稱而不僅是 IP 地址來引用系統(tǒng)了。ping mybox 現(xiàn)在將可以執(zhí)行了!使用 DNS 雖然這種方法可用于小型 LAN,但不便于在擁有許多系統(tǒng)的大型 LAN 上使用。對于這樣的配置,通常最好是將所有的 IP 至主機名映射信息存儲在一臺機器上,然后在這臺機器上設(shè)置所謂的“DNS 服務(wù)器”(域名服務(wù)服務(wù)器)。然后,可以配置每臺機器來聯(lián)系這臺特別的機器以接收最新的 IP 至名稱映射。要做到這一點,可以在每臺機器上創(chuàng)建一個與下面相似的 /etc/resolv.conf 文件:
domain gentoo.org
nameserver 192.168.1.1
nameserver 192.168.1.2
在上面的 /etc/resolv.conf 中,我告訴系統(tǒng)所有非限定主機名(如與“testbox.gentoo.org”相對的“testbox”)都應(yīng)視為本地主機名。我還指定一臺運行在 192.168.1.1 上的 DNS 服務(wù)器,以及一臺運行在 192.168.1.2 上的備份服務(wù)器。實際上,幾乎所有與網(wǎng)絡(luò)連接的 Linux PC 都已經(jīng)在其 resolv.conf 文件中指定了名稱服務(wù)器,即使它們不在 LAN 上,也是如此。這是因為它們在其因特網(wǎng)服務(wù)供應(yīng)商處被配置為使用 DNS 服務(wù)器,以便將主機名映射為 IP 地址(這樣,那個系統(tǒng)上的用戶就可以瀏覽 Web 并訪問象 ibm.com 這樣的著名站點,而無需通過 IP 地址來引用它們。連接至外部世界 說到與因特網(wǎng)連接,該如何配置我們簡單的 3 系統(tǒng) LAN 以使它與“外部世界”的系統(tǒng)連接呢?通常,我們會購買某種路由器將我們的以太網(wǎng)網(wǎng)絡(luò)與 DSL 或有線電視調(diào)制解調(diào)器、T1 或電話線連接?梢杂 IP 地址配置這個路由器以使它能夠與我們 LAN 上的系統(tǒng)通信。我們可以依次將 LAN 上每個系統(tǒng)都配置為將這個路由器作為其缺省路由或網(wǎng)關(guān)使用。這樣做的意義在于:對不在我們 LAN 上的系統(tǒng)尋址的任何網(wǎng)絡(luò)數(shù)據(jù)將被路由至我們的路由器,路由器再負責將數(shù)據(jù)轉(zhuǎn)發(fā)至我們 LAN 之外的遠程系統(tǒng)。通常,分發(fā)版的系統(tǒng)初始化腳本會為您處理缺省路由的設(shè)置。這些腳本執(zhí)行該操作所用的命令看起來可能與下面相似:
route add -net default gw 192.168.1.80 netmask 0.0.0.0 metric 1
在上述 route 命令中,缺省路由設(shè)置為 192.168.1.80 ― 路由器的 IP 地址。要查看系統(tǒng)上所有配置的路由,可以輸入 route -n。目標為“0.0.0.0”的路由是缺省路由。家庭作業(yè)
迄今為止,我們向您非常簡要地介紹了 Linux 聯(lián)網(wǎng)的概念。遺憾的是,我們根本沒有足夠的篇幅來介紹所有您需要知道的事情,例如如何選擇適當?shù)?IP 地址、網(wǎng)絡(luò)掩碼、廣播地址等等。事實上,為了準備 LPI Level 102 考試,您需要學習相當多的知識。
幸運的是,有關(guān) Linux 聯(lián)網(wǎng)的主題是記載得最全面的有關(guān) Linux 的主題之一。特別地,我們推薦閱讀
Linux Network Administrators Guide
(可以從
Linuxdoc.org 的“Guides”部分獲得
),尤其是從第 2 章到第 6 章。與我們對 Linux 聯(lián)網(wǎng)難度適中的介紹相結(jié)合,Linux Network Administrators Guide 應(yīng)該能立刻讓您熟悉這一主題。
三。英特網(wǎng)服務(wù)
inetd 簡介
單個 Linux 系統(tǒng)可以提供數(shù)十、甚至數(shù)百個網(wǎng)絡(luò)服務(wù)。例如,使用 telnet 程序,您可以訪問遠程系統(tǒng)上的 telnet 服務(wù)。同樣地,使用 ftp 程序,您可與遠程系統(tǒng)上的 ftp 服務(wù)連接。
為了提供這些服務(wù),遠程系統(tǒng)運行每個服務(wù)器的實例(例如 /usr/sbin/in.telnetd 和 /usr/sbin/in.ftpd)以接受連接或者運行 inetd。inetd 程序接受每個進入的連接,然后根據(jù)其連接的類型啟動處理該連接的適當?shù)姆⻊?wù)。出于這個原因,inetd 也被稱為“因特網(wǎng)超級服務(wù)器”。
在典型的安裝了 Linux 的系統(tǒng)上,inetd 處理大多數(shù)進入的連接。只有少數(shù)程序(如 sshd 和 lpd)處理它們自己的網(wǎng)絡(luò)通信而無需依靠 inetd 接受進入的連接。
配置 inetd:/etc/services
上頁提到 inetd 根據(jù)類型對進入的連接進行分類。每個進入的連接都在 TCP/IP 頭中包含一些標識字段。我們最感興趣的字段是源地址、目標地址協(xié)議和端口號。進入連接由 inetd 根據(jù)端口號和協(xié)議(通常是 TCP 或 UDP,請查看 /etc/protocols 以獲得完整的 inetd 可以提供的服務(wù)列表)進行分類。
每行都有如下格式:
service-name port-number/protocol-name aliases # comment
例如,讓我們研究最上面的幾項:
# grep ^[^#] /etc/services | head -5
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
通常,/etc/services 已經(jīng)包含所有有用的服務(wù)名稱和端口。如果您希望添加自己的端口,可以查詢
已分配端口號
列表。
配置 inetd;/etc/inetd.conf
inetd 的實際配置是在 /etc/inetd.conf 中完成的,配置格式如下:
service-name socket-type protocol wait-flag user server-program
因為服務(wù)是在 inetd.conf 中由服務(wù)名稱而不是端口指定的,所以,為了符合由 inetd 處理的條件,必須將服務(wù)列在 /etc/services 中。
讓我們看看 /etc/inetd.conf 一些常見的行。例如,telnet 和 ftp 服務(wù):
# grep ^telnet /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/in.telnetd
# grep ^ftp /etc/inetd.conf
ftp stream tcp nowait root /usr/sbin/in.ftpd -l -a
對這兩個服務(wù)的配置為:使用 TCP 協(xié)議,并以 root 用戶的身份運行服務(wù)器(in.telnetd 或 in.ftpd)。有關(guān) /etc/inetd.conf 中字段的完整說明,請參閱 inetd(8) 手冊頁。
禁用服務(wù)
在 inetd 中禁用服務(wù)很簡單:只要在 /etc/inetd.conf 注釋掉該服務(wù)所在的行即可。您可能不希望完全除去該行,以便以后需要時可以引用它。例如,有些系統(tǒng)管理員出于安全性的原因?qū)幵附?telnet(因為連接完全是明文):
# vi /etc/inetd.conf
[comment out undesired line]
# grep ^.telnet /etc/inetd.conf
#telnet stream tcp nowait root /usr/sbin/in.telnetd
使用初始腳本停止/啟動 inetd
我們在上頁對 /etc/inetd.conf 所做的更改將在重新啟動 inetd 程序后才生效。大多數(shù)分發(fā)版在 /etc/init.d 或 /etc/rc.d/init.d 中有初始腳本:
# /etc/rc.d/init.d/inet stop
Stopping INET services: [ OK ]
# /etc/rc.d/init.d/inet start
Starting INET services: [ OK ]
事實上,通?梢允褂谩皉estart”作為快捷方式:
# /etc/rc.d/init.d/inet restart
Stopping INET services: [ OK ]
Starting INET services: [ OK ]
用手工方式停止/啟動 inetd
如果上頁中的助手腳本不起作用,老式方法甚至更簡單?梢允褂 killall 命令停止 inetd:
# killall inetd
可以在命令行調(diào)用 inetd 來簡單地再次啟動它。它會自動在后臺運行:
# /usr/sbin/inetd
有一個快捷方式無需停止 inetd 就可命令它重新讀取配置文件:只要向它發(fā)送 HUP 信號:
# killall -HUP inetd
此刻應(yīng)該不能 telnet 或 ftp 到這個系統(tǒng),因為 telnet 和 ftp 被禁用。嘗試用 telnet localhost 進行檢查。如果需要 telnet 或 ftp 訪問,所需做的全部就是重新啟用它!
以下是我所遇到的情況:
# telnet localhost
telnet: Unable to connect to remote host: Connection refused
TCP 封裝器簡介
tcp_wrappers 包提供了一個名為 tcpd 的很小的守護程序,該程序由 inetd 而不是實際的服務(wù)守護程序調(diào)用。tcpd 程序?qū)⒚總進入連接的源地址編入日志,并可以過濾它們而只允許來自可信系統(tǒng)的連接。
要使用 tcpd,可以按下列方式將它插入到 inetd 中:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
用 TCP 封裝器進行日志記錄
缺省情況下,連接不受限制但會被日志記錄下來。例如,我們可以重新啟動 inetd 以使在前頁做的更改生效。然后一些快速調(diào)查應(yīng)該顯示已記錄的連接:
# telnet localhost
login: (press to abort)
# tail -1 /var/log/secure
Feb 12 23:33:05 firewall in.telnetd[440]: connect from 127.0.0.1
tcpd 將記錄 telnet 連接嘗試,因此看起來有些東西在工作了。因為 tcpd 提供一致的連接日志記錄服務(wù),這就免除了單個服務(wù)守護程序每次自己將連接編入日志的需要。事實上,在接受連接的工作方面,它與 inetd 相似,因為那使每個守護程序不需要接受自己的連接。Linux(UNIX)的簡單程度真是不可思議!
用 TCP 封裝器限制對本地用戶的訪問
tcpd 程序配置為使用兩個文件:/etc/hosts.allow 和 /etc/hosts.deny。這兩個文件中行的格式為:
daemon_list : client_list [ : shell_command ]
按以下順序授權(quán)或拒絕訪問。搜索在第一次匹配時停止:
- 當與 /etc/hosts.allow 中的項匹配時,則授權(quán)訪問
- 當與 /etc/hosts.deny 中的項匹配時,則拒絕訪問
- 若沒有匹配項,則授權(quán)訪問
例如,若只允許對內(nèi)部網(wǎng)絡(luò)進行 telnet 訪問,可通過在 /etc/hosts.deny 中設(shè)置策略(拒絕除 localhost 以外的其它來源的所有連接)著手:
in.telnetd: ALL EXCEPT LOCAL
用 TCP 封裝器將訪問限制為已知主機 無需重新裝入 inetd,因為每當 telnet 端口有連接時,就會調(diào)用 tcpd。因此我們可以立即嘗試:
# telnet box.yourdomain.com
Trying 10.0.0.1...
Connected to box.yourdomain.com.
Escape character is '^]'.
Connection closed by foreign host.
哦!被拒絕了。ㄟ@是人生中為數(shù)不多的幾次經(jīng)歷:拒絕表示成功。)要重新啟用來自自己網(wǎng)絡(luò)的訪問,可在 /etc/hosts.allow 中插入例外:
in.telnetd: .yourdomain.com
此刻我們就能夠再次成功地用 telnet 訪問系統(tǒng)了。而這僅僅觸及了 tcp_wrappers 的能力的表面。在 tcpd(8) 和 hosts_access(5) 手冊頁中還有有關(guān) tcp_wrappers 的更多信息。xinetd:擴展的 inetd 盡管 inetd 是經(jīng)典的因特網(wǎng)超級服務(wù)器,但最近對它進行了多次改寫以試圖添加特性和更多的安全性。xinetd 程序在許多新近的分發(fā)版(包括 Red Hat 和 Debian)中取代了 inetd。部分擴展的特性是:- 訪問控制(內(nèi)置 TCP 封裝器)
- 詳盡的日志記錄(連接持續(xù)時間和失敗的連接等等)
- 來自另一個主機的服務(wù)重定向
- IPv6 支持
- 通過代碼片段而不是一個匯總文件進行配置
xinetd 配置
xinetd 的配置文件是 /etc/xinetd.conf。最常見的情況下,那個文件僅包含為其余服務(wù)設(shè)置缺省配置參數(shù)的幾行:
# cat /etc/xinetd.conf
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d
文件的最后一行指示 xinetd 從 /etc/xinetd.d 目錄的文件代碼片段讀取額外的配置信息。我們快速地看看 telnet 代碼片段:
# cat /etc/xinetd.d/telnet
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
如您所見,配置 xinetd 并不困難,而且它比 inetd 更直觀。您可以在 xinetd(8)、xinetd.conf(5) 和 xinetd.log(5) 手冊頁中獲得有關(guān) xinetd 的更多信息。
在 Web 上也有關(guān)于 inetd、tcp_wrappers 和 xinetd 的大量信息。請務(wù)必查看我們在本教程最后一章(參考資料)中給出的這些工具的一些鏈接;它們能讓您更好地體會這些工具的能力和配置。
四。安全性概述
簡介
維護一個完全安全的系統(tǒng)是不可能的。然而,只要勤奮,則有可能使 Linux 機器足夠安全,并讓大多數(shù)偶爾出現(xiàn)的駭客、腳本小子(script-kiddies)以及其它的“壞家伙”止步而去騷擾其他人。請記。簝H僅遵循本教程不會產(chǎn)生一個安全的系統(tǒng)。相反,我們希望您接觸到主要主題的多個方面,并向您提供一些有關(guān)如何入門的有用示例。
Linux 系統(tǒng)安全性可分為兩個部分:內(nèi)部安全性和外部安全性。內(nèi)部安全性指預防用戶無意或惡意地破壞系統(tǒng)。外部安全性指防止未授權(quán)用戶獲得對系統(tǒng)的訪問。
本章將首先介紹內(nèi)部安全性,然后介紹外部安全性,最后介紹一些常規(guī)指導原則和技巧。
日志文件的文件權(quán)限
內(nèi)部安全性可以是很大的任務(wù),這要看您對用戶的信任程度。這里介紹的指導原則是設(shè)計用來防止偶然用戶訪問敏感信息和防止不公平地使用系統(tǒng)資源。
至于文件權(quán)限,您可能希望修改以下三種情況的權(quán)限:
首先,/var/log 中的日志文件不需要是所有人都可以讀取的。沒有理由讓非 root 用戶窺視日志。為了創(chuàng)建具有適當權(quán)限的日志,請參閱
LPI 101 系列第 4 部分
以獲取有關(guān) syslog 的更多信息,還請閱讀 logrotate(8) 手冊頁以獲取配置該程序的信息。
root 用戶其它文件的文件權(quán)限
其次,root 用戶的點文件對于普通用戶應(yīng)是不可讀的。檢查 root 用戶主目錄中的文件(ls -la)以確保它們受到適當?shù)谋Wo。甚至可以使整個目錄僅對 root 用戶可讀:
# cd
# pwd
/root
# chmod 700 .
用戶文件的文件權(quán)限 最后,用戶文件在缺省情況下通常被創(chuàng)建為所有人可讀。那可能不是用戶所期望的,而且它當然不是最好的策略。應(yīng)該使用與下面類似的命令在 /etc/profile 中設(shè)置缺省的 umask:
if [ "$UID" = 0 ]; then
# root user; set world-readable by default so that
# installed files can be read by normal users.
umask 022
else
# make user files secure unless they explicitly open them
# for reading by other users
umask 077
fi
應(yīng)該查詢 umask(2) 和 bash(1) 手冊頁以獲取有關(guān)設(shè)置 umask 的更多信息。請注意:umask(2) 手冊頁涉及 C 函數(shù),但它所包含的信息也適用于 bash 命令。請參閱
LPI 101 系列第 3 部分
以獲取有關(guān) umask 的其它詳細信息。查找 SUID/SGID 程序 尋求 root 訪問權(quán)的惡意用戶總是會在系統(tǒng)上尋找設(shè)置了 SUID 或 SGID 位的程序。就象我們在
LPI 101 系列第 3 部分
中討論的那樣,這些位使程序始終作為擁有該文件的用戶或組運行。有時這是程序正確運行所必需的。問題是任何程序都可能包含允許用戶在不正確地使用程序時獲得特權(quán)的錯誤。應(yīng)該仔細考慮每個程序以確定是否需要將其 SUID 或 SGID 位打開。系統(tǒng)上有些 SUID/SGID 程序可能是根本不需要的。要搜索具有這樣性質(zhì)的程序,可使用 find 命令。例如,可以在 /usr 目錄中啟動對 SUID/SGID 程序的搜索:
# cd /usr
# find . -type f -perm +6000 -xdev -exec ls {} ;
-rwsr-sr-x 1 root root 593972 11-09 12:47 ./bin/gpg
-r-xr-sr-x 1 root man 38460 01-27 22:13 ./bin/man
-rwsr-xr-x 1 root root 15576 09-29 22:51 ./bin/rcp
-rwsr-xr-x 1 root root 8256 09-29 22:51 ./bin/rsh
-rwsr-xr-x 1 root root 29520 01-17 19:42 ./bin/chfn
-rwsr-xr-x 1 root root 27500 01-17 19:42 ./bin/chsh
-rwsr-xr-x 1 lp root 8812 01-15 23:21 ./bin/lppasswd
-rwsr-x--- 1 root cron 10476 01-15 22:16 ./bin/crontab
在這個清單中,我已經(jīng)發(fā)現(xiàn)了需要更仔細檢查的侯選對象:lppasswd 是 CUPS 打印軟件分發(fā)版的一部分。因為沒有在系統(tǒng)上提供打印服務(wù),所以我會考慮除去 CUPS,那也會除去 lppasswd 程序。lppasswd 中可能沒有危及安全性的錯誤,但為什么要在不使用的程序上冒險呢?同樣地,應(yīng)該關(guān)閉所有不使用的服務(wù)。您總是可以在需要時再啟用它們。用 ulimit 設(shè)置用戶限制 bash 中的 ulimit 命令提供了限制特定用戶的資源使用情況的方法。一旦限制降低,則在進程的生命期內(nèi)無法提高該限制。此外,該限制會被所有子進程繼承。結(jié)果是:可以在 /etc/profile 中調(diào)用 ulimit,而限制將以不能撤消的方式應(yīng)用于所有用戶(假設(shè)用戶正在運行 bash 或另一個 shell,該 shell 在登錄時運行 /etc/profile)。要檢索當前限制,可使用 ulimit -a:
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 3071
virtual memory (kbytes, -v) unlimited
以一種能實際提高系統(tǒng)安全性而不會對合法用戶造成麻煩的方式設(shè)置這些限制是相當復雜的,所以調(diào)整這些設(shè)置時要小心。查找 SUID/SGID 程序 作為 ulimit 的一個示例,我們嘗試將一個進程的 CPU 時間設(shè)置為 1 秒鐘,然后用一個忙循環(huán)使它超時。一定要確保啟動新的 bash 進程(象我們在下面做的那樣),以在其中進行嘗試;否則將被注銷!
# time bash
# ulimit -t 1
# while true; do true; done
Killed
real 0m28.941s
user 0m1.990s
sys 0m0.017s
在上面的示例中,“user”時間加上“sys”時間等于該進程所用的全部 CPU 時間。當 bash 進程到達 2 秒標記時,Linux 斷定它超過 1 秒的限制,因此該進程被殺掉?岚桑孔ⅲ阂幻腌娭皇鞘纠选2灰獙δ挠脩暨@樣做!即使幾小時也是不對的,因為 X 真地很消耗時間(我當前的會話已用掉了 69+ 小時的 CPU 時間)。在實際的實現(xiàn)中,您可能要對某些項而不是 CPU 時間執(zhí)行 ulimit。 您可能希望限制諸如同時登錄數(shù)量或磁盤使用情況之類的項。ulimit 還不能解決這些問題;您應(yīng)該轉(zhuǎn)而查看以下包之一:
Clobberd
監(jiān)控用戶活動,并計量如時間和網(wǎng)絡(luò)活動這樣的資源。
Idled
可以注銷空閑時間過長的用戶或登錄了很長時間的用戶。它還可以防止用戶登錄次數(shù)過多,以及完全拒絕用戶登錄。
LPI 101 系列第 4 部分
討論了文件系統(tǒng)限額的實現(xiàn)。 入侵預防
外部安全性可分為兩類:入侵預防和入侵檢測。采取入侵預防手段是為了防止未授權(quán)用戶訪問系統(tǒng)。如果這些手段失敗,那么入侵檢測在確定何時發(fā)生未授權(quán)訪問以及造成什么損壞方面或許有用。
完全的 Linux 安裝是巨大且復雜的系統(tǒng)。跟蹤已安裝的每一項是很困難的,而配置每個包的安全性特征就更困難了。安裝的包越少,則問題就變得越簡單。入侵預防的第一步是除去不需要的包;仡^看看
LPI 101 系列第 4 部分
以對打包系統(tǒng)進行回顧。
關(guān)閉未使用的網(wǎng)絡(luò)服務(wù)(超級服務(wù)器)
關(guān)閉未使用的網(wǎng)絡(luò)服務(wù)一直是提高入侵預防能力的好方法。例如,如果正在運行因特網(wǎng)超級服務(wù)器(如本教程前面描述的 inetd 或 xinetd),那么 in.rshd、in.rlogind 和 in.telnetd 通常都在缺省情況下啟用。這些網(wǎng)絡(luò)服務(wù)幾乎都已被更安全的替代項(如 ssh)所取代。
要在 inetd 中禁用服務(wù),只需在 /etc/inetd.conf 中在適當?shù)男星懊婕由稀?”將其注釋掉;然后重新啟動 inetd 即可。(這在本教程前面已有描述,若需要復習,可返回幾頁快速瀏覽。)
要在 xinetd 中禁用服務(wù),可以執(zhí)行與 /etc/xinetd.d 中適當?shù)拇a片段相似的工作。例如,要禁用 telnet,可以將 /etc/xinetd.d/telnet 文件的整個內(nèi)容注釋掉,或簡單地刪除該文件。重新啟動 xinetd 以完成此過程。
如果正在結(jié)合 inetd 使用 tcpd,或如果正在使用 xinetd,還可以選擇限制與可信的主機進行的進入連接。對于 tcpd,可參閱本教程的前幾章。對于 xinetd,可在 xinetd.conf(5) 手冊頁中搜索“only_from”。
關(guān)閉未使用的網(wǎng)絡(luò)服務(wù)(獨立服務(wù)器)
有些服務(wù)器并不由 inetd 或 xinetd 啟動,但卻作為“獨立”服務(wù)器始終運行著。這樣的服務(wù)器通常是 atd、lpd、sshd、nfsd 和其它服務(wù)器。事實上,inetd 和 xinetd 本身都是獨立服務(wù)器,如果在它們各自的配置文件中注釋掉所有的服務(wù),就選擇了將它們完全關(guān)閉。
獨立服務(wù)器通常在系統(tǒng)引導或更改運行級別時由 init 系統(tǒng)啟動。如果不記得運行級別是如何工作的,可以看看
LPI 101 系列第 4 部分
。
要使 init 系統(tǒng)不再啟動服務(wù)器,在每個運行級別目錄中找到指向該服務(wù)器啟動腳本的符號鏈接,然后刪除它。運行級別目錄的名稱通常為 /etc/rc3.d 或 /etc/rc.d/rc3.d(針對運行級別 3)。還需要檢查其它運行級別。
除去服務(wù)的運行級別符號鏈接后,仍需要關(guān)閉當前運行的服務(wù)器。最好用服務(wù)的初始化腳本完成這一操作,通?梢栽 /etc/init.d 或 /etc/rc.d/init.d 中找到這一腳本。例如,要關(guān)閉 sshd:
# /etc/init.d/sshd stop
* Stopping sshd... [ ok ]
測試更改
在修改 inetd 或 xinetd 配置以禁用或限制服務(wù),或用服務(wù)器初始化腳本關(guān)閉該服務(wù)器后,應(yīng)該對所做的更改加以測試。可以使用 telnet 客戶機通過指定服務(wù)名稱或號碼來測試 tcp 端口。例如,要驗證 rlogin 已被禁用:
# grep ^login /etc/services
login 513/tcp
# telnet localhost 513
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
除了標準 telnet 客戶機以外,還應(yīng)考慮使用實用程序以測試系統(tǒng)“開放程度”的可能性。我們推薦使用 netcat 和 nmap。
ncat 是“網(wǎng)絡(luò)瑞士軍刀”:它是使用 TCP 或 UDP 協(xié)議、跨越網(wǎng)絡(luò)連接讀寫數(shù)據(jù)的簡單 UNIX 實用程序。nmap 是用于網(wǎng)絡(luò)探測或安全性審計的實用程序。具體而言,nmap 掃描端口以確定哪個端口打開了。
可以在本教程最后一章(參考資料)中找到指向這些實用程序的鏈接。
拒絕登錄以進行維護
除了以上方法外,還有通過創(chuàng)建 /etc/nologin 文件來拒絕登錄的普通方法。通常這一方法用于短期維護操作。仍然可以允許以 root 用戶身份登錄,但將拒絕以其他用戶身份登錄。例如:
# cat > /etc/nologin
==============================================
System is currently undergoing maintenance
until 2:00. Please come back later.
==============================================
# telnet localhost
login: agriffis
Password:
==============================================
System is currently undergoing maintenance
until 2:00. Please come back later.
==============================================
Login incorrect
完成維護后,一定要刪除這個文件,否則在您想起以前,沒人能登錄!我可沒這么做過,對,我沒有... ;-)
iptables(ipchains)簡介
iptables 和 ipchains 命令用于在運行的 Linux 內(nèi)核中調(diào)整和檢查網(wǎng)絡(luò)信息包過濾器規(guī)則。ipchains 命令用于 2.2.x 版本內(nèi)核,盡管它仍可用于 2.4.x 內(nèi)核,但已被 iptables 取代。
可設(shè)置信息包過濾器規(guī)則進行防火墻和路由器的活動?梢詫 iptables 命令加上 -L 選項來檢查當前的規(guī)則:
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
這是一個非常開放的系統(tǒng)示例,沒有啟用路由或防火墻。
iptables 和 Linux 信息包過濾器
有效地使用 Linux 信息包過濾器需要對 TCP/IP 聯(lián)網(wǎng)及其如何在 Linux 內(nèi)核中實現(xiàn)有扎實的理解。netfilter 主頁(請參閱本教程最后一章的參考資料,以獲得鏈接)是學習更多知識的好去處。
在能自如地構(gòu)建自己的規(guī)則集以前,有許多腳本可以讓您入門,只要您信任它們的作者即可。最完整的腳本之一是 gShield(請參閱參考資料)。您可以調(diào)整其注釋良好且相當簡單的配置文件以設(shè)置信息包過濾器規(guī)則最常規(guī)的格式。
入侵檢測 ― 系統(tǒng)日志(syslog)
入侵檢測通常被那些相信自己安置的入侵預防設(shè)備的系統(tǒng)管理員所忽略。不幸的是,這意味著一旦黑客找到可以入侵的細微漏洞,在注意到他們的存在以前,系統(tǒng)可能很長一段時間都處于他們的控制之下。
入侵檢測最基本的形式是注意系統(tǒng)日志。這些文件通常出現(xiàn)在 /var/log 目錄中,不過實際的文件名會因分發(fā)版和配置而有所不同。
# less /var/log/messages
Feb 17 21:21:38 [kernel] Vendor: SONY Model: CD-RW CRX140E Rev: 1.0n
Feb 17 21:21:39 [kernel] eth0: generic NE2100 found at 0xe800, Version 0x031243,
DMA 3 (autodetected), IRQ 11 (autodetected).
Feb 17 21:21:39 [kernel] ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
Feb 17 21:22:11 [kernel] NVRM: AGPGART: VIA MVP3 chipset
Feb 17 21:22:11 [kernel] NVRM: AGPGART: allocated 16 pages
Feb 17 22:20:05 [PAM_pwdb] authentication failure; (uid=1000)
-> root for su service
Feb 17 22:20:06 [su] pam_authenticate: Authentication failure
Feb 17 22:20:06 [su] - pts/3 chouser-root
要理解所有這些消息可能需要進行一些實踐,但大多數(shù)重要消息都相當清楚。例如,在日志的末尾,我們可以看到用戶“chouser”試圖使用 su 成為 root 用戶,但失敗了。
入侵檢測 ― tripwire
有許多可用的包可以對整個文件系統(tǒng)進行“快照”,然后將它與較早的快照比較以了解什么發(fā)生了更改。若能明確地定義哪些文件作為系統(tǒng)正常操作的一部分應(yīng)該發(fā)生更改,則這些包能很快提醒黑客的存在及其活動。
Tripwire 是最流行的入侵檢測包之一(請參閱本教程末尾的參考資料以獲取鏈接)。安裝 tripwire 后,必須定制它的配置文件以使它知道哪些文件應(yīng)該更改而哪些不應(yīng)更改。還需要告訴它如何向您發(fā)送有關(guān)發(fā)生什么更改的報告,以及它應(yīng)隔多久運行一次(通常每天一次)。
入侵檢測 ― portsentry
PortSentry 包來自 Psionic Technologies,它實際上有點介于入侵預防與檢測之間。該包監(jiān)控網(wǎng)絡(luò)連接,并且如果它看到任何它認為“可疑”的與系統(tǒng)連接的嘗試,它會把這一事件編入日志然后阻止它再次發(fā)生。該包也可以在本教程末尾的參考資料中找到。
當安裝了該包并運行它時,將能夠在 syslog 中看到所有嘗試的連接,并看到 PortSentry 如何對它們做出反應(yīng):
# tail /var/log/messages
Oct 15 00:21:24 mycroft portsentry[603]: attackalert:
SYN/Normal scan from host: 302.174.40.34/302.174.40.34 to TCP port: 111
Oct 15 00:21:24 mycroft portsentry[603]: attackalert:
Host 302.174.40.34 has been blocked via wrappers with string:
"ALL: 302.174.40.34"
Oct 15 00:21:24 mycroft portsentry[603]: attackalert:
Host 302.174.40.34 has been blocked via dropped route using command:
"/sbin/route add -host 302.174.40.34 reject"
Oct 15 00:21:24 mycroft portsentry[603]: attackalert:
SYN/Normal scan from host: 302.174.40.34/302.174.40.34 to TCP port: 111
Oct 15 00:21:24 mycroft portsentry[603]: attackalert:
Host: 302.174.40.34/302.174.40.34 is already blocked Ignoring
Oct 15 00:33:59 mycroft portsentry[603]: attackalert:
SYN/Normal scan from host: 302.106.103.19/302.106.103.19 to TCP port: 111
Oct 15 00:33:59 mycroft portsentry[603]: attackalert:
Host 302.106.103.19 has been blocked via wrappers with string:
"ALL: 302.106.103.19"
Oct 15 00:33:59 mycroft portsentry[603]: attackalert:
Host 302.106.103.19 has been blocked via dropped route using command:
"/sbin/route add -host 302.106.103.19 reject"
常規(guī)指南:保持軟件為最新
因為所有軟件都可能有安全性漏洞,所以重要的是:只要獲得包的安全性修正包就立刻安裝。這是安全專家最常提出的一條建議,也是管理員新手們最常忽略的一條建議。不要吃過苦頭才吸取教訓 ― 機器因為您忽視了使補丁程序保持最新而被人通過存在數(shù)年之久的后門侵入。
對于開放源碼和封閉源碼哪個更安全的爭論非常激烈。迄今最好的結(jié)論是:管理正確時,兩者都足夠安全,這里的管理包括保持安全性補丁程序為最新!
有幾個網(wǎng)站可以幫助保持軟件為最新,并有助于提防已知的威脅。包括特別注意安全性的
CERT
和
SecurityFocus 的 BugTraq 列表
,以及通常的軟件更新站點(象
freshmeat.net
)和分發(fā)版的主頁。我們還將在參考資料中重復這些 URL,不過安全性真的非常重要 ― 如果還不熟悉這些站點的話,建議您現(xiàn)在就花幾分鐘訪問頭兩個站點。
常規(guī)指南:高質(zhì)量密碼
聽起來可能很普通,為自己選擇高質(zhì)量密碼,并且“鼓勵”(也就是命令)用戶也這樣做,以形成良好的安全性的基石。記住要避免常見的詞和名字,特別是與自己有關(guān)的任何事物,如朋友的名字、工作地點或?qū)櫸锏拿帧_要避免可猜測的數(shù)字,如生日或周年紀念日。相反要嘗試使用字母、數(shù)字和標點的隨機組合。
常規(guī)指南:測試安全性
測試系統(tǒng)的安全性很重要,但不要讓一次成功的測試使您產(chǎn)生安全性的錯誤感覺。這些測試工具找不到漏洞并不能保證一些具有知識和想象力的人 ― 并且他們有一大堆時間 ― 也會失敗。
我們已經(jīng)提到了 nmap 和 netcat 可用于測試網(wǎng)絡(luò)安全性。還應(yīng)該檢查薄弱的密碼,特別當系統(tǒng)有多個用戶時,更是如此。有許多工具可以使用,如我們在本教程末尾的“參考資料”中提到的那些工具。
五。打印簡介 這一章將介紹 Linux 上的經(jīng)典 UNIX 打印系統(tǒng)(有時被稱為 Berkeley LPD)的設(shè)置和使用。其它可用于 Linux 的系統(tǒng)則不在這里介紹;請參閱本教程末尾的參考資料一章以獲取有關(guān)這些系統(tǒng)的信息。物理上安裝打印機超出了本教程的范圍。當打印機正確連接后,則要安裝打印假脫機程序守護程序,以使網(wǎng)絡(luò)上的機器(包括運行假脫機程序的機器)能夠?qū)⒋蛴∽鳂I(yè)發(fā)送給打印機。安裝打印假脫機程序守護程序(lpd) 最好的 LPD 打印假脫機程序之一是
LPRng
。其安裝方法取決于分發(fā)版;請參閱
LPI 102 系列第 1 部分
以獲取有關(guān)在 Red Hat 或 Debian 中安裝軟件包的詳細信息。安裝打印假脫機程序守護程序(正式名稱為行式打印機守護程序)以后,就可以從命令行運行。以普通用戶身份登錄,然后試著運行以下命令:
$ /usr/sbin/lpd --help
--X option form illegal
usage: lpd [-FV] [-D dbg] [-L log]
Options
-D dbg - set debug level and flags
Example: -D10,remote=5
set debug level to 10, remote flag = 5
-F - run in foreground, log to STDERR
Example: -D10,remote=5
-L logfile - append log information to logfile
-V - show version info
既然已安裝了守護程序,則應(yīng)確保將它設(shè)置為自動運行。您分發(fā)版的 LPRng 包可能已經(jīng)替您進行了設(shè)置,但如果沒有的話,請參閱
LPI 101 系列第 4 部分
以獲取有關(guān)使用運行級別來自動啟動象 lpd 這樣的守護程序的信息。基本打印機設(shè)置(/etc/printcap) 打印假脫機程序守護程序起著一種管道的作用。它接受來自各個打印客戶機的打印作業(yè),然后將這些作業(yè)傳遞到適當?shù)拇蛴C。當打印機忙時,這些作業(yè)就“假脫機”,等待打印機會。當在本地打印機上打印時,該“管道”的兩端都由配置文件 /etc/printcap(有時位于 /etc/lprng/printcap)描述。printcap(printer capabilities 的縮寫)中的每一項描述一個打印假脫機文件:
$ more /etc/printcap
lp|Generic dot-matrix printer entry:
:lp=/dev/lp0:
:sd=/var/spool/lpd/lp:
:pl#66:
:pw#80:
:pc#150:
:mx#0:
:sh:
請注意:項的最后一行沒有尾隨的反斜杠()。您的分發(fā)版可能有其它項,并且可能更復雜,但它們都大致有這樣的形式。首先是項的名稱 lp,隨后是對這個假脫機文件較長的描述。關(guān)鍵字/值對 lp=/dev/lp0 指定將要打印假脫機文件中打印作業(yè)的 Linux 設(shè)備,而 sd 關(guān)鍵字則給出打印作業(yè)前存放它們的目錄。余下的關(guān)鍵字/值對則提供有關(guān)連接到 /dev/lp0 的打印機類型的詳細信息。printcap 手冊頁對它們做了描述,稍后我們將介紹其中的一部分。創(chuàng)建假脫機文件目錄 如果創(chuàng)建一個打印假脫機項,則需要確保假脫機文件的目錄存在并且具有正確的權(quán)限。如果希望打印機守護程序(通常以用戶 lp 的身份運行)能訪問假脫機文件目錄,則必須以 root 用戶的身份運行以下命令:
# mkdir -p /var/spool/lpd/lp
# chown lp /var/spool/lpd/lp
# chmod 700 /var/spool/lpd/lp
# checkpc -f
# /etc/init.d/lprng restart
LPRng 包含一個用于檢查 printcap 的有用工具。它甚至會為您設(shè)置假脫機文件目錄(如果您忘了以手工方式這么做的話):
# checkpc -f
最后,重新啟動 lpd。為了使更改生效,每次更改 printcap 時都需要這么做。您可能需要使用 lpd 而不是 lprng:
# /etc/init.d/lprng restart
較老的 Berkeley 打印系統(tǒng)不包含 checkpc 工具,所以您必須親自在各臺打印機上打印測試頁,以確保 printcap 和打印假脫機文件目錄是正確的。使用打印假脫機程序客戶機 打印假脫機程序本身帶有幾個客戶機以便與服務(wù)器守護程序通信。使用最多的可能是 lpr,它僅僅將文件發(fā)送至服務(wù)器以在假脫機文件中排隊然后打印。要嘗試該程序,首先找到或制作一個小的樣本文本文件。然后輸入命令:
$ lpr sample.txt
若該命令起作用,則在屏幕上應(yīng)該看不到響應(yīng),但打印機應(yīng)該開始運行,而且應(yīng)很快就能打印出該樣本文本的硬拷貝。如果該命令執(zhí)行的輸出看起來不太正確,不必擔心;稍后我們將設(shè)置過濾器,它應(yīng)能確保所有種類的文件格式都能正確地打印?梢杂 lpq 命令檢查打印假脫機文件隊列中的打印作業(yè)列表。選項 -P 指定要顯示的隊列名稱;如果不使用該選項,則 lpq 將使用缺省打印假脫機文件(就象 lpr 在前面所做的那樣):
$ lpq -Plp
Printer: lp@localhost 'Generic dot-matrix printer entry'
Queue: 1 printable job
Server: pid 1671 active
Unspooler: pid 1672 active
Rank Owner/ID Class Job Files Size Time
active chouser@localhost+670 A 670 sample.txt 8 21:57:30
如果要停止打印作業(yè),可以使用 lprm 命令。若一個作業(yè)花的時間過長,或者用戶不小心發(fā)送了多份相同文件,則可能要執(zhí)行該命令。只要從上面列出的 lpq 命令復制作業(yè)標識即可:
$ lprm chouser@localhost+670
Printer lp@localhost:
checking perms 'chouser@localhost+670'
dequeued 'chouser@localhost+670'
可以使用交互式工具 lpc 對打印假脫機文件進行許多其它操作。請參閱 lpc 手冊頁以獲取詳細信息。打印至遠程 LPD 服務(wù)器 即使本地機器上沒有打印機,仍可以使用 lpd 跨越網(wǎng)絡(luò)將打印作業(yè)發(fā)送至與別的機器相連的打印機。在客戶機機器上,可以向 /etc/printcap 添加一條看似本地打印機而實際上將打印作業(yè)路由至服務(wù)器機器的打印假脫機文件項。該項看起來應(yīng)與下面相似:
farawaylp|Remote printer entry:
:rm=faraway:
:rp=lp:
:sd=/var/spool/lpd/farawaylp:
:mx#0:
:sh:
這里我們希望執(zhí)行打印作業(yè)的機器名稱是 faraway,而那臺機器上打印機的名稱是 lp。假脫機文件目錄 /var/spool/lpd/farawaylp 是打印作業(yè)在能夠被發(fā)送至遠程打印假脫機程序以前在本地保存的位置,而且在打印作業(yè)能發(fā)送到打印機以前,可能還要在遠程打印假脫機程序處再次對它們進行假脫機處理。同樣地,將需要創(chuàng)建這個假脫機文件目錄并設(shè)置其權(quán)限:
# mkdir -p /var/spool/lpd/farawaylp
# chown lp /var/spool/lpd/farawaylp
# chmod 700 /var/spool/lpd/farawaylp
# checkpc -f
# /etc/init.d/lprng restart
在本地,我們將這個遠程打印機命名為 farawaylp,因此我們可以將打印作業(yè)發(fā)送至 farawaylp:
$ lpr -Pfarawaylp sample.txt打印至遠程的 MS Windows 或 Samba 服務(wù)器
感謝 Samba,打印至遠程 Microsoft Windows 打印服務(wù)器只稍稍復雜一點。首先,添加本地 printcap 項:
smb|Remote windows printer:
:if=/usr/bin/smbprint:
:lp=/dev/null:
:sd=/var/spool/lpd/smb:
:mx#0:
這里新的關(guān)鍵字是 if,即輸入過濾器。將它指向 smbprint 腳本將使打印作業(yè)被發(fā)送至 Windows 服務(wù)器而不是 lp 設(shè)備。我們?nèi)员仨毩谐龃蛴∈刈o程序用于鎖定而使用的設(shè)備(此例中是 /dev/null)。但實際上將沒有打印作業(yè)被發(fā)送到那里。
不要忘記創(chuàng)建假脫機文件目錄!
# mkdir -p /var/spool/lpd/smb
# chown lp /var/spool/lpd/smb
# chmod 700 /var/spool/lpd/smb
# checkpc -f
# /etc/init.d/lprng restart
在您喜愛的編輯器中,在上面命名的假脫機文件目錄中創(chuàng)建一個 .config 文件。在本例中,該文件為 /var/spool/lpd/smb/.config:
server="WindowsServerName"
service="PrinterName"
password=""
user=""
調(diào)整這些值以指向希望使用的 Windows 機器和打印機名稱,然后就可以使用以下命令:
$ lpr -Psmb sample.txt
smbprint 腳本應(yīng)該與 Samba 一起提供,但該腳本并不包含在所有分發(fā)版中。如果在系統(tǒng)上找不到這個腳本,可以從
Samba HOWTO
獲得。
Magicfilter
迄今我們只嘗試了打印文本文件,這還不是特別令人興奮。通常,任何一臺打印機只能打印一種格式的圖形文件 ― 然而我們希望打印的格式有幾十種:PostScript、gif、jpeg 等等。名為
Magicfilter
的程序起著輸入過濾器的作用,很象 smbprint 的所為。Magicfilter 并不轉(zhuǎn)換文件格式,而是提供標識您正在嘗試打印的文檔類型的框架,然后通過適當?shù)霓D(zhuǎn)換工具運行該文檔:轉(zhuǎn)換工具必須單獨安裝。到目前為止,最重要的轉(zhuǎn)換工具是
Ghostscript
,它可以將文件從 Postscript 格式轉(zhuǎn)換成許多打印機的本機格式。
調(diào)整 printcap 以指向 Magicfilter
安裝這些工具后,只需再調(diào)整 printtcap 一次即可。添加 if 關(guān)鍵字以指向與打印機配合的 Magicfilter:
lp|The EPSON Stylus Color 777 sitting under my desk:
:if=/usr/share/magicfilter/StylusColor-777@720dpi-filter:
:gqfilter:
:lp=/dev/usb/lp0:
:sd=/var/spool/lpd/lp:
:pl#66:
:pw#80:
:pc#150:
:mx#0:
:sh:
在 /usr/share/magicfilter 中有用于許多不同打印機和打印機設(shè)置的過濾器,因此要確保使用的是適合您打印機的過濾器。每個過濾器都是一個文本文件,并且打印機的全稱常常位于頂部。當您不清楚過濾器的文件名是什么時,這會對您有所幫助。
我還向這個 printcap 項添加了 gqfilter 標志,這樣,即使打印作業(yè)來自遠程打印機,也可使用輸入過濾器。這種方法只適用于 LPRng。
因為較早的時候就設(shè)置了 /var/spool/lpd/lp 打印假脫機文件目錄,所以我只需要檢查 printcap 語法,然后重新啟動服務(wù)器:
# checkpc -f
# /etc/init.d/lprng restart
現(xiàn)在您能夠打印各種文檔,包括 Postscript 文件。換句話說,現(xiàn)在可以從您喜愛的 Web 瀏覽器的菜單中選擇“Print”來進行工作了。
Magicfilter 的替代項 Apsfilter
Apsfilter 提供了 Magicfilter 的許多特性,而且還能幫助您設(shè)置假脫機文件目錄和 printcap 項等等。您仍需要確保安裝了 Ghostscript,然后按照
Apsfilter handbook
提供的十分完整的指示信息進行操作。
六。參考資料與反饋參考資料可以在文章
Configuring inetd.conf securely
和
xinetd 主頁
中學習有關(guān)配置 inetd 和 xinetd 的更多信息。當向 /etc/services 添加自己的服務(wù)名稱和端口時,要記得首先檢查它們與
已分配端口號
是否沖突。
netfilter 主頁
是開始學習更多有關(guān) iptables 和 Linux 信息包過濾器知識的好地方。在能自如地構(gòu)建自己的規(guī)則集以前,可能需要使用現(xiàn)有的腳本。我們推薦
gShield
。有用的安全性工具包括
Tripwire
(最流行的入侵檢測包)和
Psionic Technologies
的
PortSentry
(入侵預防與檢測的混合體)。(LinuxWorld 文章
How to stop crackers with PortSentry
提供了有關(guān)安裝和配置的建議。)最后,一定要熟悉 Wietse Venema 的
TCP 封裝器
,它允許對您系統(tǒng)的連接進行監(jiān)控和控制?梢栽诰查看
TCP 封裝器自述文件
(也可以從 /usr/share/doc/tcp_wrappers-7.6 獲得)。用
可插入認證模塊
(也稱為 PAM)可以更方便地認證用戶。您的網(wǎng)絡(luò)容易受到攻擊嗎?考慮嘗試下面兩個實用程序以檢查系統(tǒng)的薄弱環(huán)節(jié)(或“開放程度”):
netcat
是使用 TCP 或 UDP 協(xié)議跨越網(wǎng)絡(luò)連接來讀寫數(shù)據(jù)的簡單 UNIX 實用程序;
nmap
是用于網(wǎng)絡(luò)探測或安全性審計的實用程序。具體而言,nmap 掃描端口以確定打開了哪個端口。測試猜出您密碼(以及您用戶的密碼)的容易程度的密碼檢查器和其它工具包括來自
Openwall Project
的
John the Ripper
,它是專為此目的而構(gòu)建的。您可能還希望嘗試象
SAINT
那樣的綜合檢查器。下面的安全性站點應(yīng)該在所有系統(tǒng)管理員的“最常訪問”站點之列:
CERT
是由卡內(nèi)基-梅隆大學運作、受聯(lián)邦政府資助的研究中心。他們研究因特網(wǎng)的安全性和弱點,發(fā)布安全性警告并研究其它安全性問題。
BugTraq
(由 Security Focus 托管)是對計算機安全性弱點討論和聲明的完全公開和適度的郵件列表。即使你對這方面的管理不是特別有興趣,對這個列表的訂閱也是很有價值的,因為簡單地瀏覽標題欄也許就可以提醒您系統(tǒng)上的弱點,而您也許會很晚才會發(fā)現(xiàn)這些弱點,或者根本發(fā)現(xiàn)不了。我們強烈推薦的、能使您更好地掌握 Linux 機器安全性的更多安全性站點包括:
Linux Security HOWTO
、
O'Reilly 安全性頁面
以及理所當然的 developerWorks
Security 專區(qū)
(盡管它更強調(diào)安全的編程實踐,但管理安全性也是其特色)。您要查看的打印和假脫機資源包括:
LPRng 打印假脫機程序主頁
和來自 Printing HOWTO 的
假脫機軟件概述
。當然,
Printing HOWTO
本身就是有價值的資源,就象
LinuxPrinting.org
一樣。要獲得特定打印機的幫助信息,請查閱
Serial HOWTO
。
USB 指南
也提供了有關(guān)(您猜得沒錯)USB 打印機的有價值信息。Samba 在異構(gòu)網(wǎng)絡(luò)中有很大幫助。當為這種環(huán)境設(shè)置打印時,您要查閱
Samba 主頁
以及
Samba HOWTO
,那里有很好的打印機共享詳細信息。我們討論的兩個打印機過濾器是
Magicfilter
和
Apsfilter
。還記得兩者都需要轉(zhuǎn)換程序嗎(我們推薦
Ghostscript
),因為它們本身不能進行轉(zhuǎn)換。如果使用后者,您還將發(fā)現(xiàn)
Apsfilter handbook
非常有用。另外,我們推薦下列用于學習有關(guān) Linux(特別是準備 LPI 證書考試)的更多知識的一般資源:您將在
http://www.linuxdoc.org
中收集了大量的指南、HOWTO、FAQ 和手冊頁。請一定還要查看
Linux Gazette
和
LinuxFocus
。Linux Network Administrator's guide 可以從
Linuxdoc.org 的“Guides”一節(jié)
獲得,這是對本教程系列的極佳補充 ― 不妨一讀!您會發(fā)現(xiàn) Eric S. Raymond 的
Unix and Internet Fundamentals HOWTO
也很有幫助。在 developerWorks 上的 Bash by example 文章系列中,學習如何使用 bash 編程構(gòu)造來編寫自己的 bash 腳本。本系列(特別是第一和第二部分)會是 LPI 考試極佳的額外準備資料。Mark Chapman 編寫的
Technical FAQ for Linux Users
是一篇長達 50 頁的內(nèi)容深入的常問的 Linux 問題列表,并有詳細的回答。FAQ 本身是 PDF(Acrobat)格式的。如果您是初級或中級 Linux 用戶,那么您確實應(yīng)查閱該 FAQ。同樣由 Mark 編寫的
為 Windows 用戶準備的簡明 Linux 詞匯表
也非常好。如果您還不太熟悉 vi 編輯器,那么您應(yīng)該查看 Daniel 編寫的
關(guān)于 Vi 的教程
。這篇 developerWorks 教程有條理而且快速地介紹這個功能強大的文本編輯器。如果您不知道如何使用 vi,請考慮這份必讀資料。有關(guān) Linux Professional Institute 的更多信息,請訪問
LPI 主頁
。您的反饋我們期盼著您對本教程的反饋。此外,歡迎您通過
drobbins@gentoo.org
與第一作者 Daniel Robbins 直接聯(lián)系。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/3984/showart_11579.html |
|