奉獻Red Hat Linux 033實驗翻譯(二)

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

Lab 7 RPM和Kickstart
步驟一: kickstart安裝
安裝前閱讀排故的建議
1. 編輯 /root/anaconda-ks.cfg文件,在開頭插入以下行
nfs --server server1.example.com --dir /var/ftp/pub
使用以下分區方案:
clearpart --all
part / --fstype ext3 ?size=256
part /boot ?fstype ext3 --size=100
part /tmp ?fstype ext3 --size=128
part /usr ?fstype ext3 --size=2800
part /var ?fstype ext3 --size=400
part /home ?fstype ext3 --size=128
part swap ?size=512
在%post部分增加以下內容作為一行
perl ?pi ?e 『s, Welcome to %n, My kickstart system %n,』 /etc/X11/gdm/gdm.conf
2. 保存anaconda-ks.cfg文件為ks.cfg.複製到軟盤
3. 用光碟或其他啟動介質重啟動系統, 把kickstart軟盤放在軟碟機中
4. 當出現boot提示符時 輸入linux ks=floppy 如果軟盤有錯系統會提示修正.
使用這個系統進行後面的實驗.

排故建議:
如果安裝過程中提示配置語言或者鍵盤,是因為ks.cfg中缺少對應的行.
如果出現Disk Druid, 說明分區配置不對.確定有足夠的硬碟空間,並且分區配置包括swap分區.
Phython編譯器在出錯時會大量溢出信息.使用仔細檢查,即使對Phython不熟悉也會找到出錯原因.
在%post部分之外的錯誤往往會在覆蓋現有系統之前出現.可以重啟動系統並修改ks.cfg文件.啟動時用linux 1進入單用戶模式可以加快啟動速度.

步驟二 安裝
Lab10 系統恢復和排故
目標:掌握排故過程中的技巧
1. 使用RPM查詢以下請求:
initscripts包中有那些文件?
Bash包由哪一台主機創建?
pam包在安裝后是否更改過?
哪個包名稱中包含gnome?
哪個包生成了/etc/inittab文件?
哪個包生成了/etc/fstab文件?為什麼?
你的內核的版本更新記錄的最後一條記錄是什麼?
以下命令有什麼差異?
rpm ?ivh
rpm ?Uvh
rpm ?F
2. 練習檢查光碟或server1上的RPM包的簽名和完整性
使用 rpm ?import 把Red Hat 的GPG導入系統
gpg --import /usr/share/rhn/RPM-GPG-KEY
rpm --import /usr/share/rhn/RPM-GPG-KEY
下面的命令將把包中的私鑰和安裝的公鑰比較,確定包在創建后是否改變過
rpm -K
3. 驗證.
從ftp://server1.example.com/pub 安裝可用的更新.注意,如果要複製到本地安裝則要有足夠的空間,在對內核進行更新時要使用安裝而非更新命令.
刪除Red Hat的公鑰(使用 man gpg查看方法), 用Red Hat,Inc(security@redhat.com)創建假公鑰, 然後使用rpm -K查看當密鑰不一致時的情況.

步驟三: 自動解析依存性
開始前, 確認以下包沒有安裝:
rpmdb-redhat
xsane
sane-backends
可用的文件包在載入NFS共享server1.example.com:/var/ftp/pub后找到,位於RedHat/RPMS
1. 觀察沒有自動解析的情況: 從共享位置安裝xsane包.會出現類似提示:
error: Failed denpendencies:
libsane.so.1 is needed by xsane-0.89-3
不要試圖完成安裝.
2. 使用rpmdb-redhat. 安裝rpmdb-redhat包,再次試圖安裝xsane包.這次仍然會失敗,但是會給出有用的信息:
Suggested resolutions:
sane-backends-1.0.9-5.i386.rpm
3. aid. 在RPMS目錄下使用rpm ?ivh --aid xsane-0.*.rpm
sane-backends將被自動載入以滿足依存性
注意,因為安裝包和依存的包在同一目錄,所以不需要指明rpm安裝的方法

