[TOC]
PAM 简介
前言
可插拔认证模块 PAM(Pluggable Authentication Modules)是linux中关于用户认证的一个核心技术。linux 是一个注重安全的系统,因此有许多帮助用户认证的技术,用户应该学习相关技术,来定制适合自己的安全系统。
pam
pam 模块:
- /usr/lib/security
- pam_crackib.so 密码检查,如长度,组合等
- pam_tally.so 限制登录,次数等
- pam_wheel.so 用户限制
- pam_limits.so 进程资源限制
- pam_env.so 环境变量
- /etc/security/pam_env.conf
- /etc/environment
- pam_mount.so 自动挂载
- pam_ecryptfs.so 自动挂载加密目录
- pam_exec.so 登录脚本
- pam_winbind.so LDAP认证
- pam_krb5.so Kerberos认证
- pam_ldap.so LDAP主对端认证
- pam_yubico.so Yubikey认证
- pam_oath.so 2FA认证
- pam_fprintd.so 指纹认证
- pam_usb.so USB设备认证
- pam_ssh.so 远端用户认证
- pam_abl.so 限制ssh暴力攻击
- pam_encfs.so 自动挂载加密目录
- pam_google_authenticator.so 谷歌2FA认证
- pam_pwdfile.so 非本地FTP登录和chroot限制
- pam_unix.so 传统系统登录验证
- /etc/passwd
- /etc/shadow
- nullok 允许空
- try_first_pass 尝试上级模块密码
- use_first_pass 使用上级模块密码
- nodelay 延迟
- use_authtok 使用上级授权
- authtok_type 密码提示
- nis
- shadow 使用shadow密码文件
- md5 加密算法
- pam_deny.so 默认拒绝
- pam_warn.so 默认警告
- pam_access.so 基于主机登录
- /etc/security/access.conf
- pam_debug.so 调试
- pam_echo.so 打印信息
- pam_faildealy.so 错误延迟
- pam_filter.so 过滤
- pam_ftp.so 匿名访问ftp
- pam_group.so 修改组权限
- pam_issue.so 问题文件
- pam_keyinit.so 显示keyinit文件
- pam_lastlog.so 上次登录日期
- pam_listfile.so 列出文件
- pam_localuser.so 是否在/etc/passwd
- pam_loginuid.so 登录uid
- pam_mail.so 邮件
- pam_mkhomedir.so 创建主用户目录
- pam_motd.so 显示motd文件
- pam_namespace.so 私有名称空间
- pam_nologin.so 禁止非root用户登录
- pam_permit.so
- pam_pwhistory.so 使用.pwhistory文件授权访问
- pam_rhosts.so 使用.rhosts授权访问
- pam_rootok.so 仅获得root用户访问权限
- pam_securetty.so 将root登录限制为特殊设备
- pam_selinux.so selinux支持
- pam_shells.so 检查有效shell
- pam_succeed_if.so 测试账户特征
- pam_time.so 时间控制
- pam_timestamp.so 缓存身份验证
- pam_umask.so 掩码
- pam_userdb.so 用户数据库
- pam_wheel.so 仅允许wheel组使用root权限
- pam_xauth.so 转发xauth密钥
pam 配置:
- /etc/pam.d
- login 登录程序的认证配置
- system-local-login 本地登录
- system-login 登录系统
- system-auth 用户认证
- sshd sshd的认证配置
- system-remote-login 远程登录
- other 默认认证配置
- 服务类型
- account 账户,允许登录的账户或条件
- auth 认证,登录并授权
- password 密码,更新密码,或一次性密码(提问/响应式认证)
- session 会话,维护登录环境
- 控制
- required 需要
- requisite 必要(立即返回错误)
- sufficient 足够(立即返回成功)
- optional 可选
- include 包含,导入其他配置对应类型行
- substack 子堆栈,导入但视为一个整体
示例:
# /etc/pam.d/login
# 类型 控制 模块 参数...
auth required pam_securetty.so x=1 y=2 [z=x y]
auth requisite pam_nologin.so
auth include system-local-login
account include system-local-login
session include system-local-login
具体应用
/etc/pam.d/other
# 没有对应配置的默认配置,设置为拒绝或警告
auth required pam_deny.so # 拒绝
auth required pam_warn.so # 提示错误
account required pam_deny.so
account required pam_warn.so
password required pam_deny.so
password required pam_warn.so
session required pam_deny.so
session required pam_warn.so
怎么关闭强制密码强度
我个人最讨厌就是强制密码复杂强度这种功能。虽然它保证了安全,不过我挺反感强制性的东西。毕竟我也只是个人电脑,根本不需要这种东西。
新版的pam 会强制密码强度,它主要是依赖一个叫做 pam_passwdqc 的组件控制。
它的配置在:
- /etc/secrutity/passwdqc.conf
修改密码强度:
- enforce=none: 改成这个设置即可
- enforce=none: 表示只警告弱口令字,但不禁止它们使用
- enforce=users: 对系统上的全体非根用户实行这一限制
- enforce=everyone: 对包括根用户在内的全体用户实行这一限制
参考
- arch wiki:https://wiki.archlinux.org/index.php/PAM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)