您好,登錄后才能下訂單哦!
○ 本文導航
關于PAM
PAM身份驗證配置文件
PAM配置文件語法格式
PAM模塊接口
PAM控制標志
PAM配置方法
PAM身份驗證安全配置實例
- 強制使用強密碼(用戶密碼安全配置)
- 用戶SSH登錄失敗嘗試次數超出限制后鎖定賬戶(帳戶鎖定/解鎖和時間設置)
- 允許普通用戶使用sudo而不是su(限制普通用戶登錄到root用戶)
- 禁止直接使用root用戶通過SSH登錄
pwgen復雜密碼隨機生成工具
關于PAM
Linux-PAM (Pluggable Authentication Modules for Linux)可插拔認證模塊。Linux-PAM是一套適用于Linux的身份驗證共享庫系統,它為系統中的應用程序或服務提供動態身份驗證模塊支持。在Linux中,PAM是可動態配置的,本地系統管理員可以自由選擇應用程序如何對用戶進行身份驗證。PAM應用在許多程序與服務上,比如登錄程序(login、su)的PAM身份驗證(口令認證、限制登錄),passwd強制密碼,用戶進程實時管理,向用戶分配系統資源等。
PAM的主要特征是認證的性質是可動態配置的。PAM的核心部分是庫(libpam)和PAM模塊的集合,它們是位于文件夾/lib/security/中的動態鏈接庫(.so)文件,以及位于/etc/pam.d/目錄中(或者是/etc/pam.conf配置文件)的各個PAM模塊配置文件。/etc/pam.d/目錄中定義了各種程序和服務的PAM配置文件,其中system-auth文件是PAM模塊的重要配置文件,它主要負責用戶登錄系統的身份認證工作,不僅如此,其他的應用程序或服務可以通過include接口來調用它(該文件是system-auth-ac的軟鏈接)。此外password-auth配置文件也是與身份驗證相關的重要配置文件,比如用戶的遠程登錄驗證(SSH登錄)就通過它調用。而在Ubuntu、SuSE Linux等發行版中,PAM主要配置文件是common-auth、common-account、common-password、common-session這四個文件,所有的應用程序和服務的主要PAM配置都可以通過它們來調用。
使用如下命令判斷程序是否使用了PAM:
root@HMing ~ # ldd /usr/bin/passwd | grep libpam libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fb74f748000) libpam.so.0 => /lib64/libpam.so.0 (0x00007fb74eb45000) |
如看到有類似的輸出,說明該程序使用了PAM,沒有輸出,則沒有使用。
PAM身份驗證配置文件
/etc/pam.d/目錄包含應用程序的PAM配置文件。例如,login程序將其程序/服務名稱定義為login,與之對應的PAM配置文件為/etc/pam.d/login。
PAM配置文件語法格式
每個PAM配置文件都包含一組指令,用于定義模塊以及控制標志和參數。每條指令都有一個簡單的語法,用于標識模塊的目的(接口)和模塊的配置設置,語法格式如下:
module_interface control_flag module_name module_arguments |
如在/etc/pam.d/password-auth-ac配置文件中(CentOS),其中一行PAM模塊接口定義如下
PAM模塊接口(模塊管理組)
PAM為認證任務提供四種類型可用的模塊接口,它們分別提供不同的認證服務:
√ auth | - 認證模塊接口,如驗證用戶身份、檢查密碼是否可以通過,并設置用戶憑據 |
√ account | - 賬戶模塊接口,檢查指定賬戶是否滿足當前驗證條件,如用戶是否有權訪問所請求的服務,檢查賬戶是否到期 |
√ password | - 密碼模塊接口,用于更改用戶密碼,以及強制使用強密碼配置 |
√ session | - 會話模塊接口,用于管理和配置用戶會話。會話在用戶成功認證之后啟動生效 |
單個PAM庫模塊可以提供給任何或所有模塊接口使用。例如,pam_unix.so提供給四個模塊接口使用。
PAM控制標志
所有的PAM模塊被調用時都會返回成功或者失敗的結果,每個PAM模塊中由多個對應的控制標志決定結果是否通過或失敗。每一個控制標志對應一個處理結果,PAM庫將這些通過/失敗的結果整合為一個整體的通過/失敗結果,然后將結果返回給應用程序。模塊可以按特定的順序堆疊。控制標志是實現用戶在對某一個特定的應用程序或服務身份驗證的具體實現細節。該控制標志是PAM配置文件中的第二個字段,PAM控制標志如下:
> required | - 模塊結果必須成功才能繼續認證,如果在此處測試失敗,則繼續測試引用在該模塊接口的下一個模塊,直到所有的模塊測試完成,才將結果通知給用戶。 |
> requisite | - 模塊結果必須成功才能繼續認證,如果在此處測試失敗,則會立即將失敗結果通知給用戶。 |
> sufficient | - 模塊結果如果測試失敗,將被忽略。如果sufficient模塊測試成功,并且之前的required模塊沒有發生故障,PAM會向應用程序返回通過的結果,不會再調用堆棧中其他模塊。 |
> optional | - 該模塊返回的通過/失敗結果被忽略。當沒有其他模塊被引用時,標記為optional模塊并且成功驗證時該模塊才是必須的。該模塊被調用來執行一些操作,并不影響模塊堆棧的結果。 |
> include | - 與其他控制標志不同,include與模塊結果的處理方式無關。該標志用于直接引用其他PAM模塊的配置參數 |
PAM配置方法
所有的PAM配置方法都在man手冊中有說明,比如要查找某個程序支持PAM模塊的配置,可以使用man 加模塊名(去掉.so)查找說明,如# man pam_unix。(模塊名可以在目錄/lib/security/或/lib64/security/中找到。)
PAM身份驗證安全配置實例
一、強制使用強密碼(用戶密碼安全配置)
PAM配置文件:/etc/pam.d/system-auth-ac
模塊名稱:pam_cracklib(僅適用于password模塊接口)
模塊參數:
minlen=12 密碼字符長度不少于12位(默認為9) lcredit=-1 至少包含1個小寫字母 ucredit=-1 至少包含1個大寫字母 dcredit=-1 至少包含1個數字 ocredit=-1 至少包含1個特殊字符 retry=3 配置密碼時,提示3次用戶密碼錯誤輸入 difok=6 配置密碼時,新密碼中至少6個字符與舊密碼不同(默認為5) |
其他常用參數:
reject_username 新密碼中不能包含與用戶名稱相同的字段 maxrepeat=N 拒絕包含超過N個連續字符的密碼,默認值為0表示此檢查已禁用 maxsequence=N 拒絕包含大于N的單調字符序列的密碼,例如’1234’或’fedcb’,默認情況下即使沒有這個參數配置,一般大多數這樣的密碼都不會通過,除非序列只是密碼的一小部分 maxcla***epeat=N 拒絕包含相同類別的N個以上連續字符的密碼。默認值為0表示此檢查已禁用。 use_authtok 強制使用先前的密碼,不提示用戶輸入新密碼(不允許用戶修改密碼) |
模塊名稱:pam_unix (適用于account,auth, password和session模塊接口)
模塊參數:
remember=N 保存每個用戶使用過的N個密碼,強制密碼不能跟歷史密碼重復 |
其他常見參數:
sha512 當用戶下一次更改密碼時,使用SHA256算法進行加密 md5 當用戶更改密碼時,使用MD5算法對其進行加密。 try_first_pass 在提示用戶輸入密碼之前,模塊首先嘗試先前的密碼,以測試是否滿足該模塊的需求。 use_first_pass 該模塊強制使用先前的密碼(不允許用戶修改密碼),如果密碼為空或者密碼不對,用戶將被拒絕訪問 shadow 用戶保護密碼 nullok 默認不允許空密碼訪問服務 use_authtok 強制使用先前的密碼,不提示用戶輸入新密碼(不允許用戶修改密碼) |
例 修改配置/etc/pam.d/system-auth-ac文件,在password模塊接口行修改或添加配置參數如下:
password requisite pam_cracklib.so try_first_pass retry=3 type= reject_username minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 difok=6 |
修改后的/etc/pam.d/system-auth-ac配置文件如下圖所示
需要注意的是,我在這里展示的是在RHEL/CentOS下的配置,passwd程序的PAM配置文件涉及主配置文件/etc/pam.d/passwd和/etc/pam.d/system-auth-ac(也可以是/etc/pam.d/password-auth-ac),其中/etc/pam.d/passwd配置文件默認只包含了/etc/pam.d/system-auth-ac配置文件,因此對于以上PAM身份驗證密碼模塊配置,只修改/配置該文件即可。或者在Ubuntu中,配置文件包括:/etc/pam.d/common-password、/etc/pam.d/common-account、/etc/pam.d/common-auth、/etc/pam.d/common-session。
測試PAM配置:
登錄(su)普通用戶使用passwd程序更新密碼,如果輸入的密碼不符合要求,將不能修改
root@HMing ~ # su - hm #登錄到hm用戶 hm@HMing ~ $ passwd #修改密碼 Changing password for user hm. Changing password for hm. (current) UNIX password: #提示輸入舊密碼 New password: #提示輸入新密碼,如果不滿足要求,將會提示相關錯誤信息 Password unchanged New password: BAD PASSWORD: is too simple New password: #當輸入的密碼滿足要求時,才提示再次輸入 Retype new password: passwd: all authentication tokens updated successfully.
二、用戶SSH登錄失敗嘗試次數超出限制后鎖定賬戶(帳戶鎖定/解鎖和時間設置)
為了進一步提高安全性,可以指定超過失敗登錄嘗試次數后鎖定用戶。用戶賬戶可以被解鎖(可以由root用戶主動解鎖),或者在設定的時間后自動解鎖。如在三次失敗的登錄嘗試后鎖定用戶十分鐘。需要在/etc/pam.d/password-auth-ac(或者在/etc/pam.d/sshd)文件添加以下參數:
auth required pam_tally2.so deny=3 unlock_time=600 onerr=succeed file=/var/log/tallylog |
在Ubuntu、SuSE Linux中,需要修改/etc/pam.d/common-auth配置文件
另外,使用PAM還可以限制在console控制臺上登錄,需要修改/etc/pam.d/system-auth配置文件(或者/etc/pam.d/login),添加如上auth配置字段即可。
一旦用戶失敗登錄嘗試次數達到3次,該帳戶立刻被鎖定,除非root用戶解鎖。root用戶下使用如下命令解鎖用戶:
# pam_tally2 -u username -r --reset
查看用戶登錄失敗信息:
# pam_tally2 -u username
如果要在3次失敗登錄嘗試后永久鎖定用戶,那么需要刪除unlock_time字段,除非root用戶解鎖該賬戶,否則將永久鎖定。
pam_tally/pam_tally2模塊參數:
全局選項 onerr=[succeed|fail] file=/path/to/log 失敗登錄日志文件,默認為/var/log/tallylog audit 如果登錄的用戶沒有找到,則將用戶名信息記錄到系統日志中 silent 不打印相關的信息 no_log_info 不通過syslog記錄日志信息 AUTH選項 deny=n 失敗登錄次數超過n次后拒絕訪問 lock_time=n 失敗登錄后鎖定的時間(秒數) unlock_time=n 超出失敗登錄次數限制后,解鎖的時間 no_lock_time 不在日志文件/var/log/faillog 中記錄.fail_locktime字段 magic_root root用戶(uid=0)調用該模塊時,計數器不會遞增 even_deny_root root用戶失敗登錄次數超過deny=n次后拒絕訪問 root_unlock_time=n 與even_deny_root相對應的選項,如果配置該選項,則root用戶在登錄失敗次數超出限制后被鎖定指定時間 |
三、允許普通用戶使用sudo而不是su(限制普通用戶登錄到root用戶)
Linux系統上默認存在一個wheel組,用于限制普通用戶通過su登錄到root用戶,只有屬于wheel組的用戶成員才能使用su。但是在默認情況下,系統并沒有啟用這個功能,我們可以通過PAM啟用它,或者修改為指定的組/用戶使用su,當然指定為什么組可以按照要求而定。該配置通過pam_wheel模塊指定。
首先啟用whell組,使得只屬于wheel組的用戶可以使用su命令
需要在/etc/pam.d/su配置文件添加以下配置:
auth required pam_wheel.so use_uid |
需要注意應該將這一行參數添加在/etc/pam.d/su文件的首部,否則PAM模塊可能會跳過該項檢查。配置完之后,我們就可以將需要用su權限的用戶添加到wheel組中,如下:
# usermod -a -G wheel username
其次,如果你不想使用wheel組,而是使用其他的組代替,比如指定組名為myadmingroup的組擁有su的權限,需要這么做:
auth required pam_wheel.so use_uid group=myadmingroup |
最后配置指定用戶擁有sudo權限,要知道我們的目的是盡量少使用root身份的權限,sudo可以讓用戶僅僅在需要調用root用戶權限的情況下調用。我們可以指定特定的組/用戶使用sudo(不需要root密碼)調用root權限。visudo打開配置文件:
hmm ALL=(ALL) NOPASSWD: ALL #允許hmm用戶通過sudo執行任何命令(不需要輸入密碼) %wheel ALL=(ALL) ALL #允許wheel組成員使用sudo執行任何命令(需要輸入密碼) |
四、禁止直接使用root用戶通過SSH登錄
在/etc/pam.d/password-auth-ac或者/etc/pam.d/sshd配置文件中添加以下配置(該配置禁止SSH的口令認證,但仍然可以使用SSH密鑰登錄)
auth required pam_securetty.so |
此外還可以配置/etc/securetty 文件禁止root用戶通過所有tty終端登錄系統
# cp /etc/securetty /etc/securetty.saved # echo "" >/etc/securetty
五、pwgen復雜密碼隨機生成工具
pwgen是一個在Linux隨機生成密碼的工具,在CnetOS6下安裝:
# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm # yum install pwgen
使用pwgen命令隨機生成字符長度為12的密碼
# pwgen -s 12 -c -n -y |
-n 至少包含一個數字
-c 至少包含一個大寫字母
-y 至少包含一個特殊字符
-s 完全隨機生成密碼
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。