亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 第 7 部分:網(wǎng)絡(luò) [打印本頁(yè)]

作者: jiupima    時(shí)間: 2005-02-04 10:35
標(biāo)題: 第 7 部分:網(wǎng)絡(luò)
我們將介紹 TCP/IP 和以太網(wǎng) Linux 聯(lián)網(wǎng)的基本原理,說(shuō)明如何使用 inetd 和 xinetd,提供保護(hù) Linux 系統(tǒng)的重要技巧,還將說(shuō)明如何設(shè)置和使用 Linux 打印服務(wù)器。
一。關(guān)于本教程
本教程涉及哪些內(nèi)容?
在本教程中,我們將介紹 TCP/IP 和以太網(wǎng) Linux 聯(lián)網(wǎng)的基本原理,說(shuō)明如何使用 inetd 和 xinetd 超級(jí)服務(wù)器,提供保護(hù) Linux 系統(tǒng)的重要技巧,還將說(shuō)明如何設(shè)置和使用 Linux 打印服務(wù)器。在學(xué)習(xí)完本系列教程(共 8 篇;本篇是第 7 部分)后,您將具備成為 Linux 系統(tǒng)管理員所必需的知識(shí),而如果您選擇參加 LPI 考試,您將有能力取得 Linux Professional Institute 頒發(fā)的 LPIC Level 1 證書(101 考試和 102 考試)。
LPI 徽標(biāo)是
Linux Professional Institute
的商標(biāo)。
我應(yīng)該學(xué)習(xí)這一教程嗎?
本教程是那些想學(xué)習(xí)或提高基本的 Linux 聯(lián)網(wǎng)和安全性技能的讀者的理想學(xué)習(xí)資料。而且本教程特別適合那些將在 Linux 服務(wù)器或臺(tái)式機(jī)上設(shè)置應(yīng)用程序的讀者。對(duì)于許多讀者,文中的許多問題可能是初次遇到,但經(jīng)驗(yàn)較豐富的 Linux 用戶會(huì)發(fā)現(xiàn)這個(gè)教程是鞏固重要的 Linux 系統(tǒng)管理技能的極佳途徑。
如果您是 Linux 新手,我們建議您在繼續(xù)之前先學(xué)完 LPI 證書 101 考試和 102 考試準(zhǔn)備系列前面的教程,包括:

關(guān)于作者
有關(guān)本教程內(nèi)容中的技術(shù)問題,請(qǐng)與作者聯(lián)系:

