一、pam簡介
Linux-PAM(linux可插入認證子產品)是一套共享庫,使本地系統管理者可以随意選擇程式的認證方式. 換句話說,不用(重新編寫)重新編譯一個包含PAM功能的應用程式,就可以改變它使用的認證機制. 這種方式下,就算更新本地認證機制,也不用修改程式.
PAM使用配置/etc/pam.d/下的檔案,來管理對程式的認證方式.應用程式 調用相應的配置檔案,進而調用本地的認證子產品.子產品放置在/lib/security下,以加載動态庫的形式進,像我們使用su指令時,系統會提示你輸入root使用者的密碼.這就是su指令通過調用PAM子產品實作的.
二、PAM的配置檔案介紹
PAM配置檔案有兩種寫法:
一種是寫在/etc/pam.conf檔案中,但centos6之後的系統中,這個檔案就沒有了。
另一種寫法是,将PAM配置檔案放到/etc/pam.d/目錄下,其規則内容都是不包含 service 部分的,即不包含服務名稱,而/etc/pam.d 目錄下檔案的名字就是服務名稱。如: vsftpd,login等.,隻是少了最左邊的服務名列.如:/etc/pam.d/sshd
<a href="http://s3.51cto.com/wyfs02/M00/23/B9/wKioL1NA4peBfQgzAAIvlHloHRA624.jpg" target="_blank"></a>
由上圖可以将配置檔案分為四列,
第一列代表子產品類型
第二列代表控制标記
第三列代表子產品路徑
第四列代表子產品參數
1.PAM的子產品類型
Linux-PAM有四種子產品類型,分别代表四種不同的任務
它們是:認證管理(auth),賬号管理(account),會話管理(session)和密碼(password)管理,一個類型可能有多行,它們按順序依次由PAM子產品調用.
管理方式
說明
auth
用來對使用者的身份進行識别.如:提示使用者輸入密碼,或判斷使用者是否為root等.
account
對帳号的各項屬性進行檢查.如:是否允許登入,是否達到最大使用者數,或是root使用者是否允許在這個終端登入等.
session
這個子產品用來定義使用者登入前的,及使用者退出後所要進行的操作.如:登入連接配接資訊,使用者資料的打開與關閉,挂載檔案系統等.
password
使用使用者資訊來更新.如:修改使用者密碼.
2.PAM的控制标記
PAM使用控制标記來處理和判斷各個子產品的傳回值.(在此隻說明簡單的認證标記)
控制标記
required
表示即使某個子產品對使用者的驗證失敗,也要等所有的子產品都執行完畢後,PAM 才傳回錯誤資訊。這樣做是為了不讓使用者知道被哪個子產品拒絕。如果對使用者驗證成功,所有的子產品都會傳回成功資訊。
requisite
與required相似,但是如果這個子產品傳回失敗,則立刻向應用程式傳回失敗,表示此類型失敗.不再進行同類型後面的操作.
sufficient
表示如果一個使用者通過這個子產品的驗證,PAM結構就立刻傳回驗證成功資訊(即使前面有子產品fail了,也會把 fail結果忽略掉),把控制權交回應用程式。後面的層疊子產品即使使用requisite或者required 控制标志,也不再執行。如果驗證失敗,sufficient 的作用和 optional 相同
optional
表示即使本行指定的子產品驗證失敗,也允許使用者接受應用程式提供的服務,一般傳回PAM_IGNORE(忽略).
3.子產品路徑
子產品路徑.即要調用子產品的位置. 如果是64位系統,一般儲存在/lib64/security,如: pam_unix.so
同一個子產品,可以出現在不同的類型中.它在不同的類型中所執行的操作都不相同.這是由于每個子產品
針對不同的子產品類型,編制了不同的執行函數.
4.子產品參數
子產品參數,即傳遞給子產品的參數.參數可以有多個,之間用空格分隔開,如:
password required pam_unix.so nullok obscure min=4 max=8 md5
三、常用的PAM子產品介紹
PAM子產品
結合管理類型
pam_unix.so
提示使用者輸入密碼,并與/etc/shadow檔案相比對.比對傳回0
檢查使用者的賬号資訊(包括是否過期等).帳号可用時,傳回0.
修改使用者的密碼. 将使用者輸入的密碼,作為使用者的新密碼更新shadow檔案
pam_shells.so
account
如果使用者想登入系統,那麼它的shell必須是在/etc/shells檔案中之一的shell
pam_deny.so
該子產品可用于拒絕通路
pam_permit.so
子產品任何時候都傳回成功.
pam_securetty.so
如果使用者要以root登入時,則登入的tty必須在/etc/securetty之中.
pam_listfile.so
password session
通路應用程的控制開關
pam_cracklib.so
這個子產品可以插入到一個程式的密碼棧中,用于檢查密碼的強度.
pam_limits.so
定義使用系統資源的上限,root使用者也會受此限制,可以通過/etc/security/limits.conf或/etc/security/limits.d/*.conf來設定
四、執行個體
1、pam_securetty.so
限制root從tty1,tty2,tty5登入(無實際意義,隻是示範pam_securetty的用法)
在/etc/pam.d/login中添加如下一行
<a href="http://s3.51cto.com/wyfs02/M02/23/BA/wKioL1NBCZDBnx8HAAE9S9snU1U072.jpg" target="_blank"></a>
在/etc/pam.d/securetty中将tty1,tty2,tty5注釋即可
<a href="http://s3.51cto.com/wyfs02/M01/23/B9/wKiom1NBCiOhcejdAACA2uoAvRo284.jpg" target="_blank"></a>
之後使用root使用者再次登入,就會出現
<a href="http://s3.51cto.com/wyfs02/M02/23/B9/wKiom1NBCsSgE_YiAABRfJTFmxk197.jpg" target="_blank"></a>
這麼做其實并不是隻限制root使用者,也可以将其它使用者用此方法來限定,當系統安裝完成後,使用此方法來增強一下安全性。
2、pam_listfile.so
僅essun使用者可以通過ssh遠端登入
在/etc/pam.d/sshd檔案中添加一條
<a href="http://s3.51cto.com/wyfs02/M02/23/BA/wKioL1NBBICTVJspAADbjtLO1fM855.jpg" target="_blank"></a>
添加兩個使用者essun和tom
<a href="http://s3.51cto.com/wyfs02/M00/23/B9/wKiom1NBBDuTICs-AAIjFezjhDo133.jpg" target="_blank"></a>
編輯file指定的檔案,添加上一個使用者essun
使用tom使用者登入
<a href="http://s3.51cto.com/wyfs02/M01/23/B9/wKiom1NBAceDbcx_AAHozP5AZ80868.jpg" target="_blank"></a>
可以看到提示輸入密碼,當輸入正确的密碼後會提示
<a href="http://s3.51cto.com/wyfs02/M00/23/BA/wKioL1NBAiqgIGzBAAGtYJF6X_0844.jpg" target="_blank"></a>
就像輸入了錯誤的密碼一樣。而在使用essun使用者登入則不會出現拒絕登入的提示
<a href="http://s3.51cto.com/wyfs02/M02/23/B9/wKiom1NBAzSTFyp6AAH9CVc_vro579.jpg" target="_blank"></a>
注:此處如果root也使用ssh遠端連接配接,也會受到pam_listfile.so限制的。
其實pam子產品的使用方法套路都差不多
如想了解更多的PAM子產品的用法請man modules
溫馨提示:
如果發生錯誤,Linux-PAM 可能會改變系統的安全性。這取決于你自己的選擇,你可以選擇不安全(開放系統)和絕對安全(拒絕任何通路)。通常,Linux-PAM 在發生錯誤時,傾向于後者。任何的配置錯誤都可能導緻系統整個或者部分無法通路。
配置 Linux-PAM 時,可能遇到最大的問題可能就是 Linux-PAM 的配置檔案/etc/pam.d/*被删除了。如果發生這種事情,你的系統就會被鎖住。
有辦法可以進行恢複,最好的方法就是用一個備份的鏡像來恢複系統,或者登入進單用
戶模式然後進行正确的配置。
=====================================完========================================
本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1391133,如需轉載請自行聯系原作者