Red Hat Linux 253 实验部分
?
RHCE253實驗(服務管理)
試驗2
域名系統
估計時間: 2個小時
目標: 安裝和配置一個DNS服務器
試驗的起點: 標準的Red Hat Linux安裝
介紹
本次實驗指導您通過使用Berkeley Internet Name守護進程來配置域名服務。使用模板文件作為指導,您將
實現一個僅有緩存的域名服務器
配置named作為example.com的從域名服務器
配置named作為主域名服務器用于轉發和IP反查詢
在整個試驗中,您使用的機器名稱和域名將基于您使用的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成您的工作站的號碼(您的IP地址的最后一個部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您應該將stationX.domainX.example.com轉換成station3.domain3.example.com。
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉(顯然,在實際使用中您可以利用Linux內核的防火墻機制,然而我們在這里關掉它是為了減少潛在的問題)。
本次試驗中以root身份來使用下面命令達成上面的要求:
service iptables stop
chkconfig iptables off
初始化安裝
A. 獲得必要的文件
需要bind,bind-utils和caching-nameserver軟件包。使用`rpm –q`來決定這些軟件包是否被安裝。如果沒有被安裝,通過輸入如下命令來安裝(以root身份):
mkdir /mnt/server1; mount server1:/var/ftp/pub /mnt/server1
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-9*
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-utils*
rpm –Uvh /mnt/server1/RedHat/RPMS/caching-nameserver*
RPM軟件包bind包括DNS守護進程和支持腳本,但是沒有配置和區域文件。caching-nameserver提供了一個通用的配置和區域文件。
B. 配置本地的解析器
配置您的主機使得它能夠被用來作為域名服務,而不是192.168.0.254。
注意:直到您的域名服務器被正確安裝和配置,您的機器的DNS服務不會奏效。您也應該注意到當您的系統重新啟動的時候或者重新設定您的網絡的時候您的/etc/resolve.conf將會被改寫(除非您對您的網絡界面設定了在本講座中提及的PEERDNS)
按照如下編輯您的解析器配置文件
/etc/resolv.conf
search domainX.example.comnameserver 192.168.0.X
(記住將X替換成您的工作站的號碼)
第一行定義了如果出現簡單的不符合完整域名的主機名稱時默認添加的缺省域。第二行指定了將主機192.168.0.X (您的機器)來作為DNS查詢的解析器。
為了簡化情況,將除了localhost主機名稱的定義從您的主機名稱配置文件中刪除。
/etc/hosts
127.0.0.1 localhost localhost.localdomain
該步驟并不是必需的,但是可以簡化DNS的調式。有時候安裝程序會將符合完整域名的主機名放在localhost的這一行,這樣一來會使得您無法準確的確定您的域名服務器配置是否正確。
步驟1:配置一個僅有緩存的域名服務器
第一個配置您將建立一個僅有緩存的域名服務器。這種類型的域名服務器對于任何區域都不授權。僅有緩存的域名服務器被設定為主域名服務器。當主機名稱或者IP地址需要被解析的時候,僅有緩存的域名服務器將查詢請求轉發到另外一臺域名服務器或者到根域名服務器來決定授權的用來解析的域名服務器。一旦解析完成,僅有緩存的域名服務器在緩存中存儲解析的信息,該解析信息有一段的生存周期。以后的查詢將會變得很快。
您已經安裝完對于此項配置所有必須的文件。按照如下步驟來配置域名服務器:
1. 在由caching-nameserver提供的/etc/named.conf中的“option”區域添加下面的內容:
forwarders {192.168.0.254; };
forward only;
這將導致您工作站上的僅有緩存的域名服務器轉發其不能解析的DNS查詢到在192.168.0.254的域名服務器,并且如果超時,不與根域名服務器直接聯系。
2. 啟動named: service named start
3. 測試您的配置使用host或者dig來查詢一些example.com名稱和一些真實的Internet域名(如果您有Internet訪問接口的話)
步驟2:配置一個從域名服務器
一個從域名服務器將為一個區域提供授權的回答,但不是區域的授權開始。您現在將重新配置您的域名服務器作為example.com區域和0.168.192.in-addr.arpa區域的從域名服務器。
1. 在您的/etc/named.conf文件中添加如下行
zone “example.com” {
type slave;
masters { 192.168.0.254; };
file “slave-example.com.zone”;
};
zone “0.168.192.in-addr.arpa” {
type slave;
masters { 192.168.0.254; };
file “slave-192.168.0.zone”;
};
2. 重新啟動named: servcie named restart
3. 檢查slave-example.com.zone和slave-192.168.0.zone文件。這些文件應該包含了從位于192.168.0.254的主域名服務器傳過來的區域數據庫的副本。
確保所有的正確工作。在您開始下一個部分之前,去除您剛才在第一步中在/etc/named.conf中加入的兩個從區域。
步驟3:配置一個主域名服務器
現在您將配制您的域名服務器來負責對于區域“domainX.example.com”的解析工作。您將同樣負責向對應的反查區域。將采用如下的步驟:
A. 編輯配置文件(named.conf)
B. 準備區域“domainX.example.com”和區域“X.0.168.192.in-addr.arpa”的數據庫文件。
C. 重新啟動域名服務器
D. 測試您的配置
為了您能夠準備您的配置文件和區域文件,我們提供了模板文件。您可以通過匿名ftp方式從以下地址獲得:
ftp://192.168.0.254/pub/namedfiles/
在如下的步驟中,記得將范例文件中中每一出出現的X替換成您的工作站的號碼。
E. 主配置文件
下面是我們應該考慮的三個區域
1. “.”(根級別)區域
“.”區域是DNS層次中的最高層。根服務器提供了哪些服務器對于給定的域享有授權。“.”節應該以如下的方式出現:
zone “.” {
type hint;
file “named.ca”;
};
2. “domainX.example.com”(正向查詢)區域
添加如下的行,使得您的域名服務器成為區域的主服務器。
zone “domainX.exmaple.com” {
type master;
file “domainX.example.com.zone”;
};
3. “X.0.168.192.-in-addr.arpa”(反向查詢)區域
現在添加如下的行,使得您的域名服務器成為反查區域的主服務器。
zone “X.0.168.192.in-addr.arpa” {
type master;
file “192.168.0.X.zone”;
};
?
?
下面是位于192.168.0.2的station2的樣例配置文件
/etc/named.conf
options {directory “/var/named”;forwarders {192.168.0.254; };forward only;};zone “.” { type hint; file “named.ca”;};zone "localhost" IN { type master; file "localhost.zone";};zone "0.0.127.in-addr.arpa" IN { type master; file "named.local";};zone “domain2.exmaple.com” { type master; file “domain2.example.com.zone”;};zone “2.0.168.192.in-addr.arpa” { type master; file “192.168.0.2.zone”;};
F. 數據庫文件
您的主要配置文件指定了/var/named為數據庫所在的目錄。您現在必須在這個目錄下面為您區域和反查區域建立數據庫文件。這些數據庫文件包括您的SOA,NS,A,CNAME,MX,PTR和其他的可能的記錄。所有的數據文件以如下的行開頭:
$TTL 86400
該數值是缺省的以秒計的生存期間,該數值對所有在該域中的記錄有效
1. 區域“domainX.example.com”
在主配置文件中,區域“domainX.example.com”數據庫文件被存放在/var/named/domainX.example.com。這個文件含有類似的如下的記錄
開始授權記錄
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
2001101100; Serial
28800 ;Refresh
14400 ;Retry
3600000 ;Expire
0) ;Negative
“開始授權”(SOA)記錄是數據庫文件的第一個資源記錄,但是它可能帶了一個前導符$TTL(缺省存活時間)。SOA記錄使得數據庫文件稱為該區域的授權的信息源。第一個標記是后繼記錄適合的域,通常以“@”簡化形式出現,如果擴展開來那就是在named.conf文件中“zone”節中所指明的域名(或者是在文件通過$ORIGIN定義的當前區域,如果該定義存在的話)。
第四個標記使該域的主域名服務器,第五個是負責維護這個數據庫的系統管理員的電子郵件的地址,注意第一個分隔符替換了第一個標記的@符號(你能解釋為什么嗎?)。接下來在記錄中的條目指定了交互解析域名服務器的動態特性。
域名服務器記錄
@ IN NS stationX.domainX.example.com.
域名服務器(NS)標識了主機作為特定域的授權的域名服務器。他們對于這個區域指定了主和從服務器和代表授權的子域的其他的服務器(例如,server1.example.com對于所有domainX.example.com的域名服務器有一個NS記錄)。正如您對于“domainX.example.com”只能有一個單一的域名服務器,您也只能有一個單一的NS記錄。
地址記錄
domainX.example.com IN A 192.168.0.X
stationX.domainX.example.com IN A 192.168.0.X
www IN A 192.168.0.X
ftp IN A 192.168.0.X
pop IN A 192.168.0.X
地址(A)記錄將主機名稱映射到IP地址(域名服務器的主要功能)。一個數據庫文件通常包含A記錄對應著許多IP地址。然而在我們的教室的環境里,在您的區域里面只有一臺主機。注意第一個A記錄設定了域的“缺省的IP地址”。接下來的A記錄建立了多個主機名稱對應一個IP地址。
主機名稱可以是一個完全符合標準的名稱(FQDN),也可以是一個縮寫。所有的不以點號結尾的主機名稱都將被視為縮寫,并且區域名稱被附加到主機名稱的后面。例如,第三個A記錄就是主機名稱www.domainX.example.com.
規范名稱(別名)記錄
www1 IN CNAME stationX.domainX.example.com.
www2 IN CNAME stationX.domainX.example.com.
www3 IN CNAME stationX.domainX.example.com.
別名(CNAME)記錄建立了主機名稱的別名。注意到別名映射到主機名稱而不是IP地址。
CNAME不應該出現在右邊的數據區域作為真實的主機名稱,對于多重別名的解析的速度會很慢。
郵件交換記錄
@ IN MX 10 stationX.domainX.example.com.
domainX.example.com IN MX 10 stationX.domainX.example.com.
郵件交換記錄(MX)記錄了一個主機它將會處理給定的域或者主機郵件的轉發。當一個郵件傳遞代理(MTA)試圖投遞信件的時候,它將首先試圖在DNS中查找目的主機的MX記錄。如果該MX記錄存在,那么將直接發送到MX記錄指定的主機。反之,如果不存在MX記錄,MTA對于目的主機進行標準的DNS查詢,并且直接投遞到該主機上去。MX記錄用來建立郵件的網關,和作為缺省的對于域的郵件的目的地。
2. 區域“X.0.168.192.in-addr.arpa”
在/etc/named.conf中,我們指定了/var/named/192.168.0.X.zone作為區域X.0.168.192.in-addr.arpa的反查區域數據庫文件。他應該包含SOA記錄,NS記錄,和對應的PTR記錄。
開始授權記錄
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
4;
10800;
3600;
604800;
86400)
IN NS stationX.domainX.example.com.
SOA和NS記錄與前面的區域文件中的名稱應該相同。
注意在NS記錄開頭的空白的地方是非常特別的,并且被解釋為“和上一條記錄相同”的縮寫。在本例中,上一條記錄為符號“@”,其本身就是在主配置文件中定義的域名的縮寫。
指針記錄
X.0.168.192.IN-ADDR.ARPA. IN PTR stationX.domainX.example.com.
指針(PTR)記錄通過間接的機制將名稱映射到IP地址。作為分離的技術來進行IP地址的反查詢的替代,BIND采用了一種修改的對于特定主機名稱的正向查詢的方式。這種“反向域名查詢”以反轉的IP地址后面添加“in-addr.arpa”域的形式出現。這將允許域名服務器使用相同的機制進行正反兩方面的查詢。
3. 把他們放在一起
下面是位于192.168.0.2的station2的樣例配置文件:
/var/named/domain2.example.com.zone
$TTL 86400@ IN SOA station2.domain2.example.com. root.station2.domain2.example.com. ( 2001101100; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 0) ; Negative @ IN NS station2.domain2.example.com. @ IN A 192.168.0.2station2.domain2.example.com. IN A 192.168.0.2www IN A 192.168.0.2ftp IN A 192.168.0.2pop IN A 192.168.0.2www1 IN CNAME station2.domain2.example.com.www2 IN CNAME station2.domain2.example.com.www3 IN CNAME station2.domain2.example.com.@ IN MX 10 station2.domain2.example.com.station2 IN MX 10 station2.domain2.example.com.
?
/var/named/192.168.0.2.zone
$TTL 86400@ IN SOA station2.domain2.example.com. root.station2.domain2.example.com. (4 10800 3600 604800 86400) IN NS station2.domain2.example.com.2.0.168.192.IN-ADDR.ARPA. IN PTR station2.domain2.example.com.
C. 重新啟動域名服務器
再一次,我們將重新啟動域名服務器。然后通過運行pidof命令來確定其被運行:
service named restart
pidof named
查看一下服務器添加到/var/log/messages文件中的條目。確定您的域名在調入的時候沒有發生錯誤。
如果您已經有一個域名服務器在運行并且不想重新啟動它,您可以使用service named reload 來重新裝入配置文件,這樣子對于停止和啟動服務器而言都比較快。
D. 測試域名服務器
進行如下DNS查詢,您能夠解釋所有的結果么?
host stationX
dig stationX.example.com
dig stationX.example.com @192.168.0.254
dig stationX.example.com
host server1.example.com
host 192.168.0.X
dig –x 192.168.0.X
dig –x 192.168.0.254
host www
host www1
記住dig期望給與一個FQDN作為查詢,然而host則通過查看位于文件/etc/resolv.conf的查詢信息。試著在別的人的域名服務器和子域上進行附加的查詢。如果設定正確,您將能夠在其他教室系統上進行正向和反向查詢。
挑戰性的項目
通過增加多個“A”記錄使得一個主機名稱對應著不同的IP地址來配置一個“輪轉”的主機名稱。域名服務器該如何處理這種情況?提示: 試圖嘗試設定這些的A記錄的TTL為0。
在您的域中增加子域“support.somainX.example.com”。增加合適的資源記錄使得它能夠反向指向您的IP地址。
與另一臺工作站合作,成為另一臺工作站的從域名服務器,在您的區域中為您的工作站增加一個新的CNAME,確保這個改變能夠傳播到從服務器。
收尾工作
接下來的試驗就較為簡單了,一旦您重新啟動您的工作站,所有的DNS查詢將會重新設定到教室中的服務器上。為了確保收尾,確保您重新設定/etc/resolve.conf到其初始的狀態。
/etc/resolv.conf
search example.comnameserver 192.168.0.254
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost192.168.0.X stationX.example.com
(如果您關閉后啟動eth0接口,DHCP將會自動為您設定配置文件)
?
?
?
?
?
試驗3
Samba服務
估計時間: 1個小時
目標: 使用samba共享用戶認證和文件系統
試驗的起點: 標準的Red Hat Linux安裝
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉。缺省的安裝將會有一個文件叫做“/etc/sysconfig/iptables”,該文件配置了iptable的功能。運行“chkconfig iptables off”。為了去除空間中所有的規則,運行“service iptables stop”
步驟1:Samba的用戶連接的配置
任務
1. 安裝samba,samba-common和samba-client RPM 軟件包并且啟動smb服務。一個缺省的配置將會被應用. 使用如下的命令確定Samba是在正確的工作:
smbclient –L localhost –N
您可以從服務器獲得回應,但是并不代表文件共享可用。(確保smbd在運行,否則該命令無法工作)
2.在您的系統中增加幾個用戶(karl,joe,mary和jen),但是并不給他們設定密碼。這些用戶僅能夠從samba服務訪問服務器。為了使得他們在shadow中不含有密碼,這些用戶的shell應該設定為/sbin/nologin
3.缺省的samaba是被配置用來接收加密的密碼的,但是在文件/etc/samba/smbpasswd中沒有設定任何密碼。如果加密的密碼在/etc/samba/smb.conf被設定,smbclient將發送加密的密碼,所以為了在您的系統上測試samba服務,您應該首先建立smbpasswd文件,然后為每一個用戶在該文件中添加密碼。
4.注意到第一個在/etc/samba/smb.conf設定的共享[home]并沒有指定路徑。該共享被配置用來當用戶連接并且認證通過以后共享用戶的home目錄。瀏覽一個或者兩個用戶的home目錄。上傳一個文件到joe的home目錄。
可用的結果
一個工作的samba服務可以被多個用戶通過smbclient訪問。
步驟2: 提供給組目錄訪問的權限
場景/故事
為了使得我們的四個用戶除了有他們自己的在服務器上的共享,我們這四位用戶同時在同一個部門工作并且需要一個地方來存儲部門的文件。我們將需要一個Linux用戶組,建立一個目錄給這些用戶來存儲它們的內容,并且配置samba服務器來共享目錄。
任務
1. 建立一個對于擁有gid為30000的用戶叫做legal的新組并且使用usermod命令將這些用戶加到組里去。
2. 建立一個目錄/home/depts/legal。對于這個目錄設定擁有權限,使得在legal組中的用戶可以在這個目錄中添加/刪除文件,然而其他的人不可以。并且設定SGID和粘滯位使得所有在這個目中建立的文件都擁有同legal組的權限并且組中其他的的人不能夠刪除該用戶建立的文件。
3. 在/etc/samba/smb.conf中建立一個samba共享叫做[legal]。只有legal組中的用戶才能夠訪問該共享。并且確保在[legal]中存放的文件的被建立的許可權限為0600。
4. 重新啟動smb服務并且使用smbclient;來進行測試。
可用的結果
1. 只有lagal組能夠訪問和使用一個Linux目錄。
2. 一個samba共享只有legal組的用戶能夠訪問并且編輯
步驟3:為打印機提供訪問
場景/故事
在samba中除了可以共享文件以外,另外一個重要的功能就是提供共享打印隊列,該打印隊列已經在您的Linux機器上定義。實際上,缺省的,所有在Linux機器上配置的打印隊列通過[printers]共享到網絡上去。在該步驟中,您將建立一個打印隊列,通過samba服務器進行共享。然后通過smbclient來查看共享的打印機。
任務
1. 使用redhat-config-printer建立一個新的打印隊列。把打印隊列命名為printerX(其中X為您的工作站的號碼)。配置打印機到本地連接的打印機/dev/lp0。配置打印隊列確保任何遞交的打印作業將保留在隊列中。不要忘記重新啟動samba服務器。
2. 通過smbclient來連接samba服務器上共享的printerX。使用print命令來遞交打印作業到隊列中去。檢查作業已排隊否。
可用的結果
1. 一個定義的Linux打印隊列printerX
2. 一個Samba服務器允許授權的用戶打印到共享打印機printerX
挑戰1:安全和備份Samba/SMB
現在所有的東西都可以運行了,我們應該考慮在Samba服務器上的網絡安全和數據的可靠性了。
任務
1. 定義并且保護對于samba服務器而言合法的連接。在文件/etc/samba/smb.conf中使用hosts allow參數來確定所有教室里的子網和本地回環子網。
2. 使用testparm測試/etc/samba/smb.conf的語法。這個是否顯示出一些應該考慮的安全上的漏洞呢?
3. 對您的鄰居的[legal] 共享進行備份。通過用戶karl的帳戶建立一個共享的數據打包,使用或者smbtar命令或者smbclient 的-T 選項。
可用的結果
1.samba服務器能夠識別來自允許的子網或者主機的連接
2.一個SMB或者Samba共享的備份數據打包
一種解決方案
步驟1
l rpm –ivh ftp://server1.exmaple.com/pub/RedHat/RPMS/samba-c*
rpm –ivh ftp://server1.exmaple.com/pub/RedHat/RPMS/samba-2*
service smb start
smbclient –L localhost –N
l useradd –s /bin/false karl
useradd –s /bin/false joe
useradd –s /bin/false mary
useradd –s /bin/false jen
l smbpasswd –a karl
smbpasswd –a joe
smbpasswd –a mary
smbpasswd –a jen
l smbclient //localhost/joe –U joe
您應該看到smb:\>提示符
put /etc/hosts hosts
步驟2
l groupadd –g 30000 legal
usermod –G legal karl
usermod –G legal joe
usermod –G legal mary
usermod –G legal jen
l mkdir –p /home/depts/legal
chgrp legal /home/depts/legal
chmod 3770 /home/depts/legal
l 在文件/etc/samba/smb.conf文件中,共享定義部分:
[legal]
commnet = Legal’s files
path = /home/depts/legal
public = no
write list = @legal
create mask =0660
l service smb restart
步驟3:
l redhat-config-printer
l service smb restart
l smbclient //localhost/printerX –u joe
復習問題
1. 在ftp和smbclient之間有什么相同的地方?您使用ftp的時候永什么命令進行上傳?ftp和smbclient之間上傳操作之間有什么不同。
2. 命令nmblookup \*的作用是什么
3. smbtar命令是干什么的?
4. testparm /etc/samba/smb.conf 33.44.55.66 是做什么用的?
5. 使用smbmount命令該使用什么語法?
試驗4
電子郵件
估計時間: 2個小時
目標: 建立基本的MTA的配置的技能
試驗的起點: 標準的Red Hat Linux安裝
指導教師:確保在Server1上的sednmail.mc文件中的DAEMON_OPTIONS被注釋并且重新編譯sendmail.cf文件使得能構接受來自其他主機的電子郵件。
介紹
本次實驗作為一個安裝和配置MTA的介紹。在介紹中我們將提及sendmail和postfix。您可以選擇任何一個MTA,如果時間允許,您兩個都可以做一下試驗。在接下來的步驟中,您將
安裝并且驗證sendmail的“發件箱”
為您的sendmail的按渣添加新的別名
使用m4工具來改變您的轉發行為
安裝POP3服務器并且配置POP客戶端
在整個試驗中,主機和域名取決于您的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成您的工作站的號碼(您的IP地址的最后一個部分)。例如,如果您的工作站的IP的地址是192.168.0.2,您應該將stationX.domainX.example.com轉換成station2.domain2.example.com。
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉(顯然,在實際使用中您可以利用Linux內核的防火墻機制,然而我們在這里關掉它是為了減少潛在的問題)。
本次試驗中以root身份來使用下面命令達成上面的要求:
service iptables stop
chkconfig iptables off
初始化安裝-安裝必要的軟件包
下列軟件包對于sendmail是必需的: sendmail,sendmail-cf,sendmail-doc,m4和procmail。對于postfix而言,您需要: postfix。如果需要他們,從CD上進行檢視和安裝,server1的NFS安裝點,從: ftp://server1/pub/RedHat/RPMS/
步驟1:配置MTA來收取郵件
為了安全的原因,sendmail和postfix的缺省的配置允許發郵件但是不允許從網絡上接收郵件(缺省的它們只接受從回環接口上的連接)。按照如下配置您選擇的MTA使得它接受傳入的連接:
1.對于sendmail: 修改 /etc/mail/sendmail.mc
使用dnl注釋在下面的行之前,就象這樣:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2.將您的sendmail.cf文件做一個備份:
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.orig
3.在同一個目錄下,編譯sendmail.cf
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
4.重新啟動sendmail,通過
service sendmail restart
對于postfix:修改/etc/postfix/main.cf
A.找到并注釋如下行
inet_interfaces = localhost
B.取消注釋該行:
inet_interfaces = all
C. 保存文件并且進行到步驟2 的結束的地方。找到和上面一樣的對應于postfix的配置的地方。
步驟2: 啟動和校驗MTA操作
對于sendmail: 有幾個步驟您應該采用,以確保sendmail被正確安裝。
A.確信sendmail已經被在適當的運行級別上運行
檢查您的sendmail被適當的配置且能夠在重新啟動以后其能夠運行。使用chkconfig是比較方便的。
chkconfig -–list sendmail
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如果sendmail在標準的用戶運行級別時無效,使用chkconfig, ntsysv 或者serviceconf 之類的工具來激活服務。
B.確定sendmail沒有在啟動的時候出現錯誤
Red Hat Linux安裝的時候使用提供的syslog工具來記錄所有的信息到文件/var/log/maillog中去。檢查此文件中的最后出現“starting”的地方以確保sendmail在啟動的時候沒有任何錯誤。
sendmail可執行文件位于/usr/sbin/sendmail。為了確定sendmail是否正確標識您的主機名稱,通過命令行開關開啟其調試模式并且設定為0:
sendmail –d0 < /dev/null
Version 8.11.6
Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
SMTP TCPWRAPPERS USERDB
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = station2
(canonical domain name) $j = station2.example.com
(subdomain name) $m = station2
(node name) $k = station2.example.com
========================================================
Recipient names must be specified
如果sendmail返回您的主機名稱為localhost,您可能錯誤配置了/etc/hosts文件。檢查您的/etc/hosts文件,刪除所有的但記住留下localhost的指向。如果/etc/hosts文件是正確的,那么檢查一下在/etc/sysconfig/netwoek中的HOSTNAME的定義。
試圖向root@server1發送簡單的郵件。您可以看到一個合理的您的主機的轉發服務器的SMTP交換。
echo “hello root” | mail –v –s hello root@server1
root@server1... Connecting to [127.0.0.1] via relay...
220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Mon, 22 Sep 2003 14:29:24 +0800
>>> EHLO localhost.localdomain
250-localhost.localdomain Hello station1 [127.0.0.1], pleased to meet you
...
>>> MAIL From:<root@localhost.localdomain> SIZE=52 AUTH=root@localhost.localdomain
250 2.1.0 <root@localhost.localdomain>... Sender ok
>>> RCPT To:<root@server1>
>>> DATA
250 2.1.5 <root@server1>... Recipient ok
354 Enter mail, end with "." on a line by itself
>>> .
250 2.0.0 h8M6TOU5026513 Message accepted for delivery
root@192.168.241.182... Sent (h8M6TOU5026513 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
221 2.0.0 localhost.localdomain closing connection
如果SMTP交換向上面一樣正確,那么消息將被轉發到您的工作站上的本地的轉發服務器上,并且mailq –Ac將會報告一個空的對列。接下來檢查mail(不使用參數)來檢查一下消息是否從本地的轉發到server1。這樣對列也應該是空的。
您的消息是不是在/var/log/maillog中正確的記錄呢?在下面的步驟中,監視文件/var/log/maillog。下面的命令將會十分的有用:
xterm –e tail –f /var/log/maillog &
對于postfix:
A.運行‘service sendmail stop’,接下來使用redhat-switch-mail使得postfix成為活躍的MTA。您也可以使用如下的命令行:
alternatives –set mta /usr/sbin/sendmail.postfix
B.確保postfix在合適的運行級別有效:
chkconfig -–list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
C.確定hostname命令正確的返回您的主機名稱。應該是您的FQDN。
如果sendmail返回您的主機名稱為localhost,您可能錯誤配置了/etc/hosts文件。檢查您的/etc/hosts文件,刪除所有的但記住留下localhost的指向,然后再試一遍。如果/etc/hosts文件是正確的,那么檢查一下在/etc/sysconfig/netwoek中的HOSTNAME的定義。當這些值都正確的時候,啟動postfix服務。
D.確定postfix在啟動的時候沒有錯誤
和sendmail一樣,Red Hat Linux的安裝使用提供的syslog工具來記錄所有的信息到文件/var/log/maillog中去。檢查此文件中的最后查找任何錯誤信息。
試圖向root@server1發送簡單的郵件并且檢查/var/log/maillog的記錄文件
mail –s `echo $USER` root@server1 < /etc/redhat-release
應該如下所示:
Sep 22 02:51:50 station1 postfix/pickup[2865]: A20ED348389: uid=0 from=<root>
Sep 22 02:51:50 station1 postfix/cleanup[3534]: A20ED348389: message-id=<2003092
2065150.A20ED348389@station1.example.com>
Sep 22 02:51:50 station1 postfix/nqmgr[2866]: A20ED348389: from=<root@station1.e
xample.com>, size=341, nrcpt=1 (queue active)
Sep 22 02:51:51 station1 postfix/smtp[3536]: A20ED348389: to=<root@192.168.241.1
82>, relay=192.168.241.182[192.168.241.182], delay=1, status=sent (250 Message q
ueued)
步驟3:添加新的別名
對于sendmail:
在sendmail決定消息的接受者的目的地的之前,其先試圖在別名中查找。sendmail的主要的別名配置文件是/etc/aliases。為了優化查找,sendmail為其別名記錄建立了一個哈希表數據庫/etc/aliases.db.該文件通過newalias命令產生(該命令是sendmail –bi的同名)
下列命令將增加用戶student(如果不存在的話)
useradd student
在/etc/aliases 行加入如下的行:
me: student
wizards: root, me
methere: student@stationX.example.com
現在運行newalias 命令來更新數據庫,嘗試發送郵件給您定義的收件人:
newalias
echo “hello there” | mail –s “hello” me
echo “hello there” | mail –s “hello” wizards
echo “hello there” | mail –s “hello” methere
您是否得到了期望的結果?是否所有的位于wizards的收件人都受到了郵件?如果沒有,su – 到不是root的用戶再試一次。
在postfix決定消息的接受者的目的地的之前,其先試圖在別名中查找。postfix的主要的別名配置文件是/etc/postfix/aliases。為了優化查找,postfix為其別名記錄建立了一個哈希表別名數據庫/etc/postfix/aliases.db(和sendmail類似).該文件通過newalias命令產生。
下列命令將增加用戶student(如果不存在的話)
useradd student
在/etc/postfix/aliases 行加入如下的行:
注意:注釋root別名的那一行為postfix
me: student
wizards: root, me
methere: student@stationX.example.com
現在運行newalias 命令來更新數據庫,嘗試發送郵件給您定義的收件人:
newalias
echo “hello there” | mail –s “hello” me
echo “hello there” | mail –s “hello” wizards
echo “hello there” | mail –s “hello” methere
您是否得到了期望的結果?是否所有的位于wizards的收件人都受到了郵件?
步驟4.控制轉發
轉發允許郵件通過使用中間的“轉發”及其傳遞到其目的地。盡管這個功能曾經有用,但是轉發已經成為Internet上垃圾郵件的源泉了。人們希望發送主動提供的的郵件的時候希望使用轉發機制,從而使得郵件發源地很難被偵測出來。
下列步驟將使用下面的主機。替換X,Y和Z為適合的工作站的號碼:
stationX:源機器,郵件從這里發出
stationY:轉發機器,這里郵件從發送者送出
stationZ:目的機器,郵件的最終目的
該步驟假設您是stationX,轉發機器,與某人的stationY合作,該機器為郵件的源頭。在該步驟中,注意/var/log/maillog的變化。下列命令將會顯得十分的有用。
對于sendmail
步驟A:允許轉發
您具有控制允許誰在您的機器上轉發的能力。通過控制您的機器的混雜轉發,您可以使得任何人都能夠將您的機器作為轉發的主機。(我們對于這種的嘗試表示反對,也希望通過該實驗顯示出其缺陷)。配置/etc/mail/sendmail.mc, 通過加入如下行使得m4前置處理器允許混雜轉發:
/etc/mail/sendmail.mc
(…其他的內容…)FEATURE(promiscuous_relay)dnl
使用m4前置處理機通過這個模板文件生成一個新的sendmail配置文件,然后將新生成的文件與通過sendmail RPM軟件包提供的進行比較
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.test-relay
diff /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf
使用混雜轉發以后會有多大的不同呢?現在將新建立的sendmail.test放置在恰當的位置上,重新啟動sendmail.
mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.accept-mail
cp /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf
service sendmail restart
讓您的伙伴扮演惡意的垃圾郵件的發送者,該人能夠通過telnet到您的機器上的smtp(sendmail)的25號斷口,進行垃圾郵件發送地址的欺騙,在stationY鍵入如下命令:
這個例子對于stationY(源機器)=station2,并且stationX(轉發,在這里目的機器)=station1
[root@station1 root]# telnet station1 25
Trying station1.example.com...
Connected to station1.example.com (station1.example.com).
Escape character is '^]'.
220 station1.example.com (IMail 8.00 8-1) NT-ESMTP Server X1
helo mail.cracker.org
250 hello station1.example.com
mail from: spammer@cracker.org
250 ok
rcpt to:root@station1.example.com
250 ok its for <root@mailgrid.ods.org>
data
354 ok, send it; end with <CRLF>.<CRLF>
Subject: Faked
this was faked!
.
250 Message queued
quit
221 Goodbye
Connection closed by foreign host.
垃圾郵件現在送到您的機器上了。下一步,看看您的伙伴能不能從您的機器轉發給第三臺機器:
這個例子對于stationY(源機器)=station2,并且stationX(轉發,在這里目的機器)=station1,并且stationZ(目的機器)=station3
[root@station1 root]# telnet station1 25
Trying station1.example.com...
Connected to station1.example.com (station1.example.com).
Escape character is '^]'.
220 station1.example.com (IMail 8.00 9-1) NT-ESMTP Server X1
helo mail.craker.org
250 hello station1.example.com
mail from: spammer@craker.org
250 ok
rcpt to root@station3.example.com
250 ok its for <root@station3.example.com >
data
354 ok, send it; end with <CRLF>.<CRLF>
Subject: Relayed
this was faked any relayed!
.
250 Message queued
quit
221 Goodbye
Connection closed by foreign host.
由于您的機器已經被配置成為允許混雜轉發,垃圾郵件可以通過您的機器進行郵件轉發。
對于postfix:
您具有控制允許誰在您的機器上轉發的能力。缺省的postfix允許在子網上的任何人通過您的機器進行轉發。膽汁并不是在每一個環境中都安全的。例如,您的機器和其他機器在一起,如果您的本地子網里有一臺機器被其他人控制,那么其他的機器都會有麻煩。
讓您的伙伴扮演惡意的垃圾郵件的發送者,該人能夠通過telnet到您的機器上的postfix的25號斷口,進行垃圾郵件發送地址的欺騙,在stationY鍵入如下命令:
[root@station1 root]# telnet station1 25
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
Escape character is '^]'.
220 station1.example.com ESMTP Postfix
helo mail.craker.org
250 station1.example.com
mail from:spammer@craker.org
250 Ok
rcpt to: root@station1.example.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: Faked
this was faked!
.
250 Ok: queued as 4FFA2348389
quit
221 Bye
Connection closed by foreign host.
垃圾郵件現在送到您的機器上了。下一步,看看您的伙伴能不能從您的機器轉發給第三臺機器:
這個例子對于stationY(源機器)=station2,并且stationX(轉發,在這里目的機器)=station1,并且stationZ(目的機器)=station3
[root@station1 root]# telnet station1 25
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
Escape character is '^]'.
220 station1.example.com ESMTP Postfix
helo mail.craker.org
250 station1.example.com
mail from: spammer@cracker.org
250 Ok
rcpt to: root@station3.example.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: Relayed
this was faked and relayed!
.
250 Ok: queued as 69C7B348389
quit
221 Bye
Connection closed by foreign host.
由于您的機器已經被配置成為允許混雜轉發,垃圾郵件可以通過您的機器進行郵件轉發。
?
步驟B:不允許轉發
對于sendmail
通過替換新的sendmail.cf為接受傳入的信件的配置文件來恢復缺省的sendmail的配置,并且重新啟動sendmail:
mv /etc/mail/sendmail.cf.accept-mail /etc/mail/sendmail.cf
service sendmail restart
讓您的伙伴再從stationY轉發垃圾郵件。您的sendmail還是一個轉發器么?任何一個轉發的都會產生如下的消息:
550 root@station3.example.com .. Relaying denied
對于postfix
編輯文件/etc/postfix/main.cf取消轉發。
查找并且取消注釋下面的行,并且重新啟動postfix
mynetworks_style = host
讓您的伙伴再從stationY轉發垃圾郵件。您的postfix還是一個轉發器么?任何一個轉發的都會產生如下的消息:
554 <root@station3.example.com>: Recipient address rejected: Relay access denied
步驟C:選擇性的轉發
對于sendmail
對于特定的主機,域或者網絡,編輯/etc/mail/access并且重新啟動sendmail。為了允許所有在example.com域中的機器可以把您的機器作為郵件轉發服務器,你在/etc/mail/acces中添加如example.com域。和您的伙伴使用場景A中的命令進行測試。
對于postfix
對于特定的主機,域或者網絡,編輯/etc/postfix/main.cf并且重新啟動postfix。對于特定的主機允許通過您的機器進行轉發,找到并且取消注釋該行:
mynetworks_style = host
然后添加新行來允許轉發的主機和網絡,在這里允許station1和本地轉發
mynetworks = 192.168.0.1, 127.0.0.0/8
和您的伙伴使用場景A中的命令進行測試。
步驟5:安裝POP3服務器和客戶端
在這個步驟中,你將配制您的機器stationX作為郵件的POP3服務器,使得您的在stationY的伙伴扮演POP客戶端的角色。
步驟A:安裝POP3服務器
配置一個POP3服務器比較簡單,只需要兩個步驟:
l 安裝相關的RPM軟件包
l 在xinetd中允許服務
安裝相關的RPM軟件包
POP守護進程和其他的具有相同功能的守護進程,例如IMAP守護進程綁定在軟件包imap中。再如xinetd,krb5-libs*和imap軟件包來檢查imap軟件包含有什么軟件。
三個守護進程被包括進來:imapd,ipop2d和ipop3d。POP3被用在很多Internet服務提供商,POP2提供是為了向后兼容。IMAP守護進程提供了根加復雜的能力,包括了在服務器端的文件夾的管理。
在xinetd中允許服務
對于本實驗,我們僅選定POP3服務。ipop3d通過xinetd在請求的時候被啟動。為了激活,運行下面的命令:
service xinetd start
chkconfig ipop3 on
查看一下/etc/xinetd.d/ipop3。顯式的重新啟動xinetd并不是必需的,由于chkconfig發送給xinetd 一個USR2信號告訴他重新調入其配置。
確認服務
運行下面的命令確認服務已經被正確的安裝。下面的命令只是一個指導:
echo “mail to be poped” | mail –s “Hello student” student
[root@station1 root]# telnet localhost 110
Trying 127.0.0.1...
Connected to station1 (127.0.0.1).
+OK POP3 station1 v2001.78rh server ready
USER student
+OK User name accepted, password please
PASS student
+OK Mailbox open, 1 messages
STAT
+OK 1 440
TOP 1 99999
+OK Top of message follows
Return-Path: <root@station1.example.com>
Delivered-To: student@station1.example.com
Received: by station1.example.com (Postfix, from userid 0)
id 72314348390; Mon, 22 Sep 2003 08:02:27 -0400 (EDT)
To: student@station1.example.com
Subject: Hello student
Message-Id: <20030922120227.72314348390@station1.example.com>
Date: Mon, 22 Sep 2003 08:02:27 -0400 (EDT)
From: root@station1.example.com (root)
Status:
mail to be poped
.
DELE 1
+OK Message deleted
QUIT
+OK Sayonara
Connection closed by foreign host.
如果一切順利的話,您現在有一個安裝好的POP服務器了。
步驟B :使用POP客戶端
所有的現在的郵件用戶代理(MUA),例如netscape,elm,Outlook,pine和mutt都是使用POP的,可以被用作POP的客戶端。每一個的配置都有所不同。同樣有一個流行字符界面的的POP客戶端叫做fetchmail。fetchmail是高度的可配置的,可以查詢多個郵箱,可以作為守護進程運行,這樣使得其每五分鐘查詢用戶的郵箱。fetchmail在主機上遞送郵件到郵件傳送代理(MTA),例如sendmail。我們將勾畫出以后如何安裝fetchmail和使用其來查詢我們裝過的POP服務器。
從CD或者從ftp://server1/pub/RedHat/RPMS來安裝fetchmail軟件包
注意到有很多選項可以影響fetchmail的行為。建立一個~/.fetchmailrc文件如下所示:
~student/.fetchmailrc
poll stationX.exmaple.com with protocol pop3: user studentXX there is user studentXX here password “password”
由于密碼存儲在該文件中,因此fetchmail將會拒絕運行除非您把該文件的屬性設定為對于僅僅文件的所有者只讀。注意還可以使用chown改變由root創建的文件的所有者為studentXX。
chmod 600 ~student/.fetchmailrc
chown student.student ~student/.fetchmailrc
嘗試使用studentXX登陸到POP3郵箱
echo “hello student” | mail –s “Hola” student
su – student
fetchmail –v
exit
fetchmail能不能接收到student的POP郵件?將遞送student的郵件到哪里?比從本地獲取POP郵件有意義么?
讓您的伙伴在另外一臺機器上建立相同的~/.fetchmailrc文件(或者配置其它諸如mozilla的MTA)試圖從您的服務器上進行收信。
復習的問題
1. m4宏語言提供給sendmail管理哪些東西?把所有的在xyz.com的用戶郵件導向到本地用戶xzplogin該使用什么語法?該在什么文件的和處填上這句話?
2. mailq命令用來作什么?您如何使用?
3. 當命令sendmail –q發出以后,sendmail將會試圖仍在隊列中等待的郵件。何時使用該命令是有用的?
4. 如果去除FEATURE(accept_unresolvable_domains)的注釋將對垃圾郵件產生如何的影響?
5. m4有什么特征允許sendmail發送郵件作為整個域(例如,“example.com”)而不是完全的符合標準的主機名稱(例如,“mail.example.com”)?
6. 在postfix中mynetworks_style如何影響轉發?
請您查看文件/etc/postfix/main.cf。
7. 在文件/etc/postfix/access中需要如何的活躍的變化?
?
?
?
?
?
?
?
試驗5
HTTP服務
估計時間: 1個小時
目標: 建立基本的擁有CGI的具有虛擬主機的Web服務器
試驗的起點: 標準的Red Hat Linux安裝
在整個試驗中,主機和域名取決于您的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成您的工作站的號碼(您的IP地址的最后一個部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您應該將stationX.domainX.example.com轉換成station3.domain3.example.com。
將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉。缺省的安裝將會有一個文件叫做“/etc/sysconfig/iptables”,該文件配置了iptable的功能。運行“chkconfig iptables off”。為了去除空間中所有的規則,運行“service iptables stop”
步驟1:服務的安裝和基本的配置
場景/故事
您的組織需在一個小時內要一個Web服務器,擁有充足的CGI的能力比國內且具有為不同的虛擬主機提供不同的內容服務。
任務:
1. 需要如下的軟件包:httpd和httpd-manual。如果需要的話,從CD或者ftp://server1/pub/RedHat/RPMS安裝并...。使用chkconfig 來啟動服務。
2. 啟動httpd服務使用缺省的配置:service httpd restart
3. 檢查在文件/etc/httpd/conf/httpd.conf中的DocumentRoot項目和下面的一樣
DocumentRoot /var/www/html
4. 開啟一個Web瀏覽器并且設定URL到:
http://stationX.example.com
如果您的瀏覽器在工作,您將看到缺省的服務器的索引頁面。注意該文件并不是所存儲的HTML文件,而是服務器在這些目錄中沒有缺省的index.html文件的時候自動生成的。
5.建立一個新的目錄層次和一些新的內容
mkdir –p /var/www/virtual/wwwX.example.com/html
cd /var/www/virtual/wwwX.example.com/html
cat > index.html <<EOF
<b>wwwX.example.com</b>
EOF
(這建立一個只有一行的HTML文件)
6.在/etc/httpd/conf/httpd.conf尾部加入以下幾行:
NameVirtualHost 192.168.0.X<VirtualHost 192.168.0.X> ServerName wwwX.example.com ServerAdmin webmaster@wwwX.example.com DocumentRoot /var/www/virtual/wwwX.example.com/html ErrorLog logs/wwwX.example.com-error_logCustomLog logs/wwwX.example.com-access_log combined<Directory /var/www/ virtual/wwwX.example.com/html> Options Indexes Includes</Directory></VirtualHost>
7.確保您的DNS系統哦功能能夠解析您的虛擬主機的名稱。
dig wwwX.example.com
8. 重新啟動httpd: service httpd reload
9.在您的Web瀏覽器并且設定URL到新的虛擬主機:
http://wwwX.example.com
您看到您自己定義的頁面了么?
步驟2:使用CGI
任務
1. 在步驟1設定的 <VirtualHost> 塊中增加一行:
ScriptAlias /cgi-bin/
/var/www/virtual/wwwX.example.com/cgi-bin/
以上僅為一行并且在httpd.conf中不換行,注意給上面的兩個元素之間留出空格。
?
2. 建立目錄,然后在里面建立文件叫做test.sh 包含以下內容:
/var/www/virtual/wwwX.example.com/cgi-bin/test.sh
#!/bin/bashecho Content-Type: text/html;echo echo “<pre>”echo My username is:whoamiechoecho My id is:idechoecho My shell setting are:setechoecho My environment variable are:envechoecho Here is /etc/passwdcat /etc/passwdecho “</pre>”
3.通過把您的瀏覽器指向下面的地址嘗試執行該CGI腳本
http://wwwX.example.com/cgi-bin/test.sh
為什么這個腳本不執行?檢查日志文件/avr/log/httpd/獲得信息來幫助你找到答案。(您是否計的重新啟動或者重新載入服務器?)
4. 使得該腳本對于用戶,組和其他可讀并且可執行:
chmod 555 test.sh
現在腳本能夠執行麼?
挑戰1:為您的Web站點的文檔提供安全訪問
任務:
在wwwX.example.com的文檔的根目錄建立一個文件叫做.htaccess,并采用以下內容:
/var/www/virtual/wwwX.example.com/html/.htaccess
Authname “restricted stuff”AuthType BasicAuthUserFile /etc/httpd/conf/wwwXX.htpasswdrequire valid-user
2.建立您的域的密碼文件。該文件必須被apache組可讀。
htpasswd –mc /etc/httpd/conf/wwwX.htpasswd user_name
chgrp apache /etc/httpd/conf/wwwX.htpasswd
chmod g+r /etc/httpd/conf/wwwX.htpasswd
3.訪問http://wwwX.example.com頁面,您是否...httpd獲得線索。
4.添加下列行到服務器的配置文件httpd.conf,在wwwX.example.com虛擬主機的<Directory> 塊中增加一行:
AllowOverride AuthConfig
5.再次嘗試訪問http://wwwX.example.com頁面,您是否...室趁嫻娜ㄏ廾矗?/a>
步驟3:Squid的基本配置
1. 在您的系統上安裝squid
rpm –Uvh ftp://server1.example.com/pub/RedHat/RPMS/squid*
2.開始服務(service squid start),然后配置您的瀏覽器使用您的localhost作為您的Proxy并且把端口設定為3128。
3.嘗試訪問一些主頁。如果教師里面沒有Internet可以訪問,那么試圖訪問http://server1.example.com,將會返回服務器的測試頁面。
4. 現在使用您的鄰居來吧您的主機當作Proxy。這樣子應該不能工作。
squid返回的頁面在/var/log/squid/access.log文件的底部有所解釋。
5.使用您喜歡的文本編輯器打開/etc/squid/squid.conf文件。正如您所看到的,大部分是文檔和注釋。您也該注意到squid是非常易于調校的。對于本實驗,我們僅作簡單的配置,熟悉了以后您將會適應更加復雜的配置。
6.在文件中查找第二次出現Recommend minimum configuration的地方。您將會會看到缺省的存取控制列表(acl)。在CONNECT method CONNECT 行的下面添加一個對于本地網絡的存取訪問列表項目:
acl example src 192.168.0.0/24
對于這個配置您可以把它作為參考以應用到其他的任何地方。src是該acl的源IP地址。
7.在文件中查找INSERT YOUR RULE(S) HERE,在localhost acl的上面增加如下的內容:
http_access allow example
重新啟動squid。 您的鄰居將能夠訪問您的Web緩存了。
8.一些URL最好能夠避免。返回到acl的部分,在您新添加行的下面(使用example.com如果您在教師里面沒有Internet訪問權限的話)
acl otherguys dstdomain .yahoo.com
acl otherguys dstdomain .hotmail.com
這里有一些要提及的東西。首先,注意到acl的附加屬性。第二注意到dstdomain的acl類型,指明了關心的目的域。第三、注意到在域名前的點表示符號,確保加上點。
9.增加一條拒絕訪問規則應用到這些存在問題的域。返回到您剛在添加allow的地方,在其下面增加如下行:
http_access deny otherguys
再次重新啟動squid,再次檢查這些相關的域,非常不幸,訪問沒有被拒絕。
10.再次打開配置文件,將您添加的拒絕規則放在example的允許規則之前。也就是說,在otherguys拒絕規則之前的example允許規則使得訪問被允許,但是拒絕沒有被生效。在移動規則以后,重新啟動squid。這回它將禁止訪問在任何上面禁止訪問的域內的站點了。
復習的問題
1.根據/var/www/manual提及的服務器的手冊。ServerAlias是起到什么作用?
2.根據/var/www/manual/suexec.html, suEXE對于CGI進程擁有什么特性?
3.下列命令起什么作用,何時使用它?
httpd –t
4. 您是否對您的用戶能夠通過CGI腳本看到您的/etc/passwd而感到不安?是否有方法阻止顯示系統的密碼文件?
?
試驗6
NFS 和 FTP
估計時間: 1個小時
目標: 管理和配置vsftpd和NFS
試驗的起點: 標準的Red Hat Linux安裝
關掉包過濾:在著手試驗之前需要確認包過濾沒有被激活,默認情況下iptables會調用 /etc/sysconfig/iptables這個配置文件,刪除或重命名這個文件,iptables就會在下次啟動時失效。或者使用命令 chkconfig iptables off也行。如果想讓iptables立刻失效可以用命令 service iptables stop.
步驟1:使用vsftpd允許匿名用戶上傳
1. 需要以下包:vsftpd 。如果沒有安裝,從CD或者ftp://server1/pub/RedHat/RPMS安裝。激活vsftpd服務
2. Vsftpd包提供了/var/ftp作為匿名ftp用戶的下載文件的目錄。但是默認沒有匿名上傳的文件夾。要配置vsftpd來允許匿名上傳,首先要準備一個上傳目錄:
cd /var/ftp
mkdir incoming
chown root.ftp incoming
chmod 730 incoming
現在檢驗一下新目錄的權限:
ls –ld /var/ftp/incoming
3. 配置/etc/vsftpd/vsftpd.conf文件中如下各行:
anon_upload_enable = YES
chown_uploads = YES
chown_username = daemon
anon_umask = 077
另外, 默認情況下anonymous_enable = YES(允許匿名訪問)已經被配置了
重啟vsftpd服務
4. 剛才配置的結果是使匿名用戶可以上傳文件到 /var/ftp/incoming中,但是不能從這個文件夾中下載文件或者列出文件(使用ls命令),這樣可以防止“warez”之類的組織用我們的上傳目錄作為“drop box”來放盜版軟件或數據。如果希望匿名用戶上傳文件,應該讓 /var/ftp/incoming 文件夾的所有者為 daemon 所有組為 ftp,并且權限為600(只允許deamon用戶讀寫)。
步驟2:NFS
任務:
5. 需要如下的軟件包:nfs-utils。如果需要安裝的話,請從CD或者ftp://server1/pub/RedHat/RPMS安裝并...及nfslock服務。
6. 創建一個用戶并且配置NFS共享他的主目錄,共享給example.com讀寫權限。
a) 在配置NFS服務器之前,查看一下RPC服務是否在運行
rpcinfo –p
showmount –e localhost
b) 創建一個測試用戶
useradd nfstest
c) 編輯 /etc/exports 來共享 /home/nfstest給example.com。如果你不知道這個文件的格式,請查看exports的man page。
d) 安裝NFS的軟件包,配置init運行級別3到5啟用NFS服務,但是因為啟動時如果/etc/exports 文件丟失或者它的大小為零, NFS服務不會啟動。所以,你現在要來手動啟動它,下一次啟動時NFS就會自動啟動了。
e) 觀察RPC服務是否啟動,看一看是否將/home/nfstest用nfs共享出來了:
rpcinfo –p
showmount –e localhost
f) 與一個或兩個搭檔相互mount對方的共享,然后再讀取里面的內容,嘗試用root和nfstest向其中寫文件(如果你機器上的nfstest用戶的UID和GID與搭檔機器上該用戶的不同,則把它們改成一樣的)。看一下會怎樣?為什么會這樣?
?
?
?
試驗8
身份驗證服務
估計時間: 45分鐘
目標: 培養有關身份驗證的技巧
試驗的起點: 標準的Red Hat Linux安裝
關掉包過濾:在著手試驗之前需要確認包過濾沒有被激活,默認情況下iptables會調用 /etc/sysconfig/iptables這個配置文件,刪除或重命名這個文件,iptables就會在下次啟動時失效。或者使用命令 chkconfig iptables off也行。如果想讓iptables立刻失效可以用命令 service iptables stop.
步驟1:使用PAM限制登陸的位置
場景/故事
您的系統中有高安全的內容。為了保證數據不被泄漏,你需要限制用戶的訪問,除了本地控制臺,禁止任何其他方式訪問系統。
任務:
1. 創建用戶bill,他是user組的成員,再創建一個用戶biff,他是finance組的成員
2. 編輯 /etc/security/access.conf 限定finance組的用戶只能在第二個虛擬控制臺登陸。為了達到這個目的,在這個文件的最后一行添加:
- : finance : ALL EXCEPT tty2
3. 通過編輯 /etc/pam.d/system-auth來限制所有服務,把以下這行添加到以auth開頭的所有行后:
account required /lib/security/$ISA/pam_access.so
4. 如果你的限定起了作用,bill和root可以登陸到任何控制臺,而biff只能在第二個虛擬控制臺登陸
5. 清理:你如果運行authconfig工具,以上的操作將會被刪除,你怎樣確認你的設置有沒有變化呢?
步驟2:使用NIS做身份驗證
任務:
你應該與你旁邊的人合作,然后決定誰做NIS的服務器端,誰做NIS的客戶端,通過這個實驗,你和你的同伴一起配置NIS的服務器端和客戶端。你們要確定NIS的域名,還要注意每一個工作站的名字和IP地址,在開始以下的步驟之前,請確認以上內容。
1. 配置NIS服務器
a) 從ftp://server1/pub/RedHat/RPMS 、光盤安裝ypserv,ypbind,和yptools的RPM包或者將server1的NFS共享mount到/mnt/server1上,從那里安裝也可以。
b) 編輯 /etc/sysconfig/network ,添加這樣一行:
NISDOMAIN = <你們的NIS域名>
下次啟動時才會起作用,設置了NIS域名之后不要重新啟動,運行命令:
domainname <你們的NIS域名>
c) 先將 /var/yp/Makefile 文件copy一份作為備份,編輯all部分只包含passwd和group:
all: passwd group
d) 打開portmap服務和ypserv服務
service portmap start
service ypserv start
e) 確保make包在你的系統中安裝,(以下的命令是在 server1:/var/ftp/pub 已經被mount到/mnt/server1后才能使用)
rpm –Uvh /mnt/server1/RedHat/RPMS/make*
f) 使用ypinit產生NIS數據庫(maps),注意可能出現的錯誤信息
/usr/lib/yp/ypinit -m
(注意:你不用在列表中添加任何主機,只要按 < CTRL - D > )
g) 啟動NIS password升級進程
service yppasswdd start
h) 如果ypinit在第六步時沒有錯誤,重新啟動ypserv服務:
service ypserv restart
i) 使用ps auxf | grep yp確定ypserv服務運行,如果有錯誤的話查看日志 /var/log/messages
完成:正在正常工作的NIS服務器
2. 配置NIS客戶端
到現在,任務只完成一半,你和你的同伴需要再配置這個NIS服務器的客戶端。
a) 在客戶端,確認已經安裝以下幾個包:portmap,ypbind,yp-tools和authconfig
b) 確認客戶端可以看到服務器上的portmap服務
rpcinfo –p 你們的NIS服務器
c) 使用authconfig工具配置你的客戶端使用NIS進行身份驗證,選定“Use NIS”,在“Domain:”后指定你的NIS域,在“Server:”后指定你的NIS服務器。
d) 確認authconfig正確工作,當authconfig完成后,它會自動開啟ypbind服務,是否有出錯信息出現在控制臺上或者 /var/log/messages中?
e) 測試你的NIS客戶端,使用root用戶登陸你的客戶端,root用戶是客戶端上的root還是NIS服務器上的?測試 客戶端----服務器的連接,使用:
ypcat passwd
這樣會顯示出NIS服務器上的password數據,(請記住,只有在服務器上/etc/passwd文件中UID大于等于500的用戶才會被放進數據庫中)
f) 使用useradd在客戶端創建一個新的用戶,然后在服務器端創建一個不同的用戶,然后使用passwd設置他們的密碼。
(在客戶端): useradd -u 1024 localguy
passwd localguy
(在服務器): useradd -u 1025 nisuser
passwd nisuser
g) 確認使用localguy能在本地登陸,nisuser能在服務器上登陸。然后使用nisuser帳號在客戶端上登陸,應該是不可以的。
h) 在服務器上的 /var/yp 目錄,執行make命令,當命令完成,再使用nisuser從客戶端上登陸,這回應該成功了,為什么?
i) 使用passwd改變nisuser的密碼,是否改變了服務器上的 /etc/passwd 和 /etc/shadow 文件?NIS服務器中的文件是否改變了呢?你可以使用如下命令測試:
ypcat passwd | grep nisuser
j) 使用localguy登陸到客戶端,是不是即時ypbind在運行仍然可以登陸?
k) 當你使用nisuser登陸到客戶端時,你的主目錄是什么?NIS僅僅提供驗證信息,不提供客戶端和服務器端的文件共享機制
完成:一個從NIS服務器上獲得得驗證信息的客戶機
步驟3:限制NIS用戶
任務:
我們的客戶端現在是公司NIS體系的一部分,因為他儲存了秘密數據,不是所有的用戶都可以訪問這臺機器,只有特定的遠程用戶才能訪問。
1. 這個測試需要添加一個NIS用戶,使用useradd命令添加一個名叫baduser的用戶。
useradd –u 1026 baduser
passwd baduser
2. 一個解決方案是使用pam_listfile,只允許nisuser訪問我們的系統。打開 /etc/pam.d/system-auth ,緊接著auth開頭的之后添加以下一行:
account required /lib/security/pam_listfile.so item=user sense=allow
file=/etc/nisusers onerr=fail
3. 假如測試目前的設置,你將會發現連root也不能登陸,所以千萬不要關掉root的shell!你要創建 /etc/nisusers 然后把所有允許訪問的用戶添加到文件中,一行一個用戶名,我們只想允許nisuser用戶,所以我們的文件會非常短。
4. 現在如果你想登錄到文本控制臺,只有nisuser可以進入,因為其他人不在文件中,把root添加到 /etc/nisusers 中。
5. 我們的任務還是允許所有本地用戶登陸的,我們可以把 passwd文件中的用戶都添加到我們的列表中,但這不是最好的方法,我們可以使用PAM庫中的pam_localuser來達到目的。添加以下這行到pam_localuser.so之后。
account required /lib/security/pam_localuser.so
6. 測試這樣的配置,你會發現仍然只有root可以登陸,為什么呢?
7. 是因為required字段的關系,把上面添加的兩行的required都改成sufficient,現在好了吧?如果改成requisite會怎么樣?
8. 清理:再次運行authconfig工具,刪除所有設置,并且禁用NIS。
試驗9
系統監視
估計時間: 1小時15分鐘
目標: 使用查找文件的方法來保護系統
試驗的起點: 標準的Red Hat Linux安裝
步驟1:定位易被***的文件或目錄
場景/故事
查找文件系統中易被***的文件或目錄
任務:
6. 查找有SUID和SGID的文件,并且把他們的名字存在 /root/stickyfiles中:
find / -type f -perm +6000 2> /dev/null > /root/stickyfiles
7. 查找任何人都可以寫入的文件,把它們的名字儲存在 /root/worls.writalbe.files:
find / -type f -perm -2 > /root/world.writalbe.files
8. 看一下 /root/stickyfiles 和 /root/world.writable.files 有哪些文件
步驟2:使用tripwire監視文件系統的完整性
場景/故事
你決定使用tripwire來確認數據的完整性
任務:
9. 使用root登陸并且安裝tripwire 的RPM包(運行下面的這個命令之前需要把server1上的共享mount到 /mnt/server1目錄上):
rpm –Uvh /mnt/server1/RedHat/RPMS/tripwire*
10. 看一下tripwire包中提供哪些文件和文檔:
rpm –ql tripwire
11. 編輯 /etc/tripwire/twpol.txt 來定義你的主機策略文件。默認的策略文件是基于Red Hat linux的everything安裝,這樣它就會試圖監視你沒有安裝的文件。結果是會產生一些出錯消息,這些消息可以忽略。最好的方法是刪除所有你沒有安裝的文件。
你應該定義自己的策略,仔細看一下策略文件,刪除其中你機器上沒有的文件。即使是只刪除一兩個你沒有的文件就要花很長時間。現在來添加目前沒有被監視的文件,添加 /etc/samba 目錄到“Critical Configuration”部分。
12. 現在你定義完了你的策略,運行 /etc/tripwire/twinstall.sh ,這個腳本將建立加密的策略、配置和密鑰文件。你需要輸入一些密碼,一旦這些步驟完成,在 /etc/tripwire中就會有一些新的文件產生。
13. 現在來用 tripwire –init 命令來初始化tripwire的數據庫
tripwire會報告很多警告,這是因為它找不到在策略文件中包含的文件,你可以忽略它們。
14. 我們來測試tripwire,需要按照以下步驟完成
a) mv /sbin/ifconfig /sbin/ifconfig.bak
b) tripwire --check
15. 使用twprint生成一份報告,命令是這樣的:
twprint -m r --twrfile \
/var/lib/tripwire/report/somehost.somedomain-200009-12134.twr
是否tripwire偵測到文件變化了?tripwire 會正確偵測到 /sbin/ifconfig丟失了。
把ifconfig還原回去,再次運行tripwire –check,這回還能偵測到改變嗎?
mv /sbin/ifconfig.bak /sbin/ifconfig
tripwire –check
即使你把ifconfig還原了,但是修改的時間已經變化了,所以tripwire將會報告錯誤,升級tripwire的數據庫
tripwire --update --twrfile \
/var/lib/tripwire/report/your_lastest_report_file
這將會啟動默認的編輯器,這樣你可以同意目前的變化。完成后退出編輯器,tripwire會升級你的數據庫。
16. 你可能會注意到top程序沒有被監視,這個文件經常被“root kits”所替換調,所以它應該被tripwire監視,編輯 /etc/tripwire/twpol.txt,在“System Administration Programs”項中添加 /usr/bin/top 這項規則。
/user/bin/top -> $(SEC_CRIT);
升級你的策略:
Tripwire --update-policy /etc/tripwire/twpol.txt
完成:
數據完整性的工具應該每天根據數據庫來運行。
步驟3:使用tmpwatch來清理臨時文件目錄
場景/故事
你需要確定或者確定并刪除已經有一定時間沒有人訪問的文件。
任務:
1. 運行tmpwatch的test選項,這樣可以看一下哪些文件7天沒有人訪問了:
tmpwatch –v –test 168 /tmp
步驟4:文件的訪問控制
場景/故事
你想創建一些用戶可以使用的文件,然而你想控制用戶對這些文件的訪問類型。
任務:
1. 創建一個名為supervisor的用戶
2. 在supervisor的主目錄下創建兩個文件:
touch /home/supervisor/{payroll,old.employees}
3. 防止payroll文件被刪除
chattr +i /home/supervisor/payroll
4. 只允許數據附加在old.employees文件上
chattr +a /home/supervisor/old.employees
5. 確認文件的屬性被更改:
lsattr /home/supervisor/*
6. 試著刪除payroll文件:
rm /home/supervisor/payroll
你收到什么錯誤的信息?
7. 試著編輯old.employees文件,在保存文件時有沒有錯誤消息?為什么會/不會這樣?出錯的消息是什么意思?輸入以下命令:
echo “foobar” >> /home/supervisor/old.employees
為什么這個命令可以工作?
完成:
1. 不能被刪除的payroll文件
2. /home/supervisor/old.employee文件只能把數據添加到其中,不能刪除任何文件中的內容。
步驟5:將日志集中寫入一個專門的日志主機中
場景/故事
你的老板認為將所有日志寫到一個專用的日志主機中是個非常好的主意
任務:
與你的旁邊的人一起做實驗
1. 首先配置syslogd可以接收遠程的消息,編輯 /etc/sysconfig/syslog :
SYSLOGD_OPTIONS=”-r –m 0”
2. 重啟syslogd:
service syslog restart
現在你的主機可以接收其他機器的消息了
3. 配置syslogd發消息給別的機器,在/etc/syslog.conf添加下面這行:
user.* @stationX
在這里stationX是旁邊的機器
4. 重啟syslogd:
service syslog restart
現在你的機器就會把用戶運行的程序發給旁邊的機器了
5. 使用logger創建一個syslog的消息
logger –i –t yourname ”this is a test”
這則消息是否顯示在你旁邊機器的 /var/log/messages中了呢?
問題:
為什么這個消息會顯示在 /var/log/messages?
你怎么避免這種情況?
?
?
?
?
?
?
?
試驗10
使網絡安全
估計時間: 1小時
目標: 學習使用iptables構建一個防火墻
試驗的起點: 標準的Red Hat Linux安裝,kernel要支持防火墻,iptables
要安裝
步驟1:創建一個簡單的防火墻
場景/故事
你要建立一個防火墻保護你的主機不受可疑主機192.168.0.254的騷擾,可疑的主機不只這一個,你還要創建一個規則防止你的一個鄰近的主機使用ping-flooding(洪水ping)***你的計算機。
任務:
9. 刪除所有已經存在的用戶定義的chains,重置所有chains上的默認規則,刷新所有規則:
iptables –F; iptables –X
for chain in INPUT FORWARD OUTPUT; do
iptables –p $chain ACCEPT
done
或者
service iptables stop
10. 阻止所有從鄰近的主機(192.168.0.Y)的進來的連接:
iptables –A INPUT –s 192.168.0.Y –m state --state NEW –j DROP
這樣還是允許你打開到他們系統的連接,但不是所有的
11. 限制從你的鄰居(192.168.0.X)進來的ICMP echo request(回應請求)包
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \
-m limit --limit 6/minute --limit-burst 2 -j ACCEPT
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \
-j DROP
12. 顯示你的防火墻策略
iptables -nl
13. 測試你的防火墻配置
a) 你的鄰居(192.168.0.Y)能連接到你的系統嗎?你能ping通他嗎?
b) 確認你的鄰居(192.168.0.X)使用的不是你在上面第2步時設置的地址。
c) 你的鄰居(192.168.0.X)能ping通你的系統嗎?你能ping通他嗎?
14. 保存你的防火墻設置:
iptables-save > /etc/sysconfig/iptables
或者
service iptables save
15. 配置你的系統重啟后仍保留新的防火墻規則:
chkconfig --level 2345 iptables on
現在確認一下
chkconfig --list iptables
16. 重新啟動確認你的策略仍在。
完成:
1. 你可以主動連接你的鄰居(192.168.0.Y)
2. 所有的主機都可以主動連接你,除了你的鄰居(192.168.0.Y)
3. 你的另一個鄰居(192.168.0.X)不能用ping-flood***你的系統。
清理:
當你確信成功完成了實驗,讓你剛才創建的策略實效:
service iptables stop
chkconfig iptables off
?
?
?
試驗11
使服務安全
估計時間: 1小時
目標: 使用tcp_wrappers和xinetd限制用戶對系統的訪問
試驗的起點: 標準的Red Hat Linux安裝
步驟1:限制特定主機對服務的訪問
場景/故事
某些特定主機和特定網段比較危險,為了保護你的主機,你決定阻止它們訪問你的一些敏感的服務
任務:
把你的主機配置成以下的描述的樣子(你需要跟其他兩個人合作,讓他們來測試),注意:如果沒有安裝telnet-server和openssh-server,要把它們的rpm包裝上。
17. ssh可以被本地子網訪問,但是不能讓其他網段的用戶訪問。
18. telnet可以被你的三個鄰居訪問,但是不允許其他人來訪問。
19. 任何服務都不接受從cracker.org來訪問(你能找出特定的IP地址范圍嗎?)
你可以找出不同的解決方案,下一頁是其中一種解決方法。
一種解決方法:
假定你使用旁邊的三臺計算機stationX.example.com、stationY.example.com、stationZ.example.com來測試你的配置。
1. 安裝telnet-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/telnet-server*
chkconfig telnet on
安裝openssh-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/openssh-server*
chkconfig sshd --add
2. /etc/hosts.deny
sshd :ALL EXCEPT 192.168.0.
3. /etc/xinetd.d/telnet:
only_from = 192.168.0.X 192.168.0.Y 192.168.0.Z
4. /etc/xinetd.conf
no_access = 192.168.1.0/24
如果想偵測出cracker.org的IP地址,你可以使用host命令:
host –l cracker.org server1.example.com
以上的命令查詢名稱服務器server1.example.com中的cracker.org區域信息,從返回的IP來看所有的記錄都是192.168.1.0這個子網的。呵呵世界上的事情不可能如此簡單,通常名稱服務器(DNS服務器)只允許它的從服務器進行區域傳遞,而不會允許其他計算機這樣的。所以為了保護你的安全,想知道整個區域的信息非常不容易實現。
步驟2
場景/故事
你已經通過配置/etc/hosts.deny限制FTP和telnet訪問,現在要審核你正在運行的服務了,你需要一個搭檔掃描你主機的端口。
如果你在一個可以連通到Internet的教室中,不要用nmap掃描外面的example.com域或192.168.0/24之外其他的網段,謝謝您的配合!
任務:
1. 找一臺別人的主機用以下命令進行端口掃描:
nmap –sSUR –P0 –vO <stationX> &> scan_of_stationX.txt
2. 在你的主機上使用root帳戶登陸,運行以下命令查看你的哪些進程正在監聽著哪些端口:
netstat –tulpe
主機上列出的端口與用nmap掃描的端口是否一致?如果你使用GNOME桌面環境,幾個GNOME的連接端口可能會打開,退出X-window,進入運行級別3,netstat會報告相同的端口嗎?
3. 現在使用chkconfig來驗證你的系統,輸入:
chkconfig --list |grep on
你的還配置了其他你不太了解的服務了嗎,使用chkconfig和ntsysv命令來關閉你不用的服務,之后從新啟動,重復第二步以上的步驟,netstat還會報告你關掉的服務的端口嗎?
完成:系統審核顯示只有需要的服務被運行。
試驗12
數據安全
估計時間: 1個半小時
目標: 熟悉基于加密的工具
需要的RPM軟件包: openssl,openssh,eopssh-clients,openssh-server
步驟1:使用gpg來交換加密的電子郵件
用戶alice和bob希望能夠安全的交換信息,使用GNU的Privacy Guard(gpg)來提供加密服務。您將建立兩個用戶,為他們的每個建立公鑰和私鑰。下一步,alice將獲得bob的公鑰,并且使用該公鑰來加密給他的信息,bob將解密信息。
1. 建立用戶
[root@localhost]# useradd alice; useradd bob
[root@localhost]# passwd alice
[root@localhost]# passwd bob
2.為每個用戶建立公鑰和密鑰。注意到gpg第一次運行的時候,會建立缺省的初始化用戶文件:當提示“…your message”,按下CTRL-C。
[alice@localhost]# gpg
[alice@localhost]# gpg –help
[alice@localhost]# gpg –gen-key
您將被提示多種的密鑰參數。選擇缺省的選項。當詢問您的細節的時候,設定真實的名稱為Alice。其他的信息您隨便填寫。您同時將被會問及您的密碼。您可以使用任何密碼(但是您必須自己記得住!);或者簡單的敲兩下<回車>不使用密碼。
對于用戶bob采用相同的步驟,設定其“真實的名稱”為Bobby(gpg抱怨bob太短了)
3. 檢查alice的公鑰和密鑰,該公鑰和密鑰存儲在pubring.gpg和secring.gpg中。
[alice@localhost]$ ls ~/.gnupg
[alice@localhost]$ echo no-secmem-warning >> ~/.gnupg/gpg.conf
[alice@localhost]$ gpg --list-keys
/home/alice/.gnupg/pubring.gpg
------------------------------
pub 1024D/168F25D7 2003-09-18 Alice (demo key) <alice@station1.com>
sub 1024g/CE26F831 2003-09-18
[alice@localhost]$ gpg --list-secret-keys
/home/alice/.gnupg/secring.gpg
------------------------------
sec 1024D/168F25D7 2003-09-18 Alice (demo key) <alice@station1.com>
ssb 1024g/CE26F831 2003-09-18
4.讓bob把他的公鑰放在ASCII文件中以便方便的傳遞給alice。接下來,讓alice導入bob的公鑰到她的公鑰環中去。
[bob@localhost]$ gpg --export --armor Bobby > /tmp/bob.key
[bob@localhost]$ cat /tmp/bob.key
[alice@localhost]$ gpg --import /tmp/bob.key
[alice@localhost]$ gpg --list-keys
/home/alice/.gnupg/pubring.gpg
------------------------------
pub 1024D/168F25D7 2003-09-18 Alice <alice@station1.com>
sub 1024g/CE26F831 2003-09-18
pub 1024D/67C0F0AD 2003-09-18 Bobby <bob@ station1.com >
sub 1024g/FDD05A7A 2003-09-18
5.現在alice獲得了bob公鑰的副本,并且把它加入到她的公鑰環中去。她可以給bob發送加密的消息。使用下面的命令步驟來使得alice發送給bob一個加密的/var/log/dmesg的副本。
[alice@localhost]$ cp /var/log/dmesg message.txt
[alice@localhost]$ gpg --encrypt --armor --recipient Bobby message.txt
[alice@ station1]$ head message.txt.asc
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
hQEOAzUJ6BL90Fp6EAP+J1gPH9RHQ1C+CaJGWSzUD2A603nspW2Ab+fQy7rmJbSA
5lwIPe5IzdmgSwMy80aefARQokI/cgdiWpb20Wzy2bltP413j/mrOiworKCOKguH
IJDQPqYxeticJSbwdZoTozsnLmWKp4uxappv3IaSI91w7REgN0KcwVetIn6UsYsE
AIKOqs1oXdYfU3Kzmt3DficQsZDgCuU1mVESCprb7Iyo/TvjjNuc9imqskrSveZZ
vFU8Loc7uI+gQ4HGUpFNryErMbaR2+KQnJCIz9GZJG/Lr7tFND4wCkFsu3jXvN6e
hUl5KRmRV3MWAkdOT4E3ZYF3dOhrdScxnpeIZdL5IDPo0usB9t2ZgIPHp9jKIIAc
[alice@localhost]$ mail -s "here it is" bob <message.txt.asc
6.現在讓bob檢查他的郵件,保存alice的郵件到文件。如果您不熟悉郵件客戶端,您可以使用一個簡單的基于命令行的mail工具
[bob@localhost]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bob": 1 message 1 new
>N 1 alice@stationa Thu Sep 18 22:02 84/4746 "here it is"
& w message_from_alice
"message_from_alice" [New file]
& q
[bob@localhost]$ less message_from_alice
[bob@localhost]$ gpg message_from_alice
您將被提示作為純文本文件的文件名。使用缺省的message.txt。注意gpg自動的執行期望的動作,即,使用恰當的私鑰進行解密。缺省的行為可以通過命令行的參數進行改變。
附加的步驟1的練習
1.使用gpg,使得alice能夠向bob發送使用對成密鑰加密的消息。
2.使得alice簽署和加密消息給bob,bob需要什么其他的附加信息來驗證簽名
3.使得alice為她的消息建立一個拆離的簽名,發送給bob消息和簽名。讓bob來驗證拆離的簽名
4.讓bob簽署alice的公鑰,由此使得別人相信alice就是公鑰的主人。
步驟2:使用ssh來進行加密的傳輸
場景A
alice和bob可能是不同工作站上的用戶,他們希望建立等同的帳號。也就是說,alice希望訪問bob的帳號而不需要輸入密碼,反之亦然。您將使用ssh提供如此的等同性。
在此步驟中提到的stationa指的是用戶alice,然而stationb指的是用戶bob。在執行此試驗的時候您只需調正西醫的步驟以適應您的主機名稱。如果您的伙伴一起做這個試驗,那么stationa和stationb指的就是您的機器的名稱和他的機器的名稱。如果您使用單一的機器,那么所有的機器名稱將設定為localhost。
1. 確保適當的RPM軟件包被安裝
[alice@stationa]$ rpm -q openssh
[alice@stationa]$ rpm -q openssh-clients
[alice@stationa]$ rpm -q openssh-server
2.使得root帳戶來確定bob機器上的sshd守護進程在運行
[root@stationb]# service sshd start
[root@stationb]# service sshd status
3.如果alice知道bob的密碼,那么她可以通過ssh來訪問其帳戶。注意所有的和bob帳戶的交互過程都是加密的,包括密碼的傳遞。作為alice,運行如下的命令,在合適的時候提供bob的密碼。
[alice@stationa]$ ssh bob@stationb ls /tmp
[alice@stationa]$ ssh bob@stationb
[alice@stationa]$ scp bob@stationb:/etc/services .
[alice@stationa]$ scp –r bob@stationb:/etc/xinetd.d .
4. 假設alice和bob希望采用更加安全的模式,讓alice建立ssh的公鑰和密鑰對。注意到ssh-keygen應該被-t命令行開關啟動,以至于密鑰是通過DSA算法生成的。讓alice檢視其密鑰(id_dsa)和公鑰(id_dsa.pub)。
[alice@stationa]$ ssh-keygen –t dsa
[alice@stationa]$ ls ~/.ssh
[alice@stationa]$ less ~/.ssh/id_dsa
[alice@stationa]$ less ~/.ssh/id_dsa.pub
選擇缺省的密鑰位置的選項。同時,在提示的時候,通過按下<ENTER>選擇一個空密碼 。
5.讓alice寄給bob她的公鑰的副本。讓bob把這個副本保存到文件~/.ssh/authorized_keys中去。
[alice@stationa]$ mail -s "my key" bob < ~/.ssh/id_dsa.pub
[bob@stationb]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/bob": 1 message 1 new
>N 1 alice@stationa Fri Sep 19 15:56 13/982 "my key"
& w alice_key
"alice.key" [New file]
& q
[bob@stationb]$ mkdir ~/.ssh; chmod 700 ~/.ssh
[bob@stationb]$ cat alice_key >> ~/.ssh/autorized_keys
[bob@stationb]$ chmod 600 ~/.ssh/autorized_keys
6. 假設所有的東西都在其正確的地方(即,bob在他的授權的密鑰中擁有alice的公鑰的副本),alice現在可以訪問bob的帳號,而不用提供密碼。
[alice@stationa] ssh bob@stationb id
uid=508(bob) gid=508(bob) groups=508(bob)
[alice@stationa] ssh bob@stationb cvzf - /home/bob/ > \
> /tmp/bob.stationb.tgz
如果沒有正確的配置的話,那么ssh仍然將會采用密碼認證,并且提示alice輸入密碼。有幾個步驟幫助您調試這種情況。首先,檢查在服務器上的/var/log/messages和/var/log/secure文件以幫助您獲得有用的信息。第二步,在ssh的客戶端上采用-v命令行開關。這將會產生有用的調試信息。
7.對于bob也采用相同的配置,以至于其能夠進入alice的帳戶。
場景B
alice建立了公鑰認證的Shell可以訪問bob的帳戶。她現在要求安全的訪問(基于文本的)在bob機器上的Web服務。
1. 確保在bob機器上的Web服務運行正常。如果不是,那么通過root帳號登陸bob的機器,安裝并且啟動apache web服務。
[alice@stationa]$ lynx http://stationb/
2.使用ssh,使得alice連接到bob的帳戶,為了達到另外一種效果,在alice的端口12345(或者其他未使用的端口)到bob的機器的Web服務器(端口80)建立一個加密的管道。
[alice@stationa]$ ssh bob@stationb –L 12345:stationb:80
(并且在另外一個終端)
[alice@stationa]$ lynx http://localhost:12345
alice將能夠在步驟1和步驟2看到相同的Web頁面。然而在第一步驟中,數據從Web服務器到alice的Lynx客戶端是通過明文的方式發送的,這樣很容易被嗅探到。在第二步中,數據包從Web服務器通過bob的ssh守護進程,通過密文的形式越過網絡到達alice的ssh的客戶端,并且解密和傳送到alice的lynx客戶端。
?
轉載于:https://blog.51cto.com/nppstudy/728441
總結
以上是生活随笔為你收集整理的Red Hat Linux 253 实验部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核空间-用户空间通信之deb
- 下一篇: [跟我学中小企业架构部署]之一:整体架构