步驟四: GRUB
1. 重啟動進入GRUB界面.如果在grub.conf文件中設置了timeout選項,可以看到畫面下方的倒數.
2. 在倒數結束之前,按方向鍵停止計數
3. 注意顯示下方的提示.使用上下鍵選擇啟動的內核,按e選擇編輯grub.conf的內容.
4. 根據下方的提示,使用上下鍵選擇有kernel字樣的行並按e編輯
5. 現在進入了GRUB編輯模式.輸入空格,s 然後回車.可以看到返回了前一畫面,kernel行多出了文本s.如果不想保存更改,可以按ESC返回前一畫面
6. 按b使用更改選項啟動.在上例中將進入單用戶模式(single user)
7. 重啟后檢查grub.conf文件.你將發現所作的更改沒有保存在文件中
8. 重複以上步驟, 試驗其他runlevel

Lab 8 邏輯卷和陣列
目標: 在安裝后創建邏輯卷和陣列的技巧
步驟一: 使用LVM創建邏輯卷
1. 使用fdisk在未分區空間創建四個新分區,類型為Linux LVM (0x8e), 尺寸一樣,為了加快速度,不要大於1G. 退出時使用w保存更改.不要重啟動.
2. 編輯/etc/modules.conf中包含以下行(RHEL 可以不用做以下修改):
alias block-major-58 lvm-mod
alias char-major-109 lvm-mod
使用當前內核創建initrd
mkinintrd ?f ?v /boot/initrd-$(uname ?r).img $(uname ?r)
這個命令將使系統在啟動時載入lvm-mod模塊,啟用LVM
3. 重啟動系統
4. 用root登錄, 運行vgscan初始化LVM配置文件
5. 使用pvcreate將LVM分區初始化為物理卷.假設分區為
/dev/hda9
/dev/hda10
/dev/hda11
/dev/hda12
命令為: pvcreate /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
可以使用pddisplay查看分區信息
6. 然後創建卷組test0. 使用默認4MB的擴展尺寸,只包含一個物理卷
vgcreate test0 /dev/hda9
可以使用pddisplay查看信息

7. 創建一個小邏輯卷,不要佔用所有空間. 使用vgdisplay的VG size和 PE/size信息,比如創建一個40M的邏輯卷:
lvcreate ?L 40M ?n data test0
可以使用 lvdisplay /dev/test0/data 確認命令執行了.
8. 在邏輯卷上創建ext3文件系統: mke2fs ?j /dev/test0/data
9. 創建/data目錄. mount /dev/test0/data /data
10. 複製文件到/data. 可以創建一個大文件: dd if=/dev/zero of=/data/bigfile bs=1024 count=20000
使用df檢查/data的磁碟使用情況和剩餘空間. 確認能夠正常使用.可以編輯/etc/fstab來自動載入/data.重啟動測試