Daniel Robbins 居住在美國(guó)新墨西哥州阿爾伯克基(Albuquerque),他是 Gentoo Technologies, Inc. 的總裁兼 CEO,也是
Gentoo Linux
(PC 上的高級(jí) Linux)和 Portage 系統(tǒng)(Linux 的下一代移植系統(tǒng))的創(chuàng)建者。他還是 Macmillan 出版的 Caldera OpenLinux UnleashedSuSE Linux UnleashedSamba Unleashed 等書的撰稿作者。Daniel 自小學(xué)二年級(jí)起就和計(jì)算機(jī)結(jié)下不解之緣,那時(shí)他第一次接觸 Logo 編程語(yǔ)言,并沉溺于 Pac-Man 游戲中。這也許就是為什么至今他仍擔(dān)任 SONY Electronic Publishing/Psygnosis 首席圖形設(shè)計(jì)師的原因所在。Daniel 喜歡與妻子 Mary 和他們的女兒 Hadassah 一起共度時(shí)光。
Chris Houser 在他的許多朋友中以“欺騙專家”而聞名,自 1994 年加入印第安納州泰勒大學(xué)計(jì)算機(jī)科學(xué)網(wǎng)絡(luò)管理團(tuán)隊(duì)以來(lái),就一直是 UNIX 的擁護(hù)者,在那里,他獲得了計(jì)算機(jī)科學(xué)和數(shù)學(xué)學(xué)士學(xué)位。從那以后,他從事過 Web 應(yīng)用程序編程、用戶界面設(shè)計(jì)、專業(yè)視頻軟件支持等工作,目前他在
Compaq
從事 Tru64 UNIX 設(shè)備驅(qū)動(dòng)程序的編程工作。他還參與了多個(gè)自由軟件項(xiàng)目,最近的項(xiàng)目是
Gentoo Linux
。他和他的妻子以及他們的兩只貓一起住在美國(guó)新罕布什爾州。
Aron Griffis 畢業(yè)于泰勒大學(xué),在該校獲得計(jì)算機(jī)學(xué)士學(xué)位并被授予“理想 UNIX 公社未來(lái)的創(chuàng)立者”榮譽(yù)稱號(hào)。懷著這一目標(biāo),Aron 受雇于
Compaq
,從事編寫 Tru64 UNIX 網(wǎng)絡(luò)驅(qū)動(dòng)程序的工作,他的業(yè)余時(shí)間花在對(duì)鋼琴調(diào)音或開發(fā)
Gentoo Linux
上。他和妻子 Amy(也是 UNIX 工程師)住在美國(guó)新罕布什爾州納舒尼(Nashua)。
二。TCP/IP聯(lián)網(wǎng)
簡(jiǎn)介
設(shè)置一個(gè)由大量 Linux 機(jī)器組成的基于以太網(wǎng)的局域網(wǎng)(LAN)是常見且相對(duì)簡(jiǎn)單的任務(wù)。通常,需要做的就是確保 Linux 系統(tǒng)都安裝了某種以太網(wǎng)卡。然后,使用以太網(wǎng)電纜將機(jī)器連接到中央以太網(wǎng)集線器或交換機(jī)。若所有系統(tǒng)都把對(duì)相應(yīng)的以太網(wǎng)卡的支持(以及 TCP/IP 支持)編譯到內(nèi)核中,則就技術(shù)而言,這些系統(tǒng)已經(jīng)具備了在新的以太網(wǎng) LAN 上通信的一切條件。
僅有以太網(wǎng)還不太夠
盡管有了讓 LAN 工作所需的所有硬件和內(nèi)核支持,仍不會(huì)有多大用處。絕大多數(shù) Linux 應(yīng)用程序與服務(wù)并不使用原始的以太網(wǎng)信息包或交換信息。相反,它們使用稱為 TCP/IP 的高級(jí)協(xié)議。毫無(wú)疑問,您一定聽說(shuō)過 TCP/IP ― 它是一組大體上形成因特網(wǎng)基礎(chǔ)的協(xié)議(因此得名:傳輸控制協(xié)議/網(wǎng)際協(xié)議)。
解決方案:以太網(wǎng)上的 TCP/IP
于是,解決方案就是配置新的以太網(wǎng) LAN 以使它可以交換 TCP/IP 流量。要理解解決方案是如何工作的,首先需要知道一點(diǎn)有關(guān)以太網(wǎng)的知識(shí)。特別地,以太網(wǎng) LAN 上每臺(tái)機(jī)器中的以太網(wǎng)卡都有唯一的硬件地址。網(wǎng)卡在生產(chǎn)時(shí)就被分配了硬件地址,硬件地址看起來(lái)與下面相似:
00:01:02:CB:57:3CIP 地址簡(jiǎn)介
這些硬件地址被用做以太網(wǎng) LAN 上單個(gè)系統(tǒng)的唯一地址。使用硬件地址的話,一臺(tái)機(jī)器可以做一些事情,例如,可以向另一臺(tái)機(jī)器發(fā)送以太網(wǎng)幀。這一方法存在的問題是基于 TCP/IP 的通信使用另一尋址方案,即稱為 IP 地址的尋址方案。IP 地址看起來(lái)如下:
192.168.1.1將 IP 地址與以太網(wǎng)接口關(guān)聯(lián) 為了使以太網(wǎng) LAN 使用 TCP/IP,需要將每臺(tái)機(jī)器的以太網(wǎng)卡(因而也就是它的硬件地址)與一個(gè) IP 地址關(guān)聯(lián)。幸運(yùn)的是,在 Linux 下有一個(gè)將 IP 地址與以太網(wǎng)接口關(guān)聯(lián)的簡(jiǎn)便方法。事實(shí)上,如果當(dāng)前正在通過 Linux 使用以太網(wǎng),那么分發(fā)版的系統(tǒng)初始化腳本中很可能有類似如下的命令:
ifconfig eth0 192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0
以上命令中,ifconfig 命令被用來(lái)關(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)。當(dāng)命令完成時(shí),eth0 接口將被啟用并具有關(guān)聯(lián)的 IP 地址。使用 ifconfig -a 可以通過輸入 ifconfig -a 查看當(dāng)前正在運(yùn)行的所有網(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)
從上面的輸出可以看到一個(gè)已配置的 eth0 接口和 lo(localhost)接口。lo 接口是特殊的虛擬接口,它經(jīng)過配置以使您在即便沒有網(wǎng)絡(luò)的情況下也可以在本地運(yùn)行 TCP/IP 應(yīng)用程序。TCP/IP 在運(yùn)行了!當(dāng)所有網(wǎng)絡(luò)接口都設(shè)置好并與相應(yīng)的 IP 地址關(guān)聯(lián)后,以太網(wǎng)網(wǎng)絡(luò)也可以用來(lái)傳送 TCP/IP 流量。LAN 上的系統(tǒng)現(xiàn)在可以用 IP 地址相互尋址,象 ping、telnet 和 ssh 這樣的命令將在機(jī)器間正常工作。名稱解析限制 然而,盡管能夠輸入 ping 192.168.1.1 這樣的命令,但還不能通過名稱引用機(jī)器。例如,不能輸入 ping mybox。要做到這一點(diǎn),需要在每臺(tái) Linux 機(jī)器上設(shè)置名為 /etc/hosts 的文件。在該文件中,要指定一個(gè) IP 地址,以及與每個(gè) IP 地址關(guān)聯(lián)的名稱(或多個(gè)名稱)。因此,如果我有帶三個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò),那么我的 /etc/hosts 文件看起來(lái)可能與下面相似:
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
請(qǐng)注意:/etc/hosts 包含“l(fā)ocalhost”到 127.0.0.1 IP 地址的強(qiáng)制映射。我還指定了 LAN 上所有系統(tǒng)的主機(jī)名稱,包括短名稱(“mybox”)和全限定名稱(“mybox.gentoo.org”)。將這個(gè) /etc/hosts 文件復(fù)制到每個(gè)系統(tǒng)后,我就能夠通過名稱而不僅是 IP 地址來(lái)引用系統(tǒng)了。ping mybox 現(xiàn)在將可以執(zhí)行了!使用 DNS 雖然這種方法可用于小型 LAN,但不便于在擁有許多系統(tǒng)的大型 LAN 上使用。對(duì)于這樣的配置,通常最好是將所有的 IP 至主機(jī)名映射信息存儲(chǔ)在一臺(tái)機(jī)器上,然后在這臺(tái)機(jī)器上設(shè)置所謂的“DNS 服務(wù)器”(域名服務(wù)服務(wù)器)。然后,可以配置每臺(tái)機(jī)器來(lái)聯(lián)系這臺(tái)特別的機(jī)器以接收最新的 IP 至名稱映射。要做到這一點(diǎn),可以在每臺(tái)機(jī)器上創(chuàng)建一個(gè)與下面相似的 /etc/resolv.conf 文件:
domain gentoo.org
nameserver 192.168.1.1
nameserver 192.168.1.2
在上面的 /etc/resolv.conf 中,我告訴系統(tǒng)所有非限定主機(jī)名(如與“testbox.gentoo.org”相對(duì)的“testbox”)都應(yīng)視為本地主機(jī)名。我還指定一臺(tái)運(yùn)行在 192.168.1.1 上的 DNS 服務(wù)器,以及一臺(tái)運(yùn)行在 192.168.1.2 上的備份服務(wù)器。實(shí)際上,幾乎所有與網(wǎng)絡(luò)連接的 Linux PC 都已經(jīng)在其 resolv.conf 文件中指定了名稱服務(wù)器,即使它們不在 LAN 上,也是如此。這是因?yàn)樗鼈冊(cè)谄湟蛱鼐W(wǎng)服務(wù)供應(yīng)商處被配置為使用 DNS 服務(wù)器,以便將主機(jī)名映射為 IP 地址(這樣,那個(gè)系統(tǒng)上的用戶就可以瀏覽 Web 并訪問象 ibm.com 這樣的著名站點(diǎn),而無(wú)需通過 IP 地址來(lái)引用它們!)。連接至外部世界 說(shuō)到與因特網(wǎng)連接,該如何配置我們簡(jiǎn)單的 3 系統(tǒng) LAN 以使它與“外部世界”的系統(tǒng)連接呢?通常,我們會(huì)購(gòu)買某種路由器將我們的以太網(wǎng)網(wǎng)絡(luò) DSL 或有線電視調(diào)制解調(diào)器、T1 或電話線連接?梢杂 IP 地址配置這個(gè)路由器以使它能夠與我們 LAN 上的系統(tǒng)通信。我們可以依次將 LAN 上每個(gè)系統(tǒng)都配置為將這個(gè)路由器作為其缺省路由或網(wǎng)關(guān)使用。這樣做的意義在于:對(duì)在我們 LAN 上的系統(tǒng)尋址的任何網(wǎng)絡(luò)數(shù)據(jù)將被路由至我們的路由器,路由器再負(fù)責(zé)將數(shù)據(jù)轉(zhuǎn)發(fā)至我們 LAN 之外的遠(yuǎn)程系統(tǒng)。通常,分發(fā)版的系統(tǒng)初始化腳本會(huì)為您處理缺省路由的設(shè)置。這些腳本執(zhí)行該操作所用的命令看起來(lái)可能與下面相似:
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。目標(biāo)為“0.0.0.0”的路由是缺省路由。家庭作業(yè)
迄今為止,我們向您非常簡(jiǎn)要地介紹了 Linux 聯(lián)網(wǎng)的概念。遺憾的是,我們根本沒有足夠的篇幅來(lái)介紹所有您需要知道的事情,例如如何選擇適當(dāng)?shù)?IP 地址、網(wǎng)絡(luò)掩碼、廣播地址等等。事實(shí)上,為了準(zhǔn)備 LPI Level 102 考試,您需要學(xué)習(xí)相當(dāng)多的知識(shí)。
幸運(yùn)的是,有關(guān) Linux 聯(lián)網(wǎng)的主題是記載得最全面的有關(guān) Linux 的主題之一。特別地,我們推薦閱讀
Linux Network Administrators Guide
(可以從
Linuxdoc.org 的“Guides”部分獲得
),尤其是從第 2 章到第 6 章。與我們對(duì) Linux 聯(lián)網(wǎng)難度適中的介紹相結(jié)合,Linux Network Administrators Guide 應(yīng)該能立刻讓您熟悉這一主題。
三。英特網(wǎng)服務(wù)
inetd 簡(jiǎn)介

