在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(Pluggable Authentication Modules)可动态加载验证模块
配置文件
pam的配置文件在/etc/pam.conf和/etc/pam.d,/etc/pam.conf在某些linux发行版下可能被移除

从配置文件可以看出配置文件内最多由四部分组成
- 模块类型
- 控制标记
- 模块路径
- 模块参数

模块类型

控制标记

模块路径
默认路径在/usr/lib/x86_64-linux-gnu/security,该目录下有很多so动态链接库,在pam.d写对应名称即可实现调用对应so文件

模块参数
跟在模块路径后,用来规定模块的使用。
模块详解
pam_succeed_if.so

该文件用来判断账户的特征。
flag如下,用来判断是否保存系统日志

Conditions如下,其中field有user uid gid shell home ruser rhost tty service,可以根据账户特征判断是否返回成功

在/var/pam.d/sshd中添加如下

- auth 表示该条目用于认证
- required 表示该模块如果验证失败或成功则继续往下验证,增添一个失败或成功标志,如果到达最后有失败则不通过
- pam_succeed_if.so 表示调用/usr/lib/x86_64-linux-gnu/security下的pam_succeed_if.so
- debug flag标志位 表示将调试信息放入/var/log/secure
- user=root filed 表示检测用户的名称是否等于root
在另外一个ubuntu上尝试用root登录ssh返回成功

用kali登录即使输入正确的密码也会失败

查看日志分别显示成功和失败

- auth required pam_succeed_if.so rhots=192.168.127.140 //指定ssh连接的ip只能是192.168.127.140
- auth required pam_succeed_if.so rhots=~192.168.127.* //指定ssh连接的ip只能是192.168.127.0/24
- auth required pam_succeed_if.so tty=tty1 //指定ssh连接的终端只能是tty1
pam_faildelay.so
用来改变在验证失败后延迟的时间

- auth required pam_faildelay.so delay=5000000 //表示验证失败后要等待5秒后才可以再次输入
pam_env.so
用来增加和删除环境变量

可以指定环境变量文件(key=value)默认在/etc/environment下,用readenv的flag标志可以指定是否增加

刚开始的环境变量

在/etc/environment增加一句,登出并重新登录后检测环境变量

增加了一条新的环境变量

常用动态链接库
- pam_unix.so
- 作用:提供传统的基于
/etc/passwd
和/etc/shadow
文件的认证方式。主要用于密码验证和账户验证。 - 使用场景:适用于大多数 UNIX 系统,处理用户认证时使用密码、账号有效期、登录限制等。
- 作用:提供传统的基于
- pam_tally.so
- 作用:用于跟踪和限制登录失败的次数,防止暴力破解攻击。
- 使用场景:可以用于账户锁定策略,防止某个用户尝试多次失败后继续登录。
- pam_google_authenticator.so
- 作用:提供基于 Google Authenticator 的双因素认证。
- 使用场景:通过与 Google Authenticator 结合,增加第二重身份验证,适用于增强安全性的场景。
- pam_ldap.so
- 作用:支持 LDAP(轻量级目录访问协议)认证,允许通过 LDAP 服务器进行用户验证。
- 使用场景:适用于需要集中管理认证信息的环境,通常与公司或机构的 LDAP 服务器集成。
- pam_radius.so
- 作用:通过 RADIUS(远程认证拨号用户服务)协议进行认证。
- 使用场景:常用于需要集中认证管理的环境,尤其是在网络设备(如无线接入点)和 VPN 服务中。
- pam_krb5.so
- 作用:提供 Kerberos 认证支持,允许通过 Kerberos 协议进行用户身份验证。
- 使用场景:适用于需要强认证和单点登录的环境,尤其是与 Kerberos 服务集成的网络系统。
- pam_passwdqc.so
- 作用:用于强制密码复杂性要求,检查密码是否符合最小复杂度(如长度、字符种类等)。
- 使用场景:用于密码设置时确保用户设置符合系统要求的复杂密码。
- pam_securetty.so
- 作用:限制从某些终端登录,增加系统安全性。
- 使用场景:用于限制某些用户只能从安全的终端(如控制台)进行登录,防止通过不安全的远程终端进行访问。
- pam_wheel.so
- 作用:限制某些用户组(如 wheel 组)的成员才能执行特定的操作,如
sudo
。 - 使用场景:通过控制组成员,确保只有授权用户可以进行超级用户操作。
- 作用:限制某些用户组(如 wheel 组)的成员才能执行特定的操作,如
- pam_time.so
- 作用:通过时间限制限制某些用户的登录时间。
- 使用场景:适用于管理某些用户的登录时段,控制特定用户只能在规定的时间内访问系统。
- pam_mount.so
- 作用:用于挂载和卸载用户的私有存储设备或加密的文件系统。
- 使用场景:在用户登录时挂载指定的存储设备或加密文件系统,常用于需要动态挂载用户存储的场景。
- pam_faillock.so
- 作用:提供失败登录计数并锁定账户,防止暴力破解攻击。
- 使用场景:与
pam_tally.so
类似,常用于防止暴力破解,锁定账户一段时间或直到管理员解锁。
- pam_nologin.so
- 作用:阻止用户在系统处于维护状态时登录。
- 使用场景:当系统进入维护模式时,管理员可以使用此模块阻止用户登录。
- pam_exec.so
- 作用:允许在认证过程中执行外部命令。
- 使用场景:在认证流程中插入自定义的外部程序,比如进行自定义的验证或记录某些信息。
- pam_python.so
- 作用:允许在 PAM 配置中嵌入 Python 脚本进行扩展。
- 使用场景:适用于需要根据复杂规则或外部条件进行认证的场景,通过 Python 脚本灵活扩展认证功能。
- pam_atlas.so
- 作用:用于通过与 Atlas 安全平台集成来提供用户身份验证。
- 使用场景:企业环境中与 Atlas 系统结合,用于提供集中的认证和管理。
- pam_deny.so
- 作用:始终拒绝认证请求。
- 使用场景:常用于特定条件下需要拒绝某些认证请求的场景,通常作为安全策略的一部分。
- pam_allow.so
- 作用:始终允许认证请求通过。
- 使用场景:用于白名单策略,某些特定用户或条件下始终允许认证。
- pam_userdb.so
- 作用:允许使用
userdb
数据库进行用户身份验证。 - 使用场景:适用于简单的认证数据库,通常用于无需复杂 LDAP 或 RADIUS 配置的场景。
- 作用:允许使用
- pam_fingerprint.so
- 作用:提供指纹认证功能。
- 使用场景:用于需要生物特征认证的场景,如指纹扫描设备的集成。
Comments NOTHING