-----------------------------------------------------------------
su 權限設置
[root@localhost ~]# vim /etc/pam.d/su //pam認證
開啟:auth required pam_wheel.so use_uid //去掉#
[root@localhost ~]# vim /etc/group
wheel:x:10:han //han賬戶加入wheel,可以使用su
[han@localhost ~]$ su - lisi //han可以切換
Password:
[lisi@localhost ~]$ su - han //lisi不可以切換
Password:
su: incorrect password
-----------------------------------------------------------------
Pam模塊
Linux系統中的Pam模塊為可熱插拔的認證模塊(*.so)
1、配置文件
# ls /etc/pam.d/
atd other subscription-manager
……
newrole su
其中system-auth和password-auth配置文件是RHEL6實現用戶名驗證機制配置文件,大多數服務的配置將都會調用它們。
2、模塊,如果是32為系統則路徑是/lib/security/,如果是64為系統則在/lib64/security/目錄下
# ls /lib64/security/
pam_access.so pam_gnome_keyring.so pam_namespace.so ……
pam_ftp.so pam_mysql.so pam_stress.so
3、驗證階段
分四個驗證管理階段:不同的階段完成整個用戶登錄到登錄成功再到退出登錄之前整個過程的管理,同一個階段可以有多個模塊來共同 完
成管理,但是這些模塊都是依次從上往下的順序進行,四個階段必須是從 auth-->account-->password--->session的順序進行。每個階段代表
的意思如下:
(1)auth 驗證授權階段,驗證用戶名是否存在,對應的密碼是否正確
(2)account 驗證帳號階段,驗證用戶是否有效,是否被禁止登錄或者是否被允許登錄,帳號是否過期
(3)password 密碼階段,用戶約束密碼修改的時候策略以及和密碼相關的任何操作
(4)session 會話階段,用來約束用戶成功登錄系統之后的一切操作。
控制標記:
(1)required 必要條件,該模塊必須通過驗證,如果驗證失敗不會馬上返回失敗的結果,而是等同一個階段后續的模塊判斷完成之后才返
回失敗的結果。
(2)requisite 必要條件,該模塊必須通過驗證,如果驗證失敗馬上返回失敗的結果,不會繼續驗證同一個階段后續的模塊。
(3)sufficient 充要條件,只要該條件成立,而且該條件前面的必要條件模塊也成立了,那么馬上返回成功結果,無需再繼續驗證同一個
階段后續的模塊,如果該條件的模塊驗證失敗,它就會變成可選條件,不影響整個階段的驗證,會繼續完成后續的判斷。
(4)optional 可選條件,不影響判斷結果的條件
(5)include 包含指定的配置文件(相當於把對應的配置文件的同一個階段的所有選項加載該行)
4、示例
例子1、禁止所有普通用戶登錄本地系統
(1)首先判斷一下登錄系統的過程涉及到的配置文件
/bin/login ---> /etc/pam.d/login
(2)搜索需要用到的模塊
# find /usr/share/man -iname "pam_*" | grep login
/usr/share/man/man8/pam_loginuid.8.gz
/usr/share/man/man8/pam_nologin.8.gz
此時我們可以看到禁用應該是使用pam_nologin模塊,所以通過man文件查看此模塊的用法
# man pma_nologin
(3)查看到man文件是需要在login文件中添加一行pam_nologin.so並且需要自己創建nologin文件
# vim /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
然后再創建nologin
# touch /etc/nologin
(4)認證,測試發現除了root可以登錄之外,其他普通賬戶無法登錄系統。
也可以:禁止root登錄
#vim /etc/ssh/sshd_config 添加 UsePAM yes
#vim /etc/pam.d/sshd 行首添加:
session required pam_listfile.so item=user sense=deny file=/etc/ssh/denyuser onerr=succeed
#echo "root" >> /etc/ssh/denyuser
列在/etc/ssh/denyuser中的用戶, 都會被拒絕使用密碼登錄!!
例子2、限制普通賬戶只能在上班時間通過ssh登錄系統。
同樣的利用上面的步驟方法進行配置
(1)涉及到的配置文件
/etc/pam.d/sshd
(2)涉及到的模塊
[root@vpn ~]# find /usr/share/man -iname "*pam_*" |grep time
/usr/share/man/man8/pam_timestamp_check.8.gz
/usr/share/man/man8/pam_time.8.gz
/usr/share/man/man8/pam_timestamp.8.gz
可以通過查看man文檔,是pam_time是符合我們的需求,並且得知pam_time的使用方法
# man pam_time
............(省略其他代碼)
通man知道需要配置/etc/security/time.conf和在/etc/pam.d/ssh中添加account required pam_time.so
(3)配置/etc/pam.d/sshd
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account required pam_time.so
account include password-auth
..............
(4)配置/etc/security/time.conf
# vim /etc/security/time.conf
在里面添加一行
sshd;*;abc;Wk0800-1800 & !Wd0000-2400
此代碼表示普通賬戶abc可以在工作時間早上8點到下午18點通過ssh登錄系統的任何一個安全終端。
例子3、通過pam_tally2進行配置凡是通過ssh登錄系統密碼錯誤3次則鎖定5分鍾
(1)配置/etc/pam.d/sshd
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth required pam_tally2.so deny=3 even_deny_root unlock_time=300 (注意顏色變化)
auth include password-auth
account required pam_nologin.so
(2)測試
通過ssh登錄時3次錯誤密碼則此賬戶被鎖定,5分鍾解鎖。查看賬戶登錄鎖定情況
# pam_tally2
Login Failures Latest failure From
abc 3 10/19/13 22:50:31 192.168.232.1
可以手動進行解鎖。
# pam_tally2 -u abc -r
Login Failures Latest failure From
abc 3 10/19/13 22:50:31 192.168.232.1
禁止用戶設置密碼於前三次重復:
# /etc/pam.d/system-auth
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3
用戶登錄3次以上就在20秒以內拒絕這個用戶登錄
# vim /etc/pam.d/login
添加:auth required pam_tally2.so deny=3 unlock_time=20
修改/etc/pam.d/system-auth文件
找到 password requisite pam_cracklib.so這么一行替換成如下:
password requisite pam_cracklib.so retry=5 difok=3 minlen=10 ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict
參數含義:
嘗試次數:5 最少不同字符:3 最小密碼長度:10 最少大寫字母:1 最少小寫字母:3 最少數字:3 密碼字典:/usr/share/cracklib/pw_dict
-------------------------------------------------------------
可設計一個基於PAM的vsftpd虛擬賬戶實驗
--------------------------------------------------------------