單個(gè) Linux 系統(tǒng)可以提供數(shù)十、甚至數(shù)百個(gè)網(wǎng)絡(luò)服務(wù)。例如,使用 telnet 程序,您可以訪問遠(yuǎn)程系統(tǒng)上的 telnet 服務(wù)。同樣地,使用 ftp 程序,您可與遠(yuǎn)程系統(tǒng)上的 ftp 服務(wù)連接。
為了提供這些服務(wù),遠(yuǎn)程系統(tǒng)運(yùn)行每個(gè)服務(wù)器的實(shí)例(例如 /usr/sbin/in.telnetd 和 /usr/sbin/in.ftpd)以接受連接或者運(yùn)行 inetd。inetd 程序接受每個(gè)進(jìn)入的連接,然后根據(jù)其連接的類型啟動(dòng)處理該連接的適當(dāng)?shù)姆⻊?wù)。出于這個(gè)原因,inetd 也被稱為“因特網(wǎng)超級(jí)服務(wù)器”。
在典型的安裝了 Linux 的系統(tǒng)上,inetd 處理大多數(shù)進(jìn)入的連接。只有少數(shù)程序(如 sshd 和 lpd)處理它們自己的網(wǎng)絡(luò)通信而無(wú)需依靠 inetd 接受進(jìn)入的連接。
配置 inetd:/etc/services

上頁(yè)提到 inetd 根據(jù)類型對(duì)進(jìn)入的連接進(jìn)行分類。每個(gè)進(jìn)入的連接都在 TCP/IP 頭中包含一些標(biāo)識(shí)字段。我們最感興趣的字段是源地址、目標(biāo)地址協(xié)議和端口號(hào)。進(jìn)入連接由 inetd 根據(jù)端口號(hào)和協(xié)議(通常是 TCP 或 UDP,請(qǐng)查看 /etc/protocols 以獲得完整的 inetd 可以提供的服務(wù)列表)進(jìn)行分類。
每行都有如下格式:
service-name  port-number/protocol-name  aliases   # comment
例如,讓我們研究最上面的幾項(xiàng):
# 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ù)名稱和端口。如果您希望添加自己的端口,可以查詢
已分配端口號(hào)
列表。
配置 inetd;/etc/inetd.conf

inetd 的實(shí)際配置是在 /etc/inetd.conf 中完成的,配置格式如下:
service-name socket-type protocol wait-flag user server-program
因?yàn)榉⻊?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
對(duì)這兩個(gè)服務(wù)的配置為:使用 TCP 協(xié)議,并以 root 用戶的身份運(yùn)行服務(wù)器(in.telnetd 或 in.ftpd)。有關(guān) /etc/inetd.conf 中字段的完整說(shuō)明,請(qǐng)參閱 inetd(8) 手冊(cè)頁(yè)。
禁用服務(wù)

在 inetd 中禁用服務(wù)很簡(jiǎn)單:只要在 /etc/inetd.conf 注釋掉該服務(wù)所在的行即可。您可能不希望完全除去該行,以便以后需要時(shí)可以引用它。例如,有些系統(tǒng)管理員出于安全性的原因?qū)幵附?telnet(因?yàn)檫B接完全是明文):
# vi /etc/inetd.conf
[comment out undesired line]
# grep ^.telnet /etc/inetd.conf
#telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd
使用初始腳本停止/啟動(dòng) inetd
我們?cè)谏享?yè)對(duì) /etc/inetd.conf 所做的更改將在重新啟動(dòng) 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  ]
事實(shí)上,通?梢允褂谩皉estart”作為快捷方式:
# /etc/rc.d/init.d/inet restart
Stopping INET services:                   [  OK  ]
Starting INET services:                   [  OK  ]
用手工方式停止/啟動(dòng) inetd
如果上頁(yè)中的助手腳本不起作用,老式方法甚至更簡(jiǎn)單。可以使用 killall 命令停止 inetd:
# killall inetd
可以在命令行調(diào)用 inetd 來(lái)簡(jiǎn)單地再次啟動(dòng)它。它會(huì)自動(dòng)在后臺(tái)運(yùn)行:
# /usr/sbin/inetd
有一個(gè)快捷方式無(wú)需停止 inetd 就可命令它重新讀取配置文件:只要向它發(fā)送 HUP 信號(hào):
# killall -HUP inetd
此刻應(yīng)該不能 telnet 或 ftp 到這個(gè)系統(tǒng),因?yàn)?telnet 和 ftp 被禁用。嘗試用 telnet localhost 進(jìn)行檢查。如果需要 telnet 或 ftp 訪問,所需做的全部就是重新啟用它!
以下是我所遇到的情況:
# telnet localhost
telnet: Unable to connect to remote host: Connection refused
TCP 封裝器簡(jiǎn)介
tcp_wrappers 包提供了一個(gè)名為 tcpd 的很小的守護(hù)程序,該程序由 inetd 而不是實(shí)際的服務(wù)守護(hù)程序調(diào)用。tcpd 程序?qū)⒚總(gè)進(jìn)入連接的源地址編入日志,并可以過濾它們而只允許來(lái)自可信系統(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 封裝器進(jìn)行日志記錄
缺省情況下,連接不受限制但會(huì)被日志記錄下來(lái)。例如,我們可以重新啟動(dòng) inetd 以使在前頁(yè)做的更改生效。然后一些快速調(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 連接嘗試,因此看起來(lái)有些東西在工作了。因?yàn)?tcpd 提供一致的連接日志記錄服務(wù),這就免除了單個(gè)服務(wù)守護(hù)程序每次自己將連接編入日志的需要。事實(shí)上,在接受連接的工作方面,它與 inetd 相似,因?yàn)槟鞘姑總(gè)守護(hù)程序不需要接受自己的連接。Linux(UNIX)的簡(jiǎn)單程度真是不可思議!
用 TCP 封裝器限制對(duì)本地用戶的訪問

tcpd 程序配置為使用兩個(gè)文件:/etc/hosts.allow 和 /etc/hosts.deny。這兩個(gè)文件中行的格式為:
daemon_list : client_list [ : shell_command ]
按以下順序授權(quán)或拒絕訪問。搜索在第一次匹配時(shí)停止:

例如,若只允許對(duì)內(nèi)部網(wǎng)絡(luò)進(jìn)行 telnet 訪問,可通過在 /etc/hosts.deny 中設(shè)置策略(拒絕除 localhost 以外的其它來(lái)源的所有連接)著手:
in.telnetd: ALL EXCEPT LOCAL
用 TCP 封裝器將訪問限制為已知主機(jī) 無(wú)需重新裝入 inetd,因?yàn)槊慨?dāng) telnet 端口有連接時(shí),就會(huì)調(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)歷:拒絕表示成功。)要重新啟用來(lái)自自己網(wǎng)絡(luò)的訪問,可在 /etc/hosts.allow 中插入例外:
in.telnetd: .yourdomain.com
此刻我們就能夠再次成功地用 telnet 訪問系統(tǒng)了。而這僅僅觸及了 tcp_wrappers 的能力的表面。在 tcpd(8)hosts_access(5) 手冊(cè)頁(yè)中還有有關(guān) tcp_wrappers 的更多信息。xinetd:擴(kuò)展的 inetd 盡管 inetd 是經(jīng)典的因特網(wǎng)超級(jí)服務(wù)器,但最近對(duì)它進(jìn)行了多次改寫以試圖添加特性和更多的安全性。xinetd 程序在許多新近的分發(fā)版(包括 Red Hat 和 Debian)中取代了 inetd。部分?jǐn)U展的特性是:xinetd 配置
xinetd 的配置文件是 /etc/xinetd.conf。最常見的情況下,那個(gè)文件僅包含為其余服務(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) 手冊(cè)頁(yè)中獲得有關(guān) xinetd 的更多信息。
在 Web 上也有關(guān)于 inetd、tcp_wrappers 和 xinetd 的大量信息。請(qǐng)務(wù)必查看我們?cè)诒窘坛套詈笠徽拢▍⒖假Y料)中給出的這些工具的一些鏈接;它們能讓您更好地體會(huì)這些工具的能力和配置。

