Linux基础——Pam模块

一、Pam模块架构

1、Pam认证逻辑

 2、Pam系统自带模块或安装模块路径/usr/lib64/security/

复制代码
# /usr/lib64/security模块作用
pam_access.so 控制访问者地址与账号名称 pam_listfile.so 控制访问者的账号名称或登录位置 pam_limits.so 控制为用户分配的资源 pam_rootok.so 对管理员(uid
=0)无条件允许通过 pam_userdb.so 设定独立用户账号数据库认证

Linux PAM 内置模块  
模块 类型 简介  
pam_access.so auth,account,password,session 基于来源(主机/网络/终端/$DISPLAY/服务名)的访问控制  
pam_debug.so auth,account,password,session 调试PAM栈  
pam_deny.so auth,account,password,session 无条件的拒绝访问  
pam_echo.so auth,account,password,session 显示文本消息  
pam_env.so auth,session 设置与撤销环境变量(也包括PAM变量)  
pam_exec.so auth,account,password,session 调用外部命令  
pam_faildelay.so auth 设置认证失败时的阻塞延迟  
pam_faillock.so auth,account 锁定连续认证失败的账户  
pam_filter.so auth,account,password,session 在用户与应用程序之间建立输入输出(STDIN/STDOUT)过滤器  
pam_ftp.so auth 可插拔的匿名FTP访问模式(不安全)  
pam_group.so auth 将用户额外添加到特定组中  
pam_issue.so auth 更改用户的提示文件(issue)  
pam_keyinit.so session 在默认内核会话密钥环之外额外创建新的内核会话密钥环  
pam_lastlog.so auth,account,session 显示账户的上次登录时间、锁定长期不登录的帐户  
pam_limits.so session 设置会话的资源限制  
pam_listfile.so auth,account,password,session 基于各种属性(tty|user|rhost|ruser|group|shell)执行访问控制  
pam_localuser.so auth,account,password,session 仅允许本地用户(/etc/passwd)访问  
pam_loginuid.so session 设置进程的 loginuid 属性(主要用于审计目的)  
pam_mail.so auth,session 提示用户有新邮件  
pam_mkhomedir.so session 在开始会话前创建用户的家目录  
pam_motd.so session 显示"今日消息"(motd)  
pam_namespace.so session 为会话设置私有名字空间  
pam_nologin.so auth,account 禁止非 root 账户登录  
pam_permit.so auth,account,password,session 无条件的允许访问(小心使用)  
pam_pwhistory.so password 防止重复使用旧密码  
pam_rhosts.so auth 使用 rlogin/rsh 网络访问认证(/etc/hosts.equiv 与 ~/.rhosts)  
pam_rootok.so auth,account,password 仅在 UID=0 时验证成功  
pam_securetty.so auth 仅允许 root 从指定的"安全"设备登录  
pam_selinux.so session 设置默认的 SELinux 安全上下文  
pam_sepermit.so auth,account 根据 SELinux 的开关状态决定是否通过认证  
pam_setquota.so session 在开始会话时设置或修改磁盘限额  
pam_shells.so auth,account 检查登录shell的有效性(是否列于 /etc/shells 之中)  
pam_stress.so auth,account,password,session 模拟失败表现  
pam_succeed_if.so auth,account,password,session 测试账号自身的属性以实现条件分支逻辑  
pam_time.so account 根据时间段决定是否允许访问  
pam_timestamp.so auth,session 缓存成功的认证以避免频繁的反复认证  
pam_tty_audit.so session 开启或关闭TTY审计(内核默认不审计TTY上的输入)  
pam_umask.so session 设置本次会话中的 umask 值  
pam_unix.so auth,account,password,session 传统UNIX密码验证(/etc/passwd 与 /etc/shadow)  
pam_userdb.so auth,account 使用 Berkeley DB 数据库验证用户名/密码  
pam_usertype.so auth,account,password,session 根据 /etc/login.defs 中的设置检查已认证用户的类型(系统账户/普通账户)  
pam_warn.so auth,account,password,session 向系统日志中记录详细的PAM信息(服务名,终端,用户,远程用户,远程主机)  
pam_wheel.so auth,account 仅允许 wheel 组成员获得 root 权限  
pam_xauth.so session 在用户之间转发 xauth 密钥(cookies)  
常见第三方模块
模块 RHEL(rpm) Debian(deb) 关键词
pam_fprintd.so fprintd-pam libpam-fprintd 指纹
pam_gdm.so gdm gdm3 GDM(GNOME显示管理器)
pam_gnome_keyring.so gnome-keyring-pam libpam-gnome-keyring gnome-keyring(GNOME密钥管理器)
pam_cap.so libcap libpam-cap Linux Capabilities
pam_pwquality.so libpwquality libpam-pwquality 密码复杂度
pam_user_map.so mariadb-pam mariadb-server MariaDB
pam_oddjob_mkhomedir.so oddjob-mkhomedir oddjob-mkhomedir 创建家目录
pam_cifscreds.so pam_cifscreds cifs-utils NTLM(NT LAN Manager)
pam_oath.so pam_oath libpam-oath OATH(一次性密码)
pam_ssh_agent_auth.so pam_ssh_agent_auth libpam-ssh-agent-auth ssh-agent
pam_winbind.so samba-winbind-modules libpam-winbind Winbind
pam_sss.so sssd-client libpam-sss System Security Services Daemon
pam_systemd.so systemd-pam libpam-systemd systemd-logind
 
