在上一篇文章中,我们讨论了Linux iptables 防火墙,还有人问认证问题。今天我们来聊聊Linux中用于身份验证的强大框架,那就是Linux-PAM。
PAM or 可插拔的身份验证模块是位于 Linux 应用程序和 Linux 本机身份验证系统之间的管理层。
Linux-PAM 的好处
您的系统上有许多程序使用 PAM 模块,例如 su、passwd、ssh、login 和其他服务。我们将讨论其中的一些。
PAM 的主要重点是验证您的身份users.
Linux 中的身份验证是通过将 /etc/shadow 文件中的加密密码与输入的密码进行匹配来完成的。
我们的系统上有许多服务需要身份验证,例如 SSH、FTP、远程登录、IMAP, 和许多其他服务。因此,除了 /etc/shadow 文件之外,我们还会维护很多身份验证文件,如果这些身份验证文件之间的数据不一致,可能会造成严重的问题。
帕姆来了。 Linux-PAM 为您的服务提供统一的登录系统。
要检查您的程序是否使用 Linux-PAM:
$ ldd /bin/su
您应该看到 libpam.so 库。
Linux-PAM 配置
Linux-PAM的配置位于目录/etc/pam.d/中。
某些 PAM 模块需要具有 PAM 配置的配置文件才能运行。您可以在 /etc/security 中找到配置文件。
如果 PAM 配置错误,可能会导致严重问题。
PAM服务
PAM 服务的四种类型:
- 认证服务模块。
- 账户管理模块。
- 会话管理模块。
- 密码管理模块。
任何需要身份验证的应用程序都可以使用服务名称向 PAM 注册。
您可以列出使用 Linux-PAM 的 Linux 服务。
$ ls /etc/pam.d/
如果您打开任何服务文件,您将看到该文件分为三列。第一列是管理组,第二列是控制标志,第三列是使用的模块(so文件)。
$ cat /etc/pam.d/sshd
account required pam_nologin.so
账户为管理组,必填为控制标志,使用的模块为pam_nologin.so。
您可能会发现第四列,用于模块参数。
管理组
您将在 PAM 服务文件中看到四个管理组:
-
授权组:它可以验证用户
-
账户组:控制对服务的访问,例如您应该使用该服务的次数。
-
会议组:负责服务环境。
-
密码组:用于密码更新。
控制标志
我们在服务文件中有四个控制标志:
-
必要条件: 最强的旗帜。如果未找到必需的模块或加载失败,它将停止加载其他模块并返回失败。
-
Required:与 Requirement 相同,但如果模块因任何原因加载失败,则继续加载其他模块,并在执行结束时返回失败。
-
充足的:如果模块返回成功,则不再需要其他模块的处理。
-
Optional:在失败的情况下,模块堆栈继续执行,并且返回代码被忽略。
模块顺序
顺序很重要,因为每个模块都依赖于堆栈中的前一个模块。
如果您尝试使用如下配置登录:
auth required pam_unix.so
auth optional pam_deny.so
这可以正常工作,但是如果我们像这样改变顺序会发生什么:
auth optional pam_deny.so
auth required pam_unix.so
没有人可以登录,因此顺序很重要。
PAM模块
您的系统上有一些您应该了解的 PAM 内置模块,以便您可以完美地使用它们。
pam_succeed_if 模块
该模块允许指定组的访问。您可以像这样验证用户帐户:
auth required pam_succeed_if.so gid=1000,2000
上面这行表示只允许ID为1000或2000的组中的用户登录。
您可以使用 uid 作为用户 ID。
auth requisite pam_succeed_if.so uid >= 1000
在本例中,任何大于或等于1000的用户id都可以登录。
您还可以将其与 ingroup 参数一起使用,如下所示:
auth required pam_succeed_if.so user ingroup mygroup
只有名为 mygroup 的组中的人员才能登录。
pam_nologin 模块
该模块仅允许 root 在文件可用时登录。
/etc/nologin
auth required pam_nologin.so
您可以使用此行修改登录服务文件并创建/etc/nologin 文件,以便只有root 可以登录。
你可以使用它身份验证、帐户管理组。
pam_access 模块
该模块的工作方式与 pam_succeed_if 模块类似,只是 pam_access 模块检查来自网络主机的日志记录,而 pam_succeed_if 模块则不关心。
account required pam_access.so accessfile=/etc/security/access.conf
您可以在文件中键入规则,如下所示:
/etc/security/access.conf
+:mygroup
-:ALL:ALL
上述规则规定只有mygroup用户可以登录,其他用户不能登录。
其中加号表示允许,减号表示拒绝。
该模块与身份验证、帐户、会话、密码管理组。
pam_deny 模块
您可以使用此模块来限制访问。它总是会返回一个非OK。
您可以在模块堆栈的末尾使用它来保护自己免受任何错误配置的影响。
如果您在模块堆栈的开头使用它,您的服务将被禁用:
auth required pam_deny.so
auth required pam_unix.so
你可以使用它身份验证、帐户、会话、密码管理组。
pam_unix 模块
您可以使用此模块根据 /etc/shadow 文件检查用户的凭据。
auth required pam_unix.so
您将看到该模块在系统中的许多服务中使用。
你可以使用它身份验证、会话、密码管理组。
pam_localuser 模块
您可以使用此模块检查用户是否在 /etc/passwd 中。
account sufficient pam_localuser.so
你可以使用它身份验证、会话、密码、帐户管理组。
pam_mysql 模块
您可以使用MySQL数据库使用 pam_mysql 模块作为后端。
你可以这样使用它:
auth sufficient pam_mysql.so user=myuser passwd=mypassword host=localhost db=mydb table=users usercolumn=username passwdcolumn=password
这里我们使用 pam_mysql 的参数验证用户。
如果您的系统上没有,您可以像这样安装:
$ yum install libpam-mysql
我们使用这个模块身份验证、会话、密码、帐户管理组。
pam_cracklib 模块
如今,强密码是必须的。该模块确保您将使用强密码。
password required pam_cracklib.so retry=4 minlen=12 difok=6
此示例确保:
密码最小长度 = 12
四次选择强密码;否则,它将退出。
您的新密码必须比旧密码有六个新字符。您可以将此模块与password管理组。
pam_rootok 模块
该模块检查用户ID是否为0,这意味着只有root用户才能运行该服务。
auth sufficient pam_rootok.so
我们使用此模块来确保仅允许 root 用户使用特定服务,并且您可以将其与auth管理组。
pam_limits 模块
您可以使用此模块来设置系统资源的限制。它甚至会影响 root 用户。
限制配置位于 /etc/security/limits.d/ 目录中。
session required pam_limits.so
您可以使用此模块来保护您的系统资源,并且可以将其与session管理组。
/etc/security/limits.conf 文件中的限制可以是硬限制,也可以是软限制。
Hard:用户无法更改其值,但 root 可以。
Soft: 普通用户可以更改它。
限制可能是 fsize、cpu、nproc、nproc、数据和许多其他限制。
@mygroup hard nproc 50
myuser hard cpu 5000
mygroup 成员的第一个限制,将每个成员的进程数设置为 50。
第二个限制是针对名为 myuser 的用户,将 CPU 时间限制为 5000 分钟。
您可以编辑 /etc/pam.d/ 中的任何 PAM 服务文件,并使用您想要的模块以您想要的方式保护您的服务。
我希望您发现使用 Linux PAM 模块既简单又有用。
谢谢。