四。安全性概述
簡(jiǎn)介
維護(hù)一個(gè)完全安全的系統(tǒng)是不可能的。然而,只要勤奮,則有可能使 Linux 機(jī)器足夠安全,并讓大多數(shù)偶爾出現(xiàn)的駭客、腳本小子(script-kiddies)以及其它的“壞家伙”止步而去騷擾其他人。請(qǐng)記。簝H僅遵循本教程不會(huì)產(chǎn)生一個(gè)安全的系統(tǒng)。相反,我們希望您接觸到主要主題的多個(gè)方面,并向您提供一些有關(guān)如何入門的有用示例。
Linux 系統(tǒng)安全性可分為兩個(gè)部分:內(nèi)部安全性和外部安全性。內(nèi)部安全性指預(yù)防用戶無(wú)意或惡意地破壞系統(tǒng)。外部安全性指防止未授權(quán)用戶獲得對(duì)系統(tǒng)的訪問。
本章將首先介紹內(nèi)部安全性,然后介紹外部安全性,最后介紹一些常規(guī)指導(dǎo)原則和技巧。
日志文件的文件權(quán)限
內(nèi)部安全性可以是很大的任務(wù),這要看您對(duì)用戶的信任程度。這里介紹的指導(dǎo)原則是設(shè)計(jì)用來(lái)防止偶然用戶訪問敏感信息和防止不公平地使用系統(tǒng)資源。
至于文件權(quán)限,您可能希望修改以下三種情況的權(quán)限:
首先,/var/log 中的日志文件不需要是所有人都可以讀取的。沒有理由讓非 root 用戶窺視日志。為了創(chuàng)建具有適當(dāng)權(quán)限的日志,請(qǐng)參閱
LPI 101 系列第 4 部分
以獲取有關(guān) syslog 的更多信息,還請(qǐng)閱讀 logrotate(8) 手冊(cè)頁(yè)以獲取配置該程序的信息。
root 用戶其它文件的文件權(quán)限

其次,root 用戶的點(diǎn)文件對(duì)于普通用戶應(yīng)是不可讀的。檢查 root 用戶主目錄中的文件(ls -la)以確保它們受到適當(dāng)?shù)谋Wo(hù)。甚至可以使整個(gè)目錄僅對(duì) root 用戶可讀:
# cd
# pwd
/root
# chmod 700 .
用戶文件的文件權(quán)限 最后,用戶文件在缺省情況下通常被創(chuàng)建為所有人可讀。那可能不是用戶所期望的,而且它當(dā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) 手冊(cè)頁(yè)以獲取有關(guān)設(shè)置 umask 的更多信息。請(qǐng)注意:umask(2) 手冊(cè)頁(yè)涉及 C 函數(shù),但它所包含的信息也適用于 bash 命令。請(qǐng)參閱
LPI 101 系列第 3 部分
以獲取有關(guān) umask 的其它詳細(xì)信息。查找 SUID/SGID 程序 尋求 root 訪問權(quán)的惡意用戶總是會(huì)在系統(tǒng)上尋找設(shè)置了 SUID 或 SGID 位的程序。就象我們?cè)?
LPI 101 系列第 3 部分
中討論的那樣,這些位使程序始終作為擁有該文件的用戶或組運(yùn)行。有時(shí)這是程序正確運(yùn)行所必需的。問題是任何程序都可能包含允許用戶在不正確地使用程序時(shí)獲得特權(quán)的錯(cuò)誤。應(yīng)該仔細(xì)考慮每個(gè)程序以確定是否需要將其 SUID 或 SGID 位打開。系統(tǒng)上有些 SUID/SGID 程序可能是根本不需要的。要搜索具有這樣性質(zhì)的程序,可使用 find 命令。例如,可以在 /usr 目錄中啟動(dòng)對(duì) 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
在這個(gè)清單中,我已經(jīng)發(fā)現(xiàn)了需要更仔細(xì)檢查的侯選對(duì)象:lppasswd 是 CUPS 打印軟件分發(fā)版的一部分。因?yàn)闆]有在系統(tǒng)上提供打印服務(wù),所以我會(huì)考慮除去 CUPS,那也會(huì)除去 lppasswd 程序。lppasswd 中可能沒有危及安全性的錯(cuò)誤,但為什么要在不使用的程序上冒險(xiǎn)呢?同樣地,應(yīng)該關(guān)閉所有不使用的服務(wù)。您總是可以在需要時(shí)再啟用它們。用 ulimit 設(shè)置用戶限制 bash 中的 ulimit 命令提供了限制特定用戶的資源使用情況的方法。一旦限制降低,則在進(jìn)程的生命期內(nèi)無(wú)法提高該限制。此外,該限制會(huì)被所有子進(jìn)程繼承。結(jié)果是:可以在 /etc/profile 中調(diào)用 ulimit,而限制將以不能撤消的方式應(yīng)用于所有用戶(假設(shè)用戶正在運(yùn)行 bash 或另一個(gè) shell,該 shell 在登錄時(shí)運(yùn)行 /etc/profile)。要檢索當(dāng)前限制,可使用 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
以一種能實(shí)際提高系統(tǒng)安全性而不會(huì)對(duì)合法用戶造成麻煩的方式設(shè)置這些限制是相當(dāng)復(fù)雜的,所以調(diào)整這些設(shè)置時(shí)要小心。查找 SUID/SGID 程序 作為 ulimit 的一個(gè)示例,我們嘗試將一個(gè)進(jìn)程的 CPU 時(shí)間設(shè)置為 1 秒鐘,然后用一個(gè)忙循環(huán)使它超時(shí)。一定要確保啟動(dòng)新的 bash 進(jìn)程(象我們?cè)谙旅孀龅哪菢樱栽谄渲羞M(jìn)行嘗試;否則將被注銷!
# time bash
# ulimit -t 1
# while true; do true; done
Killed
real    0m28.941s
user    0m1.990s
sys     0m0.017s
在上面的示例中,“user”時(shí)間加上“sys”時(shí)間等于該進(jìn)程所用的全部 CPU 時(shí)間。當(dāng) bash 進(jìn)程到達(dá) 2 秒標(biāo)記時(shí),Linux 斷定它超過 1 秒的限制,因此該進(jìn)程被殺掉?岚?注:一秒鐘只是示例而已。不要對(duì)您的用戶這樣做!即使幾小時(shí)也是不對(duì)的,因?yàn)?X 真地很消耗時(shí)間(我當(dāng)前的會(huì)話已用掉了 69+ 小時(shí)的 CPU 時(shí)間)。在實(shí)際的實(shí)現(xiàn)中,您可能要對(duì)某些項(xiàng)而不是 CPU 時(shí)間執(zhí)行 ulimit。 您可能希望限制諸如同時(shí)登錄數(shù)量或磁盤使用情況之類的項(xiàng)。ulimit 還不能解決這些問題;您應(yīng)該轉(zhuǎn)而查看以下包之一:入侵預(yù)防
外部安全性可分為兩類:入侵預(yù)防和入侵檢測(cè)。采取入侵預(yù)防手段是為了防止未授權(quán)用戶訪問系統(tǒng)。如果這些手段失敗,那么入侵檢測(cè)在確定何時(shí)發(fā)生未授權(quán)訪問以及造成什么損壞方面或許有用。
完全的 Linux 安裝是巨大且復(fù)雜的系統(tǒng)。跟蹤已安裝的每一項(xiàng)是很困難的,而配置每個(gè)包的安全性特征就更困難了。安裝的包越少,則問題就變得越簡(jiǎn)單。入侵預(yù)防的第一步是除去不需要的包。回頭看看
LPI 101 系列第 4 部分
以對(duì)打包系統(tǒng)進(jìn)行回顧。
關(guān)閉未使用的網(wǎng)絡(luò)服務(wù)(超級(jí)服務(wù)器)