复制代码

3、Pam库文件的映射文件libpam.so.0

# ln -sf <source实际文件存放位置> <dest映射文件存放文件名>
ln
-sf /usr/lib64/libpam.so.0.85.1 /usr/lib64/libpam.so.0

4、Pam配置

system-auth:
password-auth:
sshd:
su:
su-l:
sudo:
sudo-i:

 

 

 

 二、pam模块/etc/pam.d/*system-auth

1、第一列:管理组字段

  • auth:鉴别接口模块类型用于检查用户和密码,并分配权限;
  • account:账户类接口,主要负责账户合法性检查,确认账号是否过期,是否有权限登录系统;
  • session:会话类接口,实现从用户登录成功到退出的会话控制;
  • password:口令类接口,控制用户更改密码的全过程;

2、第二列:控制标志

  • Requird:表示该行以及所涉及模块的成功是用户通过鉴别的必要条件(失败继续,并不通过验证)。任何带 required 标记的模块验证失败,PAM 并不立刻将消息返回给应用程序,而是在所有模块都调用完毕后才将失败消息返回调用他的程序;
  • Requisite:带此标记的模块返回成功后,用户才能通过鉴别(成功继续,失败马上返回);
  • Sufficient:该行以及所涉及模块验证成功是用户通过鉴别的充分条件(成功马上返回;失败时相当于Optional,即通过验证,并继续执行)。模块一旦验证成功,那么 PAM 便立即向应用程序返回成功结果而不必尝试任何其他模块;
  • Optional:即便该行所涉及的模块验证失败用户仍能通过认证;
  • Include:在验证过程中调用其他的 PAM 配置文件。

3、第三列和第四列:模块和模块参数

三、Pam使用

1、限制普通用户ssh登入主机

复制代码
i.服务端加固,禁止gk用户登入主机
(base) [root@NewOSBC8 ~]# grep -v '#' /etc/security/access.conf
-:gk:192.168.190.110

ii.sshd是否启用UseAPM配置
(base) [root@NewOSBC8 ~]# grep 'UsePAM' /etc/ssh/sshd_config
# WARNING: 'UsePAM no' is not supported in RHEL and may cause several
UsePAM yes

iii.PAM第一步检查:/etc/pam.d/sshd中账户检测模块
cat /etc/pam.d/sshd | grep account
account    include      password-auth

iv.PAM第二部检查:秘钥认证模块/etc/pam.d/password-auth
#关联/etc/security/access.conf允许和禁用普通用户
cat /etc/pam.d/sshd | grep -i 'pam_access.so'
account     required      pam_access.so

v.安全模块第三部检查:查看普通用户是否被放行或禁止登入/etc/security/access.conf(文件中有各种范例grep -v '#' /etc/security/access.conf
#允许root用户在指定网段登入主机
+:root:192.168.201.
#禁止普通用户gk通过ssh登入主机
-:gk:192.168.190.

vi.客户端测试(测试成功“Connection closed by...”)

[root@harbor ~]# ssh gk@192.168.190.131
gk@192.168.190.131's password:
Connection closed by 192.168.190.131 port 22

复制代码

参考

Pam模块
https://www.cnblogs.com/kevingrace/p/8671964.html
https://www.jianshu.com/p/a6ecfd73abe4
https://zhuanlan.zhihu.com/p/541527128?utm_id=0
https://www.cnblogs.com/LiuYanYGZ/p/12381651.html
https://www.jinbuguo.com/linux/pam.html

 

posted on   gkhost  阅读(13)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示