摘自:https://blog.csdn.net/jhcsdb/article/details/15780433
PAM--- Pluggable Authentication Module
Linux下可擴展的鑒權模塊,用戶進程服務某服務進程,服務進程先把請求送到PAM模塊進行鑒權,PAM根據服務名從/etc/pam.d/目錄選擇一個服務文件,根據服務文件的配置內容進行鑒權。
通過ldd命令查看服務名,確定服務是否使用pam功能(pam服務對應libpam*.so庫文件):
ldd /usr/sbin/sshd
linux-vdso.so.1 => (0x00007fff1b8ef000)
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f579f2d8000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007f579f0cb000)
/lib/security目錄存放pam模塊文件,支持哪些鑒權功能:
[liuyan@localhost ~]$ ls /lib64/security/
pam_access.so pam_env.so pam_group.so pam_localuser.so pam_permit.so pam_shells.so pam_umask.so pam_winbind.so
pam_cap.so pam_exec.so pam_issue.so pam_loginuid.so pam_postgresok.so pam_smbpass.so pam_unix_acct.so pam_xauth.so
pam_chroot.so pam_faildelay.so pam_keyinit.so pam_mail.so pam_pwhistory.so pam_sss.so pam_unix_auth.so
pam_ck_connector.so pam_faillock.so pam_krb5 pam_mkhomedir.so pam_rhosts.so pam_stress.so pam_unix_passwd.so
pam_console.so pam_filter pam_krb5afs.so pam_motd.so pam_rootok.so pam_succeed_if.so pam_unix_session.so
pam_cracklib.so pam_filter.so pam_krb5.so pam_namespace.so pam_securetty.so pam_tally2.so pam_unix.so
pam_debug.so pam_fprintd.so pam_lastlog.so pam_nologin.so pam_selinux_permit.so pam_time.so pam_userdb.so
pam_deny.so pam_ftp.so pam_limits.so pam_oddjob_mkhomedir.so pam_selinux.so pam_timestamp.so pam_warn.so
pam_echo.so pam_gnome_keyring.so pam_listfile.so pam_passwdqc.so pam_sepermit.so pam_tty_audit.so pam_wheel.so
pam_access.so 控制訪問者地址與賬號名稱
pam_listfile.so 控制訪問者的賬號名稱或登錄位置
pam_limits.so 控制為用戶分配的資源
pam_rootok.so 對管理員(uid=0)無條件允許通過
pam_userdb.so 設定獨立用戶賬號數據庫認證
/etc/pam.d目錄存放使用pam的服務名,哪些進程會使用pam模塊:
[liuyan@localhost ~]$ ls /etc/pam.d/
atd cups gdm-password ksu poweroff smartcard-auth sudo-i system-config-network
authconfig cvs gnome-screensaver login ppp smartcard-auth-ac su-l system-config-network-cmd
authconfig-gtk eject halt newrole reboot smtp system-auth system-config-users
authconfig-tui fingerprint-auth kcheckpass other remote smtp.postfix system-auth-ac xdm
chfn fingerprint-auth-ac kdm passwd run_init sshd system-config-authentication xserver
chsh gdm kdm-np password-auth runuser ssh-keycat system-config-date
config-util gdm-autologin kppp password-auth-ac runuser-l su system-config-kdump
crond gdm-fingerprint kscreensaver polkit-1 setup sudo system-config-keyboard
login -------/etc/pam.d/login
ipop3d -------/etc/pam.d/pop
vsftpd -------/etc/pam.d/ftp(編譯安裝)或/etc/pam.d/vsftpd(rpm安裝)
sshd -------/etc/pam.d/sshd
su -------/etc/pam.d/su
/etc/security/目錄存放pam認證、鑒權時使用的配置文件,如limits.conf
[liuyan@localhost ~]$ ls /etc/security/
access.conf console.handlers group.conf namespace.conf opasswd sepermit.conf
chroot.conf console.perms limits.conf namespace.d pam_env.conf time.conf
console.apps console.perms.d limits.d namespace.init pam_winbind.conf
一個服務進程AA使用pam鑒權功能需要做兩步:
第一步:修改/etc/pam.d/AA 文件,指定AA服務需要加載一個libpam_XXXX.so動態庫。
第二步:修改/etc/security/XXXX.conf,指定XXXX操作需要滿足哪些鑒權規則。
通過配置文件增改刪進程的鑒權規則,下面介紹兩個常用的pam模塊
- pam_access.so模塊的使用―――控制訪問sshd服務的主機和用戶
1.修改需使用這個模塊的服務文件/etc/pam.d/sshd
添加 account required pam_access.so
2.修改模塊的配置文件 /etc/security/access.conf
- : redhat : ALL EXCEPT 192.168.0. (ip為192.168.0.X的redhat機器無權訪問)
結果:ip為192.168.0.X的redhat機器執行ssh時,無法登錄該機器。
- pam_limits.so 模式使用
1.模塊應用到sshd服務,修改服務文件
#vi /etc/pam.d/sshd 添加:
session required pam_limits.so
session控制用戶進程的登錄次數,文件大小,通過控制用戶的會話進程來限制用戶使用的資源。
2.編緝pam_limits.so的配置文件/etc/security/limits.conf
* hard nofile 65536
* soft nofile 65535
任意用戶進程的句柄上限都是65535。