關(guān)閉未使用的網(wǎng)絡(luò)服務(wù)一直是提高入侵預(yù)防能力的好方法。例如,如果正在運(yùn)行因特網(wǎng)超級(jí)服務(wù)器(如本教程前面描述的 inetd 或 xinetd),那么 in.rshd、in.rlogind 和 in.telnetd 通常都在缺省情況下啟用。這些網(wǎng)絡(luò)服務(wù)幾乎都已被更安全的替代項(xiàng)(如 ssh)所取代。
要在 inetd 中禁用服務(wù),只需在 /etc/inetd.conf 中在適當(dāng)?shù)男星懊婕由稀?”將其注釋掉;然后重新啟動(dòng) inetd 即可。(這在本教程前面已有描述,若需要復(fù)習(xí),可返回幾頁(yè)快速瀏覽。)
要在 xinetd 中禁用服務(wù),可以執(zhí)行與 /etc/xinetd.d 中適當(dāng)?shù)拇a片段相似的工作。例如,要禁用 telnet,可以將 /etc/xinetd.d/telnet 文件的整個(gè)內(nèi)容注釋掉,或簡(jiǎn)單地刪除該文件。重新啟動(dòng) xinetd 以完成此過程。
如果正在結(jié)合 inetd 使用 tcpd,或如果正在使用 xinetd,還可以選擇限制與可信的主機(jī)進(jìn)行的進(jìn)入連接。對(duì)于 tcpd,可參閱本教程的前幾章。對(duì)于 xinetd,可在 xinetd.conf(5) 手冊(cè)頁(yè)中搜索“only_from”。
關(guān)閉未使用的網(wǎng)絡(luò)服務(wù)(獨(dú)立服務(wù)器)

有些服務(wù)器并不由 inetd 或 xinetd 啟動(dòng),但卻作為“獨(dú)立”服務(wù)器始終運(yùn)行著。這樣的服務(wù)器通常是 atd、lpd、sshd、nfsd 和其它服務(wù)器。事實(shí)上,inetd 和 xinetd 本身都是獨(dú)立服務(wù)器,如果在它們各自的配置文件中注釋掉所有的服務(wù),就選擇了將它們完全關(guān)閉。
獨(dú)立服務(wù)器通常在系統(tǒng)引導(dǎo)或更改運(yùn)行級(jí)別時(shí)由 init 系統(tǒng)啟動(dòng)。如果不記得運(yùn)行級(jí)別是如何工作的,可以看看
LPI 101 系列第 4 部分

要使 init 系統(tǒng)不再啟動(dòng)服務(wù)器,在每個(gè)運(yùn)行級(jí)別目錄中找到指向該服務(wù)器啟動(dòng)腳本的符號(hào)鏈接,然后刪除它。運(yùn)行級(jí)別目錄的名稱通常為 /etc/rc3.d 或 /etc/rc.d/rc3.d(針對(duì)運(yùn)行級(jí)別 3)。還需要檢查其它運(yùn)行級(jí)別。
除去服務(wù)的運(yùn)行級(jí)別符號(hào)鏈接后,仍需要關(guān)閉當(dāng)前運(yùn)行的服務(wù)器。最好用服務(wù)的初始化腳本完成這一操作,通常可以在 /etc/init.d 或 /etc/rc.d/init.d 中找到這一腳本。例如,要關(guān)閉 sshd:
# /etc/init.d/sshd stop
* Stopping sshd... [ ok ]
測(cè)試更改
在修改 inetd 或 xinetd 配置以禁用或限制服務(wù),或用服務(wù)器初始化腳本關(guān)閉該服務(wù)器后,應(yīng)該對(duì)所做的更改加以測(cè)試。可以使用 telnet 客戶機(jī)通過指定服務(wù)名稱或號(hào)碼來(lái)測(cè)試 tcp 端口。例如,要驗(yàn)證 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
除了標(biāo)準(zhǔn) telnet 客戶機(jī)以外,還應(yīng)考慮使用實(shí)用程序以測(cè)試系統(tǒng)“開放程度”的可能性。我們推薦使用 netcat 和 nmap。
ncat 是“網(wǎng)絡(luò)瑞士軍刀”:它是使用 TCP 或 UDP 協(xié)議、跨越網(wǎng)絡(luò)連接讀寫數(shù)據(jù)的簡(jiǎn)單 UNIX 實(shí)用程序。nmap 是用于網(wǎng)絡(luò)探測(cè)或安全性審計(jì)的實(shí)用程序。具體而言,nmap 掃描端口以確定哪個(gè)端口打開了。
可以在本教程最后一章(參考資料)中找到指向這些實(shí)用程序的鏈接。
拒絕登錄以進(jìn)行維護(hù)

除了以上方法外,還有通過創(chuàng)建 /etc/nologin 文件來(lái)拒絕登錄的普通方法。通常這一方法用于短期維護(hù)操作。仍然可以允許以 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
完成維護(hù)后,一定要?jiǎng)h除這個(gè)文件,否則在您想起以前,沒人能登錄!我可沒這么做過,對(duì),我沒有... ;-)
iptables(ipchains)簡(jiǎn)介

iptables 和 ipchains 命令用于在運(yùn)行的 Linux 內(nèi)核中調(diào)整和檢查網(wǎng)絡(luò)信息包過濾器規(guī)則。ipchains 命令用于 2.2.x 版本內(nèi)核,盡管它仍可用于 2.4.x 內(nèi)核,但已被 iptables 取代。
可設(shè)置信息包過濾器規(guī)則進(jìn)行防火墻和路由器的活動(dòng)?梢詫(duì) iptables 命令加上 -L 選項(xiàng)來(lái)檢查當(dāng)前的規(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
這是一個(gè)非常開放的系統(tǒng)示例,沒有啟用路由或防火墻。
iptables 和 Linux 信息包過濾器

有效地使用 Linux 信息包過濾器需要對(duì) TCP/IP 聯(lián)網(wǎng)及其如何在 Linux 內(nèi)核中實(shí)現(xiàn)有扎實(shí)的理解。netfilter 主頁(yè)(請(qǐng)參閱本教程最后一章的參考資料,以獲得鏈接)是學(xué)習(xí)更多知識(shí)的好去處。
在能自如地構(gòu)建自己的規(guī)則集以前,有許多腳本可以讓您入門,只要您信任它們的作者即可。最完整的腳本之一是 gShield(請(qǐng)參閱參考資料)。您可以調(diào)整其注釋良好且相當(dāng)簡(jiǎn)單的配置文件以設(shè)置信息包過濾器規(guī)則最常規(guī)的格式。
入侵檢測(cè) ― 系統(tǒng)日志(syslog)

入侵檢測(cè)通常被那些相信自己安置的入侵預(yù)防設(shè)備的系統(tǒng)管理員所忽略。不幸的是,這意味著一旦黑客找到可以入侵的細(xì)微漏洞,在注意到他們的存在以前,系統(tǒng)可能很長(zhǎng)一段時(shí)間都處于他們的控制之下。
入侵檢測(cè)最基本的形式是注意系統(tǒng)日志。這些文件通常出現(xiàn)在 /var/log 目錄中,不過實(shí)際的文件名會(huì)因分發(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
要理解所有這些消息可能需要進(jìn)行一些實(shí)踐,但大多數(shù)重要消息都相當(dāng)清楚。例如,在日志的末尾,我們可以看到用戶“chouser”試圖使用 su 成為 root 用戶,但失敗了。
入侵檢測(cè) ― tripwire

有許多可用的包可以對(duì)整個(gè)文件系統(tǒng)進(jìn)行“快照”,然后將它與較早的快照比較以了解什么發(fā)生了更改。若能明確地定義哪些文件作為系統(tǒng)正常操作的一部分應(yīng)該發(fā)生更改,則這些包能很快提醒黑客的存在及其活動(dòng)。
Tripwire 是最流行的入侵檢測(cè)包之一(請(qǐng)參閱本教程末尾的參考資料以獲取鏈接)。安裝 tripwire 后,必須定制它的配置文件以使它知道哪些文件應(yīng)該更改而哪些不應(yīng)更改。還需要告訴它如何向您發(fā)送有關(guān)發(fā)生什么更改的報(bào)告,以及它應(yīng)隔多久運(yùn)行一次(通常每天一次)。
入侵檢測(cè) ― portsentry

PortSentry 包來(lái)自 Psionic Technologies,它實(shí)際上有點(diǎn)介于入侵預(yù)防與檢測(cè)之間。該包監(jiān)控網(wǎng)絡(luò)連接,并且如果它看到任何它認(rèn)為“可疑”的與系統(tǒng)連接的嘗試,它會(huì)把這一事件編入日志然后阻止它再次發(fā)生。該包也可以在本教程末尾的參考資料中找到。
當(dāng)安裝了該包并運(yùn)行它時(shí),將能夠在 syslog 中看到所有嘗試的連接,并看到 PortSentry 如何對(duì)它們做出反應(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ī)指南:保持軟件為最新
因?yàn)樗熊浖伎赡苡邪踩月┒,所以重要的是:只要獲得包的安全性修正包就立刻安裝。這是安全專家最常提出的一條建議,也是管理員新手們最常忽略的一條建議。不要吃過苦頭才吸取教訓(xùn) ― 機(jī)器因?yàn)槟鲆暳耸寡a(bǔ)丁程序保持最新而被人通過存在數(shù)年之久的后門侵入。
對(duì)于開放源碼和封閉源碼哪個(gè)更安全的爭(zhēng)論非常激烈。迄今最好的結(jié)論是:管理正確時(shí),兩者都足夠安全,這里的管理包括保持安全性補(bǔ)丁程序?yàn)樽钚拢?br /> 有幾個(gè)網(wǎng)站可以幫助保持軟件為最新,并有助于提防已知的威脅。包括特別注意安全性的
CERT