步驟二: 使用邏輯卷
1. 首先, 卸載/data. 使用e2fsadm擴展分區尺寸: e2fsadm ?L+50M /dev/test0/data
2. 重載入/dev/test0/data到/data, 確認文件. 運行df檢查/data的磁碟使用情況和剩餘空間.
3. 使用剩餘擴展創建第二個邏輯分區. 運行vgdisplay查看PE /size,格式類似於166/644MB,這表示卷組包含166個擴展,664MB剩餘空間. 創建一個佔用166個擴展邏輯卷/dev/test0/scratch, 命令為:
lvcreate ?l 166 ?n scratch test0
4. 格式化新卷: mke2fs ?j /dev/test0/scratch
5. 把未使用的物理卷加入卷組 vgextend test0 /dev/hda10
6. 如果再次運行vgdisplay, 可以看到增加的擴展.用20MB的擴展定義新邏輯卷.
e2fsadm ?L+20M /dev/test0/scratch
使用lvdisplay和vgdisplay確認成功
7. 接下來用/data的只讀快照創建新的邏輯卷. 首先用只讀選項載入/data
mount ?o remount,ro /data
8. 快照不需要和父捲尺寸一致,我們假設不需要保存太多數據,可以設置為5M
lvcreate ?s ?L 5M ?n snap /dev/test0/data
9. 現在重載入/data為讀寫狀態
mount ?o remount,rw /data
10. 創建新載入點/snap, 使用 mount /dev/test0/snap /snap 比較/data和/snap,兩者內容應該一致
11. 運行命令 for I in$(seq 1 10); do echo $1 > /data/$1; done 將在/data下創建十個文件,名稱從1到10. 這個命令不影響/snap, 可以用lvdisplay /dev/test0/snap檢查
12. 當快照邏輯卷不能容納改變的塊時,將被LVM自動刪除,即使當前在載入狀態.(避免這一情況的方法是尺寸和父卷一致,或者及時用lvextend擴展尺寸)可以通過以下方式看到這一現象:
rm /data/bigfile
for i in $(seq 1 10000); do echo $1 > /data/$1; done
13. 在/var/log/messages里可以看到類似信息:
Mar 19 16:30:02 station12 kernel: lvm --giving up to snapshot
/dev/test0/data on /dev/test0/snap: out of space
運行ls /snap. 快照已經不可用了,目錄是空的.運行 lvdisplay /dev/test0/snap,和11步的結果比較.
14. 做完快照之後,如果數據已經備份,或者快照已被刪除,都需要被卸載,否則會造成輕微的性能下降, 使用 umount /snap; lvremove /dev/test0/snap

在進行陣列試驗以前清除LVM卷:
刪除所有/etc/fstab中增加的記錄
umount /dev/test0/data; umount /dev/test0/scratch
lvremove /dev/test0/data; lvremove /dev/test0/scratch
vgchange ?an test0; vgremove test0

步驟三: 軟體陣列
1. 在實驗中我們將在同一磁碟創建多個分區來實現陣列,但是在實際工作中我們一般使用在不同磁碟上的分區來創建.使用fdisk將Linux LVM(0x8e)分區轉換為Linux raid auto(0xfd)分區.保存更改.
2. 重啟動系統.
3. 創建/etc/raidtab文件定義四個RAID-5陣列設備.根據以下示例,用實際的分區替換.chunk-size是一個重要的參數,決定了一次向陣列中每個磁碟寫入數據的量.RAID-5需要一個校驗演算法行,一般設為left-symmetric來提高磁碟性能
raiddev /dev/md0
raid-level 5
nr-raid-disks 4
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
device /dev/hda11
raid-disk 2
device /dev/hda12
raid-disk 3

4. 初始化陣列: mkraid /dev/md0. 如果陣列沒有啟動,手動啟動 raidstart /dev/md0. 此時陣列會立即開始建立,但是已經可用了.可以在另一個虛擬控制台用 watch cat /pro/mdstat 監控建立過程.
5. 使用4k的塊的ext3文件系統格式化. Stride選項應設為chunk size和陣列磁碟數的乘積, 可以加快格式化的速度
mke2fs ?j ?b 4096 ?R stride=32 /dev/md0
6. 查看是否能 mount /dev/md0 /data. 即使仍在建立過程也可以載入. 使用df命令查看文件系統尺寸. 如果是四個同尺寸的分區組成的陣列,文件系統尺寸應該為三個分區之和.(其他空間用於儲存校驗信息)
7. 使用lsraid顯示陣列設備的相關信息. Lsraid ?A ?a /dev/md0
8. 試著在/data創建文件. 可以在/etc/fstab中加入記錄用來自動載入.
9. 檢查/proc/mdstat, 確認陣列已經建立. 可以看到類似輸出:
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/4] [UUUU]
10. 測試卷的破壞.用以下命令模擬: raidsetfaulty /dev/md0 /dev/hda11
在/var/log/messages中尋找出錯信息, 注意/proc/mdstat文件的改變
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/3] [UUUU]
重啟動系統, 查看啟動時dmesg和/var/log/messages的出錯信息
11. 模擬在重啟前更換了損壞的磁碟. 使用命令替換陣列分區:
raidhotadd /dev/md0 /dev/hda11
12. 這時將看到/proc/mdstat顯示陣列的重建

