摘要: 在以下的內容中我們將討論如何安全使用Linux-PAM並介紹Linux-PAM模塊的用法 5.Linux-PAM的安全問題 這一章我們將討論如何安全使用Linux-PAM。 5.1 如果出現錯誤 如果發生錯誤,Linux-PAM可能會改變系統的安全性。這取決於你自己的選擇,你可以選擇不安全(開放系統)和絕對安全(拒絕任何訪問)。通常,Linux-PAM在發生錯誤時,傾向於後者。任何的配置錯誤都可能導致系統整個或者部分無法訪問。 能夠遇到最大的問題可能就是Linux-PAM的配置文件(/etc/pam.d/*或者/etc/pam.conf)被刪除了。如果發生這種事情,你的系統就會被鎖住。 不過,還是有辦法進行恢復的。最好的方法就是重新啟動系統進入單用戶模式,然後進行正確地設置。下面是David Wood在郵件中提出的解決步驟: 首先,以單用戶模式啟動系統,出現LILO boot:時輸入: LILO boot:linux single >——此處假設使用的內核標簽是linux,可以按TAB鍵列出可用的內核 這樣你不用登錄就可以進入系統了。 如果這個辦法不行,你還可以使用急救盤啟動系統。 假設你的PAM系統只是配置文件被破壞,先按照如下步驟進行處理: cd /etc mv pam.conf pam.conf.orig mv pam.d pam.d.orig mkdir pam.d cd pam.d 接著,使用編輯程序編輯/etc/pam.d/other文件,它應該包括以下四行: auth required pam_unix_auth.so account required pam_unix_acct.so passWord required pam_unix_passwd.so session required pam_unix_session.so 然後,你就可以登錄了。如果還是不行,那有可能是因為輸入錯誤或者更嚴重的問題。如果是輸入錯誤,會在日志文件中留下記錄,可以使用tail /var/log/messages查看。 現在,你已經重新登錄到系統了。下面的工作就是重新安裝Linux-PAM和其它軟件(假設是RedHat系統),使用如下命令重新安裝PAM軟件包: rpm -Uvh --force pam-* 然後,需要安裝(重新安裝)libc庫、util-linux、wuFTP、NetKit等受影響的軟件包。如果使用X系統,也需要重新安裝。 5.2 不要使用脆弱的other文件 如果系統默認配置文件other的配置比較脆弱,系統很可能受到攻擊的威脅。 這是一個示例配置,pam_deny模塊將拒絕所有的訪問,而pam_warn模塊將向auth.notice日志設備發送一條警告信息: # The PAM configuration file for the `other' service # auth required pam_deny.so auth required pam_warn.so account required pam_deny.so account required pam_warn.so password required pam_deny.so password required pam_warn.so session required pam_deny.so session required pam_warn.so 6.模塊使用參考 這一章我們將一塊介紹Linux-PAM模塊的用法 6.1 Access模塊 6.1.1 概要 模塊名 pam_access 作者 Alexei Nogin 維護者 作者 提供的管理組功能 account 系統依賴性 需要一個配置文件。默認情況下,使用/etc/security/access.conf作為配置文件,也可以指定別的文件。 網絡支持 通過PAM_TTY變量獲得終端名,如果這個變量沒有設置,就通過ttyname()函數獲得標准輸入文件描述符的終端名。還可以使用gethostname(),yp_get_default_domain(), gethostbyname()函數獲得主機名、域名等信息,作為每個配置行的第三項。 6.1.2 綜述 提供一種日志監控風格的登錄訪問控制機制 6.1.3 account組件 能夠識別的參數 accessfile=/path/to/file.conf 描述 這個模塊提供一種日志監控風格的登錄訪問控制機制,這種機制是基於登錄名、主機名、域名、internet地址、網絡地址或者終端名的。A. Nogin把logdaemon-5.6(作者:Wietse Venema's)中的login_access.c文件做了許多改動,用到了這個模塊中。 這個模塊的行為可以使用如下參數進行修正: accessfile=/path/to/file.conf 使用別的配置文件代替默認的配置文件/etc/security/access.conf。 示例和建議 例如:在一個NIS服務器或者一個郵件服務器上,有很多用戶,但是你不想讓這些用戶具有登錄(login)能力。這時,建議你使用這個模塊。 如果你的模塊放在/lib/security目錄,而且使用/etc/pam.d/風格的配置,可以在/etc/pam.d/login、/etc/pam.d/rlogin、/etc/pam.d/rsh和/etc/pam.d/ftp文件中加入下面一行,來啟動這個模塊: account required /lib/security/pam_access.so 注意:除非你的系統可以忽略.rhosts文件的作用,否則這個模塊無法發揮作用。其中細節請參考對pam_rhost_auth模塊的介紹。 此外,在軟件的發布中有一個示例access.conf配置文件。 6.2 chroot模塊 6.2.1 概要 模塊名 pam_chrooot 作者 BrUCe Campbell 維護者 作者 提供的管理組功能 account、session、authentication 網絡支持 本地主機 6.2.2 綜述 這個模塊為普通用戶提供一個假的文件系統,例如:在他們看來的/目錄實際上是/some/where/else。 如果系統中有幾類用戶,而你對安全問題又十分重視,就可以使用這個模塊。它可以對用戶能夠看到的系統信息和能夠運行的程序進行限制。 6.2.3 account組件 原著尚未完成 6.2.4 session組件 同上 能夠識別的參數 可以使用PAM的通用參數和日志級別作為其參數。 示例和建議 提供合理的程序,例如只提供cat、ls、rm、cp和ed等。 不要濫用這個模塊,例如:你可以為每個用戶安裝一個隔離的環境,但是這樣非常浪費磁盤空間。 6.3 密碼強度檢查模塊 6.3.1 概要 模塊名 pam_cracklib 作者 Cristian Gafton 維護者 作者 提供的管理組功能 password 系統依賴性 需要libcrack庫和字典/usr/lib/cracklib.dict。 6.3.2 綜述 這個模塊可以插入到實現password管理組功能的層疊模塊中,為給定的程序提供密碼強度檢查。 這個模塊以如下方式工作:首先調用cracklib例程檢查密碼強度,如果密碼不易破譯,就進行下面的強度檢查: 新密碼是否舊密碼的回文。 新密碼是否只是就密碼改變了大小寫 和舊密碼是否相似。主要由difok參數控制,如果新舊密碼之間不同的字符數目大於或等於這個參數就接受新的密碼,這個參數的默認值是10或者新密碼的1/2。為了避免對一個很長、很復雜的密碼進行查詢,還可以使用difignore參數。這個參數可以指定一個值,如果新的密碼長度超過這個值,就不必進行這種檢查,默認值是23。 是否新密碼太短。由5個參數控制:minlen、dcredit、ucredit、lcredit和ocredit。在此就不一一介紹了。 新密碼是否是舊密碼的回環 這個密碼以前是否用過。過去用過的密碼可以在/etc/security/opasswd文件中找到。 對於標准的UNIX密碼加密算法,即使沒有參數,這個模塊也會工作得很好。但是,對於MD5加密算法,密碼可以超過8個字符,使用默認的設置將使用戶很難找到滿意的密碼。MD5算法的默認設置要求新密碼中和舊密碼相同的字符不能超過1/2,而且是強制的。例如:舊的密碼是"the quick brown fox jumped over the lazy dog",那這個密碼是很難被替換的:)。除此之外,MD5算法的默認設置還允許密碼長度小於5個字符。因此,對於MD5系統需要對配置做一些調整,提高字符數的底限,減小對不同字符的比例限制。 6.3.3 password組件 能夠識別的參數 debug、type=XXX、retry=N、difok=N、minlen=N、dcredit=N、ucredit=N、lcredit=N、ocredit=N、use_authtok 描述 這個模塊提示用戶輸入一個密碼,然後根據一個系統字典和一組規則檢查它的強度。 默認情況下,它首先提示用戶輸入一個密碼,如果認為強度足夠,就提示用戶重新輸入一遍,以保證密碼輸入正確。完成這些動作後,就把這個密碼產地給subsequent模塊,由subsequent模塊安裝新的驗證記號(也就是密碼)。 這個模塊的動作可以通過一些參數改變: debug 把模塊詳細的行為信息寫到syslog,但不包括密碼信息。 type=xxx 修改提示信息。默認的提示信息是:"New UNIX password:"和"Retype UNIX password"。設置這個選項可以使xxx代替UNIX。 retry=N 改變輸入密碼的次數,默認值是1。就是說,如果用戶輸入的密碼強度不夠就退出。可以使用這個選項設置輸入的次數,以免一切都從頭再來。 difok=N 默認值為10。這個參數設置允許