SecurityFocus 的 BugTraq 列表
,以及通常的軟件更新站點(diǎn)(象
freshmeat.net
)和分發(fā)版的主頁(yè)。我們還將在參考資料中重復(fù)這些 URL,不過安全性真的非常重要 ― 如果還不熟悉這些站點(diǎn)的話,建議您現(xiàn)在就花幾分鐘訪問頭兩個(gè)站點(diǎn)。
常規(guī)指南:高質(zhì)量密碼
聽起來(lái)可能很普通,為自己選擇高質(zhì)量密碼,并且“鼓勵(lì)”(也就是命令)用戶也這樣做,以形成良好的安全性的基石。記住要避免常見的詞和名字,特別是與自己有關(guān)的任何事物,如朋友的名字、工作地點(diǎn)或?qū)櫸锏拿。還要避免可猜測(cè)的數(shù)字,如生日或周年紀(jì)念日。相反要嘗試使用字母、數(shù)字和標(biāo)點(diǎn)的隨機(jī)組合。
常規(guī)指南:測(cè)試安全性
測(cè)試系統(tǒng)的安全性很重要,但不要讓一次成功的測(cè)試使您產(chǎn)生安全性的錯(cuò)誤感覺。這些測(cè)試工具找不到漏洞并不能保證一些具有知識(shí)和想象力的人 ― 并且他們有一大堆時(shí)間 ― 也會(huì)失敗。
我們已經(jīng)提到了 nmap 和 netcat 可用于測(cè)試網(wǎng)絡(luò)安全性。還應(yīng)該檢查薄弱的密碼,特別當(dāng)系統(tǒng)有多個(gè)用戶時(shí),更是如此。有許多工具可以使用,如我們?cè)诒窘坛棠┪驳摹皡⒖假Y料”中提到的那些工具。
五。打印簡(jiǎn)介 這一章將介紹 Linux 上的經(jīng)典 UNIX 打印系統(tǒng)(有時(shí)被稱為 Berkeley LPD)的設(shè)置和使用。其它可用于 Linux 的系統(tǒng)則不在這里介紹;請(qǐng)參閱本教程末尾的參考資料一章以獲取有關(guān)這些系統(tǒng)的信息。物理上安裝打印機(jī)超出了本教程的范圍。當(dāng)打印機(jī)正確連接后,則要安裝打印假脫機(jī)程序守護(hù)程序,以使網(wǎng)絡(luò)上的機(jī)器(包括運(yùn)行假脫機(jī)程序的機(jī)器)能夠?qū)⒋蛴∽鳂I(yè)發(fā)送給打印機(jī)。安裝打印假脫機(jī)程序守護(hù)程序(lpd) 最好的 LPD 打印假脫機(jī)程序之一是
LPRng
。其安裝方法取決于分發(fā)版;請(qǐng)參閱
LPI 102 系列第 1 部分
以獲取有關(guān)在 Red Hat 或 Debian 中安裝軟件包的詳細(xì)信息。安裝打印假脫機(jī)程序守護(hù)程序(正式名稱為行式打印機(jī)守護(hù)程序)以后,就可以從命令行運(yùn)行。以普通用戶身份登錄,然后試著運(yùn)行以下命令:
$ /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
既然已安裝了守護(hù)程序,則應(yīng)確保將它設(shè)置為自動(dòng)運(yùn)行。您分發(fā)版的 LPRng 包可能已經(jīng)替您進(jìn)行了設(shè)置,但如果沒有的話,請(qǐng)參閱
LPI 101 系列第 4 部分
以獲取有關(guān)使用運(yùn)行級(jí)別來(lái)自動(dòng)啟動(dòng)象 lpd 這樣的守護(hù)程序的信息。基本打印機(jī)設(shè)置(/etc/printcap) 打印假脫機(jī)程序守護(hù)程序起著一種管道的作用。它接受來(lái)自各個(gè)打印客戶機(jī)的打印作業(yè),然后將這些作業(yè)傳遞到適當(dāng)?shù)拇蛴C(jī)。當(dāng)打印機(jī)忙時(shí),這些作業(yè)就“假脫機(jī)”,等待打印機(jī)會(huì)。當(dāng)在本地打印機(jī)上打印時(shí),該“管道”的兩端都由配置文件 /etc/printcap(有時(shí)位于 /etc/lprng/printcap)描述。printcap(printer capabilities 的縮寫)中的每一項(xiàng)描述一個(gè)打印假脫機(jī)文件:
$ 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:
請(qǐng)注意:項(xiàng)的最后一行沒有尾隨的反斜杠()。您的分發(fā)版可能有其它項(xiàng),并且可能更復(fù)雜,但它們都大致有這樣的形式。首先是項(xiàng)的名稱 lp,隨后是對(duì)這個(gè)假脫機(jī)文件較長(zhǎng)的描述。關(guān)鍵字/值對(duì) lp=/dev/lp0 指定將要打印假脫機(jī)文件中打印作業(yè)的 Linux 設(shè)備,而 sd 關(guān)鍵字則給出打印作業(yè)前存放它們的目錄。余下的關(guān)鍵字/值對(duì)則提供有關(guān)連接到 /dev/lp0 的打印機(jī)類型的詳細(xì)信息。printcap 手冊(cè)頁(yè)對(duì)它們做了描述,稍后我們將介紹其中的一部分。創(chuàng)建假脫機(jī)文件目錄 如果創(chuàng)建一個(gè)打印假脫機(jī)項(xiàng),則需要確保假脫機(jī)文件的目錄存在并且具有正確的權(quán)限。如果希望打印機(jī)守護(hù)程序(通常以用戶 lp 的身份運(yùn)行)能訪問假脫機(jī)文件目錄,則必須以 root 用戶的身份運(yùn)行以下命令:
# 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 包含一個(gè)用于檢查 printcap 的有用工具。它甚至?xí)䴙槟O(shè)置假脫機(jī)文件目錄(如果您忘了以手工方式這么做的話):
# checkpc -f
最后,重新啟動(dòng) lpd。為了使更改生效,每次更改 printcap 時(shí)都需要這么做。您可能需要使用 lpd 而不是 lprng:
# /etc/init.d/lprng restart
較老的 Berkeley 打印系統(tǒng)不包含 checkpc 工具,所以您必須親自在各臺(tái)打印機(jī)上打印測(cè)試頁(yè),以確保 printcap 和打印假脫機(jī)文件目錄是正確的。使用打印假脫機(jī)程序客戶機(jī) 打印假脫機(jī)程序本身帶有幾個(gè)客戶機(jī)以便與服務(wù)器守護(hù)程序通信。使用最多的可能是 lpr,它僅僅將文件發(fā)送至服務(wù)器以在假脫機(jī)文件中排隊(duì)然后打印。要嘗試該程序,首先找到或制作一個(gè)小的樣本文本文件。然后輸入命令:
$ lpr sample.txt
若該命令起作用,則在屏幕上應(yīng)該看不到響應(yīng),但打印機(jī)應(yīng)該開始運(yùn)行,而且應(yīng)很快就能打印出該樣本文本的硬拷貝。如果該命令執(zhí)行的輸出看起來(lái)不太正確,不必?fù)?dān)心;稍后我們將設(shè)置過濾器,它應(yīng)能確保所有種類的文件格式都能正確地打印?梢杂 lpq 命令檢查打印假脫機(jī)文件隊(duì)列中的打印作業(yè)列表。選項(xiàng) -P 指定要顯示的隊(duì)列名稱;如果不使用該選項(xiàng),則 lpq 將使用缺省打印假脫機(jī)文件(就象 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 命令。若一個(gè)作業(yè)花的時(shí)間過長(zhǎng),或者用戶不小心發(fā)送了多份相同文件,則可能要執(zhí)行該命令。只要從上面列出的 lpq 命令復(fù)制作業(yè)標(biāo)識(shí)即可:
$ lprm chouser@localhost+670
Printer lp@localhost:
  checking perms 'chouser@localhost+670'
  dequeued 'chouser@localhost+670'
可以使用交互式工具 lpc 對(duì)打印假脫機(jī)文件進(jìn)行許多其它操作。請(qǐng)參閱 lpc 手冊(cè)頁(yè)以獲取詳細(xì)信息。打印至遠(yuǎn)程 LPD 服務(wù)器 即使本地機(jī)器上沒有打印機(jī),仍可以使用 lpd 跨越網(wǎng)絡(luò)將打印作業(yè)發(fā)送至與別的機(jī)器相連的打印機(jī)。在客戶機(jī)機(jī)器上,可以向 /etc/printcap 添加一條看似本地打印機(jī)而實(shí)際上將打印作業(yè)路由至服務(wù)器機(jī)器的打印假脫機(jī)文件項(xiàng)。該項(xiàng)看起來(lái)應(yīng)與下面相似:
farawaylp|Remote printer entry:
        :rm=faraway:
        :rp=lp:
        :sd=/var/spool/lpd/farawaylp:
        :mx#0:
        :sh:
這里我們希望執(zhí)行打印作業(yè)的機(jī)器名稱是 faraway,而臺(tái)機(jī)器上打印機(jī)的名稱是 lp。假脫機(jī)文件目錄 /var/spool/lpd/farawaylp 是打印作業(yè)在能夠被發(fā)送至遠(yuǎn)程打印假脫機(jī)程序以前在本地保存的位置,而且在打印作業(yè)能發(fā)送到打印機(jī)以前,可能還要在遠(yuǎn)程打印假脫機(jī)程序處再次對(duì)它們進(jìn)行假脫機(jī)處理。同樣地,將需要?jiǎng)?chuàng)建這個(gè)假脫機(jī)文件目錄并設(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
在本地,我們將這個(gè)遠(yuǎn)程打印機(jī)命名為 farawaylp,因此我們可以將打印作業(yè)發(fā)送至 farawaylp:
$ lpr -Pfarawaylp sample.txt打印至遠(yuǎn)程的 MS Windows 或 Samba 服務(wù)器

感謝 Samba,打印至遠(yuǎn)程 Microsoft Windows 打印服務(wù)器只稍稍復(fù)雜一點(diǎn)。首先,添加本地 printcap 項(xiàng):
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(hù)程序用于鎖定而使用的設(shè)備(此例中是 /dev/null)。但實(shí)際上將沒有打印作業(yè)被發(fā)送到那里。
不要忘記創(chuàng)建假脫機(jī)文件目錄!
# 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
在您喜愛的編輯器中,在上面命名的假脫機(jī)文件目錄中創(chuàng)建一個(gè) .config 文件。在本例中,該文件為 /var/spool/lpd/smb/.config:
server="WindowsServerName"
service="PrinterName"
password=""
user=""
調(diào)整這些值以指向希望使用的 Windows 機(jī)器和打印機(jī)名稱,然后就可以使用以下命令:
$ lpr -Psmb sample.txt
smbprint 腳本應(yīng)該與 Samba 一起提供,但該腳本并不包含在所有分發(fā)版中。如果在系統(tǒng)上找不到這個(gè)腳本,可以從
Samba HOWTO
獲得。
Magicfilter
迄今我們只嘗試了打印文本文件,這還不是特別令人興奮。通常,任何一臺(tái)打印機(jī)只能打印一種格式的圖形文件 ― 然而我們希望打印的格式有幾十種:PostScript、gif、jpeg 等等。名為
Magicfilter
的程序起著輸入過濾器的作用,很象 smbprint 的所為。Magicfilter 并不轉(zhuǎn)換文件格式,而是提供標(biāo)識(shí)您正在嘗試打印的文檔類型的框架,然后通過適當(dāng)?shù)霓D(zhuǎn)換工具運(yùn)行該文檔:轉(zhuǎn)換工具必須單獨(dú)安裝。到目前為止,最重要的轉(zhuǎn)換工具是
Ghostscript
,它可以將文件從 Postscript 格式轉(zhuǎn)換成許多打印機(jī)的本機(jī)格式。
調(diào)整 printcap 以指向 Magicfilter

