PAM可插拔身份額認證模塊
簡介:
Linux-PAM(Pluggable Authentication Modules for Linux.基於Linux的插入式驗證模塊)是一組共享庫,使用這些模塊,系統管理者可以自由選擇應用程序使用的驗證機制。也就是說,勿需重新編譯應用程序就可以切換應用程序使用的驗證機制。甚至,不必觸動應用程序就可以完全升級系統使用的驗證機制。
主要作用於管理工具和相關命令
配置文件
PAM包含了一組動態可加載庫模塊,這些模塊控制單個應用程序如何驗證用戶
通過修改PAM配置文件,爲不同管理使用工具自定義安全要求。
配置文件都在/etc/pam.d中
[root@xiaoagiao pam.d]# ls
chfn fingerprint-auth-ac password-auth-ac runuser smtp.postfix su-l vmtoolsd
chsh login polkit-1 runuser-l sshd system-auth
config-util other postlogin smartcard-auth su system-auth-ac
crond passwd postlogin-ac smartcard-auth-ac sudo systemd-user
fingerprint-auth password-auth remote smtp sudo-i vlock
每個配置文件都有一些模塊,大多數模塊在/usr/lib64/security下
在/usr/share/doc/pam-1.1.8/txts/以及html子目錄下是每個模塊的詳細描述
- 以login文件爲例
[root@xiaoagiao pam.d]# cat login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth substack system-auth
auth include postlogin
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
#服務類型 控制標記 模塊名 參數
- /usr/lib64/security/
[root@xiaoagiao security]# ls
pam_access.so pam_faildelay.so pam_listfile.so pam_pwhistory.so pam_succeed_if.so pam_unix_session.so
pam_cap.so pam_faillock.so pam_localuser.so pam_pwquality.so pam_systemd.so pam_unix.so
pam_chroot.so pam_filter pam_loginuid.so pam_rhosts.so pam_tally2.so pam_userdb.so
pam_console.so pam_filter.so pam_mail.so pam_rootok.so pam_time.so pam_warn.so
pam_cracklib.so pam_ftp.so pam_mkhomedir.so pam_securetty.so pam_timestamp.so pam_wheel.so
pam_debug.so pam_group.so pam_motd.so pam_selinux_permit.so pam_tty_audit.so pam_xauth.so
pam_deny.so pam_issue.so pam_namespace.so pam_selinux.so pam_umask.so
pam_echo.so pam_keyinit.so pam_nologin.so pam_sepermit.so pam_unix_acct.so
pam_env.so pam_lastlog.so pam_permit.so pam_shells.so pam_unix_auth.so
pam_exec.so pam_limits.so pam_postgresok.so pam_stress.so pam_unix_passwd.so
配置文件內容解析
服務類型
- auth:身份驗證管理(是否提供了有效的用戶名和密碼)
- account:賬戶管理,依據賬戶策略允許或拒絕訪問。例如,可依據時間,口令有效 期限或者受限用戶的列表來拒絕訪問。
- psaawd:密碼管理管理口令變更策略。
- session:會話管理,將設置應用於程序會話
控制標記
require | 如果模塊運行成功,繼續執行下一個類型的規則,如果失敗,執行文件中下一個規則 |
---|---|
requisite | 如果模塊失敗,pam不會檢查任何其他規則並停止執行 |
sufficient | 如果模塊正常運行,PAM就不再繼續執行這種類型的其他規則且結果會成功。如果檢查失敗,PAM會繼續檢查剩下的規則 |
optional | PAM忽略該規則的成功或失敗 |
include | 包括所註明的配置文件中相同type的所有指令;例如指令是password include system-auth,它將包括PAM system-auth文件中的所有口令指令 |
1.基於pam_securetty.so模塊限制root用戶登錄虛擬終端
/etc/securetty文件下包含了11個虛擬控制檯訪問指令,指定了允許root用戶登錄的tty設備,由/bin/login讀取
[root@xiaoagiao pam.d]# cat /etc/securetty
console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
ttyS0
ttysclp0
sclp_line0
3270/tty1
hvc0
hvc1
hvc2
hvc3
hvc4
hvc5
hvc6
hvc7
hvsi0
hvsi1
hvsi2
- 本文件只對root用戶做出限制,若全部註釋,root用戶不可登錄,普通用戶不受影響,可以在普通用戶下切換到root下。
- 若刪除該文件,則root,普通用戶都可登錄所有終端
2. 基於pam_listefilte.os模塊指定用戶可以登錄
實現只能root用戶登錄:
- 在/etc/pam.d/login文件中添加 :
account required pam_nologin.so
- 創建文件 /etc/noligin:這個文件下的內容將在普通用戶登錄失敗後顯示。
結果:只有root用戶可以的登錄終端。
實現指定用戶可以登錄終端:
- 在/etc/pam.d/login文件中添加 :
account required pam_nologin.so
- 創建文件 /eyc/noligin:這個文件下寫入 pam_listfile.so模塊
auth required pam_listfile.so item=user sense=deny file=/etc/myuser/user onerr=secceed
- 其中file文件指定了可以登錄的用戶名單
- 在/etc/myuser/user下寫入可以登錄的用戶名單
結果:只有名單中的用戶可以登錄終端,其餘用戶拒絕
注:也可以通過pam_wheel.so模塊實現對用戶訪問限制(在上一篇文章)
3. 基於pam_access.so模塊實現限制用戶登錄,限制用戶登錄位置
一般的,/etc/securetty文件控制的是root的登錄終端。比此文件更強大的是/etc/security/access.conf 文件,他控制所有用戶的訪問以及訪問位置
- 要想使用access.config,需要在/etc/pam.d/login中添加pam_access.so模塊.
account required pam_access.so
access.conf文件
………………
# User "foo" and members of netgroup "nis_group" should be
# allowed to get access from all sources.
# This will only work if netgroup service is available.
#+:@nis_group foo:ALL
#
# User "john" should get access from ipv4 net/mask
#+:john:127.0.0.0/24
#
# User "john" should get access from ipv4 as ipv6 net/mask
#+:john:::ffff:127.0.0.0/127
#
# User "john" should get access from ipv6 host address
#+:john:2001:4ca0:0:101::1
#
# User "john" should get access from ipv6 host address (same as above)
#+:john:2001:4ca0:0:101:0:0:0:1
#
# User "john" should get access from ipv6 net/mask
#+:john:2001:4ca0:0:101::/64
#
# All other users should be denied to get access from all sources.
#-:ALL:ALL
文件內容
permission : users : origins
permission | +或-,表示允許或訪問 |
---|---|
users | 用戶或組,all代表所有用戶 |
origins | 登錄地點,(local:本地,all:所有地點,console:控制檯) |
實現過程
- /etc/pam.d/login中加入
account required pam_access.so
- /etc/pam.d/sshd中加入同樣模塊
account required pam_access.so
- 修改/etc/security/asscss.conf文件
添加
+:root:ALL #root可從任意位置進入
+:user1,user2:192.168.126 #允許user1,user2從192.168.126網段訪問
-:ALL:ALL #其餘全部拒絕
結果:
- root可從任何虛擬終端,僞終端登錄系統
- user1,user2只能存在於192.168.42.1上的ssh客戶端登錄系統。
- user3不能登錄