在Linux中執行有些程序時,這些程序在執行前首先要對啟動它的用戶進行認證,符合一定的要求之後才允許執行,例如login, su等
在Linux中進行身份或是狀態的驗證程序是由PAM來進行的,PAM(Pluggable Authentication Modules)可動態加載驗證模塊,因為可以按需要動態的對驗證的內容進行變更,所以可以大大提高驗證的靈活性。
Linux各個發行版中,PAM使用的驗證模塊一般存放在/lib/security/目錄下,可以使用ls命令進行查看本計算機支持哪些驗證控制方式,一般的PAM模塊名字例如pam_unix.so,模塊可以隨時在這個目錄下添加和刪除,這不會直接影響程序運行,具體的影響在PAM的配置目錄下。
PAM的配置文件一般存放在/etc/pam.conf文件,或者/etc/pam.d/目錄下。不過現在一般都會存放在/etc/pam.d/目錄下,之下是相對於每個需要被PAM控制的程序的獨立配置文件。當一個程序的驗證方式配置在pam.conf和pam.d/下某文件中出現時,以pam.d/目錄下文件為准。
查看某個程序是否支持PAM,使用命令:如果包含libpam庫,那麼該程序就支持PAM驗證。
- #ldd `which cmd` | grep libpam //cmd就代表查看的程序名
舉個不是特別恰當的例子:PAM機制就相當於給一個房屋安裝防盜門,也就是對要進入這間屋子的人進行控制,不讓這間屋子處於一種任何人都可以隨便進入的狀態。
PAM的各種模塊是開發人員預先開發好的,而我們要做的是合理的使用這些模塊,讓它們保護需要保護的程序。所以要關注的是PAM的配置文件目錄/etc/pam.d/
拿例子說事,以login這個登錄程序為例子,文件名是/etc/pam.d/login,內容是(其中一部分):從上面可以看出來,配置文件是按行指定的,每一行是一個完整的定義。 一般第一列指定的內容是:module-type,一共就只有4種,分別是:
- auth optional pam_faildelay.so delay=3000000
- auth required pam_securetty.so
- auth requisite pam_nologin.so
- session [success=ok ignore=ignore module_unknow=ignore default=bad] pam_selinux.so close
- @include common-auth