安裝這些工具后,只需再調(diào)整 printtcap 一次即可。添加 if 關(guān)鍵字以指向與打印機(jī)配合的 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 中有用于許多不同打印機(jī)和打印機(jī)設(shè)置的過濾器,因此要確保使用的是適合您打印機(jī)的過濾器。每個(gè)過濾器都是一個(gè)文本文件,并且打印機(jī)的全稱常常位于頂部。當(dāng)您不清楚過濾器的文件名是什么時(shí),這會(huì)對(duì)您有所幫助。
我還向這個(gè) printcap 項(xiàng)添加了 gqfilter 標(biāo)志,這樣,即使打印作業(yè)來(lái)自遠(yuǎn)程打印機(jī),也可使用輸入過濾器。這種方法只適用于 LPRng。
因?yàn)檩^早的時(shí)候就設(shè)置了 /var/spool/lpd/lp 打印假脫機(jī)文件目錄,所以我只需要檢查 printcap 語(yǔ)法,然后重新啟動(dòng)服務(wù)器:
# checkpc -f
# /etc/init.d/lprng restart
現(xiàn)在您能夠打印各種文檔,包括 Postscript 文件。換句話說(shuō),現(xiàn)在可以從您喜愛的 Web 瀏覽器的菜單中選擇“Print”來(lái)進(jìn)行工作了。
Magicfilter 的替代項(xiàng) Apsfilter
Apsfilter 提供了 Magicfilter 的許多特性,而且還能幫助您設(shè)置假脫機(jī)文件目錄和 printcap 項(xiàng)等等。您仍需要確保安裝了 Ghostscript,然后按照
Apsfilter handbook
提供的十分完整的指示信息進(jìn)行操作。
六。參考資料與反饋參考資料可以在文章
Configuring inetd.conf securely

