上周客戶現(xiàn)場(chǎng)遇到一個(gè)奇怪的問(wèn)題,在執(zhí)行應(yīng)用安裝腳本時(shí)承桥,需要輸入密碼驻粟,這個(gè)時(shí)候即使輸入了正確的密碼依然報(bào)校驗(yàn)失敗。當(dāng)時(shí)嘗試解決了一下凶异,但是沒(méi)找到問(wèn)題的根本原因蜀撑,還會(huì)報(bào)其他原因。為了不耽誤交付進(jìn)度剩彬,只能讓重新安裝操作系統(tǒng)酷麦。
當(dāng)時(shí)就懷疑和Linux的PAM有關(guān),但苦于對(duì)PAM不熟喉恋,網(wǎng)上也找不到對(duì)應(yīng)的解決方案沃饶,這兩天正好利用周末研究下Linux的PAM機(jī)制,下面簡(jiǎn)要介紹一下什么是PAM轻黑。
在Linux中執(zhí)行有些程序時(shí)糊肤,這些程序在執(zhí)行前首先要對(duì)啟動(dòng)它的用戶進(jìn)行認(rèn)證,符合一定的要求之后才允許執(zhí)行氓鄙,例如login, su等轩褐。在Linux中進(jìn)行身份或是狀態(tài)的驗(yàn)證程序是由PAM來(lái)進(jìn)行的,PAM(Pluggable Authentication Modules)可動(dòng)態(tài)加載驗(yàn)證模塊玖详,因?yàn)榭梢园葱枰獎(jiǎng)討B(tài)的對(duì)驗(yàn)證的內(nèi)容進(jìn)行變更,所以可以大大提高驗(yàn)證的靈活性勤讽。
PAM的規(guī)則文件一般有4列蟋座,這里以/etc/pam.d/sshd為例:
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
第一列代表模塊類型
第二列代表控制標(biāo)記
第三列代表模塊路徑
第四列代表模塊參數(shù)
模塊類型常見(jiàn)如下幾種:
控制標(biāo)記如下:
這里我不打算具體介紹PAM的細(xì)節(jié)和配置規(guī)則,這里推薦大家看這一篇博客脚牍,寫(xiě)的非常詳細(xì)字也非常多向臀,感興趣的可以抽半個(gè)小時(shí)看一下。
有了上面對(duì)PAM的初步認(rèn)識(shí)后诸狭,下面我們來(lái)看幾個(gè)小例子券膀,通過(guò)例子加深對(duì)PAM的了解,以下例子都是在CentOS 8環(huán)境下實(shí)驗(yàn)驯遇。
-
root用戶su普通用戶也要用密碼
我們創(chuàng)建一個(gè)普通并賦密碼芹彬,在root下通過(guò)su - 切換該賬號(hào)登錄是不需要密碼的,如圖:
這是因?yàn)樵?etc/pam.d/su中配置了當(dāng)用戶是root時(shí)直接返回成功不用輸密碼
當(dāng)我們把第二行的sufficient改成required再切換用戶就要輸密碼了
-
普通用戶su - root用戶也不用密碼
我們?cè)趧偛诺?etc/pam.d/su第二行前面加上一行
這個(gè)時(shí)候我們?cè)趖est下直接su到root叉庐,不用輸入密碼舒帮。
-
不用密碼即可登錄
在/etc/pam.d/system-auth中加一行
可以看到在輸入用戶名后直接回車就能進(jìn)入系統(tǒng)。
-
有密碼也不能登錄
注:該方法會(huì)導(dǎo)致你退出后再也登陸不了系統(tǒng),請(qǐng)先做好快照再實(shí)驗(yàn)玩郊。
把下圖中原來(lái)的sufficient改成required
這個(gè)時(shí)候我們發(fā)現(xiàn)系統(tǒng)進(jìn)入不了了肢执。
今天的小實(shí)驗(yàn)做完了,通過(guò)這4個(gè)實(shí)驗(yàn)我們初步知道PAM的作用和怎么用了译红,還有很多其他知識(shí)點(diǎn)等待我們?cè)趯?shí)踐中取挖掘预茄,希望大家在遇到類似問(wèn)題時(shí)有個(gè)大概的判斷和方向去排查。