進階實驗:在軟體陣列上創建LVM
以下實驗可選,需要創建一個在兩個磁碟上的物理卷建立的RAID1鏡像卷基礎上的RAID10. 使用同一磁碟的兩個分區模擬這一情況.
1. 撤銷前面的軟體陣列設置: umount /dev/md0, 刪除/et/fstab中的對應行.運行 raidstop /dev/md0. 從/etc/raidtab中刪除/dev/md0設備.
2. 編輯/etc/raidtab創建兩個RAID1鏡像/dev/md0和/dev/md1, 分別由兩個分區組成.示例如下:
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
persistent-superblock 1
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
3. 注意: 運行命令時可能需要-f和-R重運行.因為系統會檢測到上次創建的相關superblock.
4. 格式化並啟動陣列設備: mkraid /dev/md0; mkraid /dev/md1
5. 設置陣列設備為物理卷: pvcreate /dev/md0 /dev/md1
6. 創建卷組: vgcreate test0 /dev/md0 /dev/md1
7. 使用vgdisplay查看有多少擴展可用
8. 設置條帶的邏輯卷. 使用-i 指定構成條帶邏輯卷的卷組中物理卷的數目. ?I 設置條帶的尺寸. 當使用-i時作用等同於RAID0陣列的chunk-size.使用 ?l指定vgdisplay報告的卷組中邏輯卷可用的擴展.假設有500可用.示例為:
lvcreate ?i 2 ?I 64 ?l 500 ?n data test0
9. 使用ext3格式化/dev/test0/data ,作為條帶的RAID陣列設置stride選項,
mke2fs ?j ?b 4096 ?R stride=8 /dev/test0/data
10. 在/data載入/dev/md0/data. 把文件複製到/data,使用e2fsadm重設置尺寸.使用raidsetfaulty模擬磁碟損壞.(條帶的邏輯卷在創建后可以重定義尺寸,只要不在另一個物理卷上使用這些擴展.)這樣將得到RAID的冗餘,條帶的性能和LVM的靈活性.

Lab 9 X window系統
步驟一: 了解X的啟動順序
1. 創建並編輯/etc/X11/xinit/xinitrc.d/xeyes,加入以下行並設為可執行
#!/bin/sh
xeyes &
2. 切換到runlevel5
3. 使用顯示管理器登錄系統 gdm,kdm,xdm等.發生了什麼?切換到虛擬控制台,運行
startx --:1
發生了什麼? 為什麼需要指定 -- :1?
4. 在創建的用戶主目錄下創建並編輯.xsession文件,增加以下行並設為可執行:
#!/bin/sh
xterm &
exec metacity
5. 使用這個帳戶登錄,發生什麼? 使用這個帳戶在虛擬控制台登錄,並運行startx,發生了什麼?

其他問題:
1. 列出升級視頻卡的過程,包括選擇卡的過程.
2. 描述當視頻卡配置錯誤時,如何修復一個啟動到runlevel5的系統.


Lab 10 系統修復和排故
目標: 熟悉系統修復的技巧

步驟一: 在rescue模式修復MBR
rescue模式提供了修復一個不能正常啟動的系統的最後手段. 即使啟動載入器或者根文件系統配置錯誤或損壞.進入該模式需要RedHat Linux的第一張光碟或者是網路路徑的boot.iso鏡像
任務.破壞GRUB使之不能啟動.使用rescue模式重安裝GRUB.
1. 使用以下命令,將MBR中的GRUB的第一部分用0覆蓋.小心設置塊尺寸.如果寫入太多0,會覆蓋分區表,造成的問題會大的多.(以下命令假設使用IDE設備)
dd if=/dev/zero of=/dev/had bs=446 count=1; reboot
恭喜---你的啟動扇區已經破壞.不過你的主分區表還可用.重啟確定系統不能啟動.使用以下步驟修復系統.
2. 從光碟/軟盤啟動進入rescue模式. 當啟動時輸入 linux rescue
3. 修復環境將詢問是否載入硬碟文件系統.選擇繼續.用讀寫模式載入.檢查mount的輸出保證文件系統載入正確.可以使用fdisk檢查分區
mount
fdisk ?l /dev/hda
4. 注意硬碟載入在/mnt/sysimage. 檢查grub.conf文件確認配置正確.
cat /mnt/sysimage/boot/grub/grub.conf
5. 安裝GRUB需要切換上下文,使/mnt/sysimage成為grub-install認為的系統的根.載入chroot shell, 運行grub-install, 退出.
Chroot /mnt/sysimage
grub-install /dev/had
exit
6. 輸入exit退出rescue模式. 注意這會卸載載入的分區.