xinetd 主頁(yè)
中學(xué)習(xí)有關(guān)配置 inetd 和 xinetd 的更多信息。當(dāng)向 /etc/services 添加自己的服務(wù)名稱和端口時(shí),要記得首先檢查它們與
已分配端口號(hào)
是否沖突。
netfilter 主頁(yè)
是開始學(xué)習(xí)更多有關(guān) iptables 和 Linux 信息包過濾器知識(shí)的好地方。在能自如地構(gòu)建自己的規(guī)則集以前,可能需要使用現(xiàn)有的腳本。我們推薦
gShield
。有用的安全性工具包括
Tripwire
(最流行的入侵檢測(cè)包)和
Psionic Technologies

PortSentry
(入侵預(yù)防與檢測(cè)的混合體)。(LinuxWorld 文章
How to stop crackers with PortSentry
提供了有關(guān)安裝和配置的建議。)最后,一定要熟悉 Wietse Venema 的
TCP 封裝器
,它允許對(duì)您系統(tǒng)的連接進(jìn)行監(jiān)控和控制?梢栽诰查看
TCP 封裝器自述文件
(也可以從 /usr/share/doc/tcp_wrappers-7.6 獲得)。用
可插入認(rèn)證模塊
(也稱為 PAM)可以更方便地認(rèn)證用戶。您的網(wǎng)絡(luò)容易受到攻擊嗎?考慮嘗試下面兩個(gè)實(shí)用程序以檢查系統(tǒng)的薄弱環(huán)節(jié)(或“開放程度”):
netcat
是使用 TCP 或 UDP 協(xié)議跨越網(wǎng)絡(luò)連接來(lái)讀寫數(shù)據(jù)的簡(jiǎn)單 UNIX 實(shí)用程序;
nmap
是用于網(wǎng)絡(luò)探測(cè)或安全性審計(jì)的實(shí)用程序。具體而言,nmap 掃描端口以確定打開了哪個(gè)端口。測(cè)試猜出您密碼(以及您用戶的密碼)的容易程度的密碼檢查器和其它工具包括來(lái)自
Openwall Project

John the Ripper
,它是專為此目的而構(gòu)建的。您可能還希望嘗試象
SAINT
那樣的綜合檢查器。下面的安全性站點(diǎn)應(yīng)該在所有系統(tǒng)管理員的“最常訪問”站點(diǎn)之列:
CERT
是由卡內(nèi)基-梅隆大學(xué)運(yùn)作、受聯(lián)邦政府資助的研究中心。他們研究因特網(wǎng)的安全性和弱點(diǎn),發(fā)布安全性警告并研究其它安全性問題。
BugTraq
(由 Security Focus 托管)是對(duì)計(jì)算機(jī)安全性弱點(diǎn)討論和聲明的完全公開和適度的郵件列表。即使你對(duì)這方面的管理不是特別有興趣,對(duì)這個(gè)列表的訂閱也是很有價(jià)值的,因?yàn)楹?jiǎn)單地瀏覽標(biāo)題欄也許就可以提醒您系統(tǒng)上的弱點(diǎn),而您也許會(huì)很晚才會(huì)發(fā)現(xiàn)這些弱點(diǎn),或者根本發(fā)現(xiàn)不了。我們強(qiáng)烈推薦的、能使您更好地掌握 Linux 機(jī)器安全性的更多安全性站點(diǎn)包括:
Linux Security HOWTO
、
O'Reilly 安全性頁(yè)面
以及理所當(dāng)然的 developerWorks
Security 專區(qū)
(盡管它更強(qiáng)調(diào)安全的編程實(shí)踐,但管理安全性也是其特色)。您要查看的打印和假脫機(jī)資源包括:
LPRng 打印假脫機(jī)程序主頁(yè)
和來(lái)自 Printing HOWTO 的
假脫機(jī)軟件概述
。當(dāng)然,
Printing HOWTO
本身就是有價(jià)值的資源,就象
LinuxPrinting.org
一樣。要獲得特定打印機(jī)的幫助信息,請(qǐng)查閱
Serial HOWTO
。
USB 指南
也提供了有關(guān)(您猜得沒錯(cuò))USB 打印機(jī)的有價(jià)值信息。Samba 在異構(gòu)網(wǎng)絡(luò)中有很大幫助。當(dāng)為這種環(huán)境設(shè)置打印時(shí),您要查閱
Samba 主頁(yè)
以及
Samba HOWTO
,那里有很好的打印機(jī)共享詳細(xì)信息。我們討論的兩個(gè)打印機(jī)過濾器
Magicfilter

Apsfilter
。還記得兩者都需要轉(zhuǎn)換程序嗎(我們推薦
Ghostscript
),因?yàn)樗鼈儽旧聿荒苓M(jìn)行轉(zhuǎn)換。如果使用后者,您還將發(fā)現(xiàn)
Apsfilter handbook
非常有用。另外,我們推薦下列用于學(xué)習(xí)有關(guān) Linux(特別是準(zhǔn)備 LPI 證書考試)的更多知識(shí)的一般資源:您將在
http://www.linuxdoc.org
中收集了大量的指南、HOWTO、FAQ 和手冊(cè)頁(yè)。請(qǐng)一定還要查看
Linux Gazette

LinuxFocus
。Linux Network Administrator's guide 可以從
Linuxdoc.org 的“Guides”一節(jié)
獲得,這是對(duì)本教程系列的極佳補(bǔ)充 ― 不妨一讀!您會(huì)發(fā)現(xiàn) Eric S. Raymond 的
Unix and Internet Fundamentals HOWTO
也很有幫助。在 developerWorks 上的 Bash by example 文章系列中,學(xué)習(xí)如何使用 bash 編程構(gòu)造來(lái)編寫自己的 bash 腳本。本系列(特別是第一和第二部分)會(huì)是 LPI 考試極佳的額外準(zhǔn)備資料。Mark Chapman 編寫的
Technical FAQ for Linux Users
是一篇長(zhǎng)達(dá) 50 頁(yè)的內(nèi)容深入的常問的 Linux 問題列表,并有詳細(xì)的回答。FAQ 本身是 PDF(Acrobat)格式的。如果您是初級(jí)或中級(jí) Linux 用戶,那么您確實(shí)應(yīng)查閱該 FAQ。同樣由 Mark 編寫的
為 Windows 用戶準(zhǔn)備的簡(jiǎn)明 Linux 詞匯表
也非常好。如果您還不太熟悉 vi 編輯器,那么您應(yīng)該查看 Daniel 編寫的
關(guān)于 Vi 的教程
。這篇 developerWorks 教程有條理而且快速地介紹這個(gè)功能強(qiáng)大的文本編輯器。如果您不知道如何使用 vi,請(qǐng)考慮這份必讀資料。有關(guān) Linux Professional Institute 的更多信息,請(qǐng)?jiān)L問
LPI 主頁(yè)
。您的反饋我們期盼著您對(duì)本教程的反饋。此外,歡迎您通過
drobbins@gentoo.org
與第一作者 Daniel Robbins 直接聯(lián)系。

本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/3984/showart_11579.html




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2