PAM(Pluggable Authentication Module,可插拔认证模块)是一种用于实现Linux系统认证和授权的灵活框架。本文旨在探讨如何基于PAM来实现Linux系统的安全认证和设计。Linux系统的安全性对于数据和资源的保护至关重要,因此采用适当的认证机制和授权策略至关重要。PAM提供了一种可扩展的方式,通过其模块化的设计,可以方便地集成各种认证方式,如密码、双因素认证、生物识别等,以满足各种安全需求。PAM的基本概念和工作原理,然后探讨了PAM模块的种类和示例,包括常见的passwd、system-auth、pam_unix等。接着,本文详细讨论了如何配置PAM,包括如何在/etc/pam.d/目录下创建和编辑配置文件,以及如何定义认证规则和授权策略。此外,还强调了PAM的安全性最佳实践,以防止潜在的漏洞和攻击。

多种身份验证方法:P AM支持各种身份验证方法,包括基于密码的身份验证、双因素身份验证、生物识别身份验证、Kerberos、Radius等。审计和安全性:P AM还可以记录身份验证和授权事件,以便审计和跟踪安全问题。PAM的配置文件通常位于目录中,每个应用程序或服务都有一个对应的配置文件。这些文件定义了PAM模块的堆叠方式,规定了用户登录时会执行哪些操作。/etc/pam.d/

         PAM核心库文件    /usr/lib/libpam.so.*

         PAM配置文件         /etc/pam.conf或/ect/pam.d/*

         PAM服务模块         /usr/lib/security/pam_*.so

         PAM核心库文件    /usr/lib/libpam.so.*

         PAM配置文件         /etc/pam.conf或/ect/pam.d/*

         PAM服务模块         /usr/lib/security/pam_*.so

1、认证管理(authentication management)

主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。

2、帐户管理(account management)

主要是检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等等。

3、密码管理(password management)

主要是用来修改用户的密码。

4、会话管理(session management)

备份重要文件

 PAM 配置文件放到/etc/pam.d/目录下,其规则内容都是不包含 service 部分的,即不包含服务名称,而/etc/pam.d 目录下文件的名字就是服务名称。如: vsftpd,login 等,只是少了最左边的服务名列。如:/etc/pam.d/sshd

cd /etc/pam.d 

Linux-PAM 有四种模块类型,分别代表四种不同的任务,它们是:认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理,一个类型可能有多行,它们按顺序依次由 PAM 模块调用。

使用合适的文本编辑器,比如或,以超级用户权限(root或使用)打开你要编辑的PAM配置文件。例如,你可以使用以下命令来编辑文件:

Vi  nano  sudo/etc/pam.d/common-auth

在打开的文件中,你会看到已有的PAM模块和参数配置。你可以在文件中添加、编辑或删除行来满足你的认证需求。

配置认证模块和参数。以下是一个示例文件的部分内容,说明如何配置用户名/密码认证模块()的一些参数:/etc/pam.d/common-authpam_unix.so

auth    [success=1 default=ignore]      pam_unix.so

auth表示这是认证(authentication)的配置。

[success=1 default=ignore]指定成功后跳过下一个模块, 表示如果没有其他模块匹配,继续。default=ignore

pam_unix.so是使用的认证模块,这里是用户名/密码认证。

nullok_secure是模块的参数,可以根据需要配置参数以满足你的安全策略。

根据你的安全需求,你可以在文件中添加其他认证模块和参数,例如多因素认证、限制登录尝试次数、账号锁定策略等。

保存文件并退出文本编辑器。

在PAM配置文件中,你可以选择已经存在的认证模块,也可以开发自定义模块,以实现不同的认证策略。模块是一个常见的用于基本用户名/密码认证的认证模块,但还有其他模块可以用于不同类型的认证需求。下面是一些常见的PAM认证模块以及它们的用途:pam_unix.so

pam_unix.so:用于基本的用户名/密码认证。它检查用户的用户名和密码是否与系统的密码数据库匹配。

pam_ldap.so:用于LDAP认证,允许将LDAP目录用作用户帐户数据库。

pam_google_authenticator.so:用于双因素认证,可以结合Google Authenticator或其他OTP(一次性密码)工具来增强认证安全性。

pam_tally2.so:用于限制登录尝试次数,并锁定用户帐户以防止暴力破解攻击。

以【登录失败五次(包括 root),锁定账户 5 分钟(300 秒),5 分钟后自动解除】。auth required pam_faillock.so preauth silent audit deny=3 even_deny_root root_unlock_time=60 unlock_time=60

auth required: 这一行指定了这个模块是必需的,也就是说,如果这个模块认证失败,将阻止用户登录。

pam_faillock.so: 这是 PAM 模块的名称,它用于锁定账户,以防止暴力破解攻击。

preauth: 这是一个模块参数,表示这是一个“pre-authentication” 模块,即在用户成功认证之前运行。

silent: 这个参数告诉 PAM 不要显示任何警告或错误消息给用户。

audit: 表示在认证失败时将这次失败的登录尝试记录到审计日志。

deny=3: 如果用户连续失败登录 3 次,账户将被锁定。

even_deny_root: 即使是 root 用户也会受到上述规则的限制。

root_unlock_time=60: 如果 root 用户的账户被锁定,将锁定 60 秒。

unlock_time=60: 用户账户被锁定后,将在 60 秒后解锁。

第二行:auth sufficient pam_unix.so nullok try_first_pass

auth sufficient: 这一行表示,如果前面的模块成功认证用户,那么就不再检查后续的模块。

pam_unix.so: 这是用户名/密码认证的标准 PAM 模块。

nullok: 这个参数表示用户可以不提供密码。

try_first_pass: 这个参数表示 PAM 尝试使用前一个认证模块中提供的密码。

第三行:auth [default=die] pam_faillock.so authfail audit deny=3

auth [default=die]: 这一行表示,如果这个模块认证失败,用户将被拒绝登录( 表示失败后终止认证流程)。die

pam_faillock.so: 这是前面提到的模块,用于账户锁定。

authfail: 这个参数表示这是在用户认证之后运行的模块。

audit: 同样,表示在认证失败时将这次失败的登录尝试记录到审计日志。

deny=3: 如果用户连续失败登录 3 次,账户将被锁定。

这个配置的目的是实施了账户锁定机制,如果用户或 root 用户连续 3 次失败登录,他们的账户将被锁定,并且在 60 秒后自动解锁。同时,记录认证失败的尝试到审计日志中,以便审计和安全监控。

打开PAM密码策略配置文件:

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