步驟二: 在rescue模式安裝軟體.
使用以下命令覆蓋mount命令:
cp /bin/date /bin/mount
恭喜---你已經破壞了一個重要的執行文件. 重啟動后你會發現系統不能啟動.使用rescue模式,安裝合適的rpm包.
1. 使用啟動介質啟動系統到rescue模式.
2. 系統會提示載入硬碟文件系統.使用mount檢查是否正確載入.
3. 注意硬碟的文件系統載入在/mnt/sysimage. 查看哪個rpm包包含這個命令
rpm ?qf --root /mnt/sysimage/bin/mount
4. 確認mount的rpm包,使用chroot安裝rpm
chroot /mnt/sysimage
rpm ?V mount
exit
5. rpm會報告/bin/mount被修改了.從網路重新安裝mount包,要使用chroot
rpm ?ivh --force --root /mnt/sysimage /mnt/source/RedHat/RPMS/mount*
6. 輸入exit退出rescue模式. 注意這會卸載載入的分區.

感謝Sherrie和Donald ! 還有我的Mandy!
























標題: 奉獻Red Hat Linux 253 實驗翻譯(KevinZ)

###請轉貼時保留以下內容######
Red Hat Linux 253 實驗部分
應廣大RH愛好者的要求,奉獻Red Hat Linux 253 實驗翻譯
請提出寶貴意見Mail:kissingwolf@hotmail.com
KevinZ(kissingwolf)
2004.3.24
#############################

Red Hat Linux 253 實驗部分

試驗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:
>>> DATA
250 2.1.5 ... 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=
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= xample.com>, size=341, nrcpt=1 (queue active)
Sep 22 02:51:51 station1 postfix/smtp[3536]: A20ED348389: to= 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 .
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
data
354 ok, send it; end with .
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 .
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 .
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 : 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:
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來安?...hmail軟體包

注意到有很多選項可以影響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 < wwwX.example.com
EOF

(這建立一個只有一行的HTML文件)

6.在/etc/httpd/conf/httpd.conf尾部加入以下幾行:

NameVirtualHost 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 Options Indexes Includes

7.確保您的DNS系統哦功能能夠解析您的虛擬主機的名稱。
dig wwwX.example.com

8. 重新啟動httpd: service httpd reload

9.在您的Web瀏覽器並且設定URL到新的虛擬主機:
http://wwwX.example.com
您看到您自己定義的頁面了么?

步驟2:使用CGI

任務

1. 在步驟1設定的 塊中增加一行:
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 「
」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 「


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頁面,您?...??得線索。

4.添加下列行到伺服器的配置文件httpd.conf,在wwwX.example.com虛擬主機的 塊中增加一行:

AllowOverride AuthConfig

5.再次嘗試訪問http://wwwX.example.com頁面,您?...??許可權么?

步驟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安裝?...slock服務。

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 &> 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
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
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

選擇預設的密鑰位置的選項。同時,在提示的時候,通過按下選擇一個空密碼 。

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客戶端。

同時感謝Iknownothing參與翻譯工作所付出的辛勤!感謝Mandy在0點后還要忍受那無節奏的打字聲!




[火星人 ] 奉獻Red Hat Linux 033實驗翻譯(二)已經有1540次圍觀

http://coctec.com/docs/linux/show-post-134070.html