https://www.cnblogs.com/ilinuxer/p/5087447.html
linux中pam模塊
一、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
由上圖可以將配置文件分為四列,
第一列代表模塊類型
第二列代表控制標記
第三列代表模塊路徑
第四列代表模塊參數
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 | auth |
提示用戶輸入密碼,並與/etc/shadow文件相比對.匹配返回0 |
||
account | 檢查用戶的賬號信息(包括是否過期等).帳號可用時,返回0. | |||
password | 修改用戶的密碼. 將用戶輸入的密碼,作為用戶的新密碼更新shadow文件 | |||
pam_shells.so | auth account |
如果用戶想登錄系統,那么它的shell必須是在/etc/shells文件中之一的shell | ||
pam_deny.so | account auth password session |
該模塊可用於拒絕訪問 | ||
pam_permit.so | auth account password session |
模塊任何時候都返回成功. | ||
pam_securetty.so | auth | 如果用戶要以root登錄時,則登錄的tty必須在/etc/securetty之中. | ||
pam_listfile.so | auth account password session |
訪問應用程的控制開關 | ||
pam_cracklib.so | password | 這個模塊可以插入到一個程序的密碼棧中,用於檢查密碼的強度. |
||
pam_limits.so | session | 定義使用系統資源的上限,root用戶也會受此限制,可以通過/etc/security/limits.conf或/etc/security/limits.d/*.conf來設定 |
四、實例
1、pam_securetty.so
限制root從tty1,tty2,tty5登錄(無實際意義,只是演示pam_securetty的用法)
在/etc/pam.d/login中添加如下一行
1
|
auth required pam_securetty.so
|
在/etc/pam.d/securetty中將tty1,tty2,tty5注釋即可
之后使用root用戶再次登錄,就會出現
這么做其實並不是只限制root用戶,也可以將其它用戶用此方法來限定,當系統安裝完成后,使用此方法來增強一下安全性。
2、pam_listfile.so
僅essun用戶可以通過ssh遠程登錄
在/etc/pam.d/sshd文件中添加一條
1
|
auth required pam_listfile.so item=user sense=allow
file
=
/etc/sshdusers
onerr=succeed
|
添加兩個用戶essun和tom
編輯file指定的文件,添加上一個用戶essun
1
|
#echo "essun" >/etc/sshdusers
|
使用tom用戶登錄
可以看到提示輸入密碼,當輸入正確的密碼后會提示
就像輸入了錯誤的密碼一樣。而在使用essun用戶登錄則不會出現拒絕登錄的提示
注:此處如果root也使用ssh遠程連接,也會受到pam_listfile.so限制的。
其實pam模塊的使用方法套路都差不多
如想了解更多的PAM模塊的用法請man modules
溫馨提示:
如果發生錯誤,Linux-PAM 可能會改變系統的安全性。這取決於你自己的選擇,你可以選擇不安全(開放系統)和絕對安全(拒絕任何訪問)。通常,Linux-PAM 在發生錯誤時,傾向於后者。任何的配置錯誤都可能導致系統整個或者部分無法訪問。
配置 Linux-PAM 時,可能遇到最大的問題可能就是 Linux-PAM 的配置文件/etc/pam.d/*被刪除了。如果發生這種事情,你的系統就會被鎖住。
有辦法可以進行恢復,最好的方法就是用一個備份的鏡像來恢復系統,或者登錄進單用
戶模式然后進行正確的配置。