PAM使用配置文件/etc/pam.conf(或/etc/pam.d/下的文件),來管理對程序的認證方式。應用程序調用相應的配置文件,從而調用本地的認證模塊.模塊放置在/lib/security下,以加載動態(tài)庫的形式進行調用(dlopen(3))。像我們使用su命令時,系統(tǒng)會提示你輸入root用戶的密碼。這就是su命令通過調用PAM模塊實現(xiàn)的。

二. PAM的配置文件介紹

1.PAM配置文件的格式

PAM配置文件有兩種寫法:

一種是寫在/etc/pam.conf中.格式如下:
ftpd   auth  required  pam_unix.so  nullok

ftpd:表示服務名,即針對哪一個服務進行的認證配置。required:為模塊類型.PAM有四中模塊類型,分別代表不同的任務類型。
pam_unix.so:為模塊路徑.即要調用模塊的位置。nullok:為模塊參數(shù),即傳遞給模塊的參數(shù)。

另一種寫法是,將PAM配置文件放到/etc/pam.d/目錄下,使用應用程序名作為配置文件名。如:vsftpd,login等。配置文件的格式與pam.conf類似,只是少了最左邊的服務名列。如:/etc/pam.d/cups

#%PAM-1.0
auth    required        pam_stack.so service=system-auth
account required        pam_stack.so service=system-auth

2.PAM的模塊類型

Linux-PAM有四種模塊類型,分別代表四種不同的任務。它們是:認證管理,賬號管理,會話管理和密碼管理。一個類型可能有多行,它們按順序依次由PAM模塊調用。
auth

 用來對用戶的身份進行識別.如:提示用戶輸入密碼,或判斷用戶是否為root等。

account

 對帳號的各項屬性進行檢查.如:是否允許登錄,是否達到最大用戶數(shù),或是root用戶是否允許在這個終端登錄等。

session

 這個模塊用來定義用戶登錄前的,及用戶退出后所要進行的操作。如:登錄連接信息,用戶數(shù)據(jù)的打開與關閉,掛載文件系統(tǒng)等。

password

 使用用戶信息來更新。如:修改用戶密碼。

3.PAM的控制標記

PAM使用控制標記來處理和判斷各個模塊的返回值。

required

 這個標記表示需要模塊返回一個成功值。如果返回失敗,則繼續(xù)進行同類型的下一個操作,當所有此類型的模塊都執(zhí)行完后.才返回失敗值。

requisite

 與required相似,但是如果這個模塊返回失敗,則立刻向應用程序返回失敗,表示此類型失敗。不再進行同類型后面的操作。

sufficient

 如果此模塊返回成功,則直接向應用程序返回成功,表示此類型成功。不再進行同類型后面的操作。如果失敗,也不會影響這個類型的返回值。

optional

 使用這個標記的模塊,將不進行成功與否的返回。一般返回一個PAM_IGNORE(忽略)。

4.模塊路徑

模塊路徑。即要調用模塊的位置。 一般保存在/lib/security/下,如: pam_unix.so
同一個模塊,可以出現(xiàn)在不同的類型中。它在不同的類型中所執(zhí)行的操作都不相同。這是由于每個模塊針對不同的模塊類型,編制了不同的執(zhí)行函數(shù)。

5.模塊參數(shù)

模塊參數(shù),即傳遞給模塊的參數(shù).參數(shù)可以有多個,之間用空格分隔開,如:
password   required   pam_unix.so nullok obscure min=4 max=8 md5

三.編寫PAM配置文件

1.PAM模塊介紹

pam_unix.so模塊:
auth類型: 提示用戶輸入密碼,并與/etc/shadow文件相比對。匹配返回0(PAM_SUCCESS)。
account類型: 檢查用戶的賬號信息(包括是否過期等)。帳號可用時,返回0。
password類型: 修改用戶的密碼。將用戶輸入的密碼,作為用戶的新密碼更新shadow文件。

pam_cracklib.so模塊:
password類型: 這個模塊可以插入到一個程序的密碼棧中,用于檢查密碼的強度。
這個模塊的動作是提示用戶輸入密碼,并與系統(tǒng)中的字典進行比對,檢查其強度。

pam_loginuid.so模塊:
session類型:用來設置已通過認證的進程的uid.以使程序通過正常的審核(audit)。

pam_securetty.so模塊:
auth類型: 如果用戶要以root登錄時,則登錄的tty必須在在/etc/securetty中法之前。

pam_rootok.so模塊:
auth類型: pam_rootok模塊用來認證用戶id是否為0。為0返回"PAM_SUCCESS"。

pam_console.so模塊:
session類型: 當用戶登錄到終端時,改變終端文件文件的權限。在用戶登出后,再將它們修改回來。

pam_permit.so模塊:
auth,account,password,session類型: pam_permit模塊任何時候都返回成功。

pam_env.so模塊 :
auth類型: pam_env允許設置環(huán)境變量.默認下,若沒有指定文件,將依據(jù)/etc/security/pam_env.conf進行環(huán)境變量的設置。

pam_xauth.so模塊:
session類型: pam_xauth用來在用戶之間轉發(fā)xauth-key。
如果不進行pam_xauth,當用戶調用su成為另一個用戶時,這個用戶將不可以再訪問原來用戶的X顯示,因為新用戶沒有訪問顯示的key.pam_xauth解決了當會話建立時,從原始用戶到目標用戶轉發(fā)key和用戶退出時銷毀key的問題。

實驗:
注釋/etc/pam.d/su中的
"session    optional     /lib/security/$ISA/pam_xauth.so"行
在桌面終端執(zhí)行su切換到另一個用戶時,執(zhí)行xterm會報錯,提示無法訪問DISPLAY。
刪除注釋后,再使用su切換到另一個用戶時,執(zhí)行xterm,會正常打開一個xterm終端窗口。

pam_stack.so模塊:
auth,account,password,session: pam_stack可以調用另一個服務。也就是多個服務可以包含到一個設置中.當需要修改時,只修改一個文件就可以了。

pam_warn.so模塊:
auth,account,password,session: pam_warn用來記錄服務,終端,用戶,遠程用戶和遠程主機的信息到系統(tǒng)日志.模塊總是返回PAM_IGNORE,意指不希望影響到認證處理。

2.編寫PAM配置文件

以root身份編輯/etc/pam.d/pamtest,并添加下面內容:

#提示用戶輸入密碼
auth     required   pam_unix.so
# 驗證用戶賬號是否可用
account  required   pam_unix.so
# 向系統(tǒng)日志輸出一條信息
account  required   pam_warn.so

分享到

多易

相關推薦