pam_unix 模块
我们可以使用此模块根据 /etc/shadow 文件检查用户的凭据。
auth required pam_unix.so
我们将在系统中的许多服务中看到此模块。
我们可以将它与身份验证、会话、密码管理组一起使用。
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 用户可以登录,而其他用户则不能。
其中加号表示允许,减号表示拒绝。
此模块与身份验证、帐户、会话、密码管理组一起使用。
Linux-PAM 的好处
系统上有许多程序使用 PAM 模块,例如 su、passwd、ssh、login 和其他服务。
我们将讨论其中的一些。
PAM 的主要重点是验证用户。
Linux 中的身份验证是通过将 /etc/shadow 文件中的加密密码与输入的密码进行匹配来完成的。
我们的系统上有许多需要身份验证的服务,如 SSH、FTP、TELNET、IMAP 和许多其他服务。
所以,除了/etc/shadow 文件之外,我们还会有很多认证文件需要维护,如果这些认证文件之间有任何不一致的数据,那将是一个严重的问题。
Linux-PAM 为服务提供统一的登录系统。
要检查程序是否使用 Linux-PAM:
$ ldd /bin/su
我们应该会看到 libpam.so 库。
管理组
我们将在 PAM 服务文件中看到四个管理组:
- Auth Group : 它可以验证用户
- Account Group:帐户组 控制对服务的访问,例如我们应该使用该服务的次数。
- Session Group:负责服务环境。
- Password Group:密码组,用于密码更新。
pam_nologin 模块
如果文件可用,此模块仅允许 root 登录。
/etc/nologin
auth required pam_nologin.so
我们可以使用此行修改登录服务文件并创建 /etc/nologin 文件,因此只有 root 用户才能登录。
我们可以将它与身份验证、帐户管理组一起使用。
pam_localuser 模块
我们可以使用此模块检查用户是否在 /etc/passwd 中。
account sufficient pam_localuser.so
我们可以将它与身份验证、会话、密码、帐户管理组一起使用。
控制标志
我们在服务文件中有四个控制标志:
- 必备条件:最强的旗帜。如果没有找到需要或者加载失败,它将停止加载其他模块并返回失败。
- required :与 requisite 相同,但如果模块由于任何原因加载失败,它将继续加载其他模块并在执行结束时返回失败。
- 足够:如果模块返回成功,则不再需要其他模块的处理。
- 可选:在失败的情况下,模块堆栈继续执行,并忽略返回码。
pam_limits 模块
我们可以使用此模块对系统资源设置限制。
它甚至会影响 root 用户。
限制配置位于 /etc/security/limits.d/ 目录中。
session required pam_limits.so
我们可以使用此模块来保护系统资源,并且我们可以将其与会话管理组一起使用。
/etc/security/limits.conf 文件中的限制可以是硬的也可以是软的。
Hard :用户不能改变它的值,但 root 可以。
Soft:普通用户可以更改它。
限制可以是 fsize、cpu、nproc、nproc、data 和许多其他限制。
@mygroup hard nproc 50 myuser hard cpu 5000
mygroup 成员的第一个限制,将每个成员的进程数设置为 50。
名为 myuser 的用户的第二个限制,将 CPU 时间限制为 5000 分钟。
我们可以编辑 /etc/pam.d/ 中的任何 PAM 服务文件,并使用模块来保护服务。
pam_cracklib 模块
如今,强密码是必须的。
该模块确保我们将使用强密码。
password required pam_cracklib.so retry=4 minlen=12 difok=6
此示例确保:
密码最小长度 = 12
四次选择强密码;否则,它将退出。
新密码必须包含旧密码中的六个新字符。
我们可以将此模块与密码管理组一起使用。
pam_rootok 模块
此模块检查用户 ID 是否为 0,这意味着只有 root 用户才能运行此服务。
auth sufficient pam_rootok.so
我们使用此模块来确保特定服务仅允许 root 用户使用,并且我们可以将其与 auth 管理组一起使用。
PAM 服务
四种类型的 PAM 服务:
- 认证服务模块。
- 账户管理模块。
- 会话管理模块。
- 密码管理模块。
任何需要身份验证的应用程序都可以使用服务名称向 PAM 注册。
我们可以列出使用 Linux-PAM 的 Linux 服务。
$ ls /etc/pam.d/
如果我们打开任何服务文件,我们将看到该文件分为三列。
第一列是管理组,第二列是控制标志,第三列是使用的模块(so 文件)。
$ cat /etc/pam.d/sshd
account required pam_nologin.so
account是管理组,required是控制标志,使用的模块是pam_nologin.so。
我们可能会找到第四列,用于模块参数。
Linux-PAM 配置
Linux-PAM 的配置在目录 /etc/pam.d/ 中。
某些 PAM 模块需要带有 PAM 配置的配置文件才能运行。
我们可以在 /etc/security.conf 中找到配置文件。
如果我们错误地配置了 PAM,这可能会导致严重的问题。
pam_mysql 模块
我们可以使用 pam_mysql 模块将 MySQL 数据库用作后端,而不是根据 /etc/shadow 检查用户的凭据。
你可以这样使用它:
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
我们将此模块与身份验证、会话、密码、帐户管理组一起使用。
在本教程中,我们将讨论Linux中用于身份验证的强大框架,它是Linux-PAM。
PAM 或者 Pluggable Authentication Modules 是位于 Linux 应用程序和 Linux 本机身份验证系统之间的管理层。
pam_deny 模块
我们可以使用此模块来限制访问。
它总是会返回一个非OK。
我们可以在模块堆栈的末尾使用它来保护自己免受任何错误配置的影响。
如果我们在模块堆栈的开头使用它,服务将被禁用:
auth required pam_deny.so auth required pam_unix.so
我们可以将它与身份验证、帐户、会话、密码管理组一起使用。
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 模块
我们应该了解系统上的 PAM 内置模块,以便我们可以完美地使用它们。
模块顺序
顺序很重要,因为每个模块都依赖于堆栈中的前一个模块。
如果我们尝试使用如下配置登录:
auth required pam_unix.so auth optional pam_deny.so
这将正常工作,但是如果我们像这样更改顺序会发生什么:
auth optional pam_deny.so auth required pam_unix.so
没有人可以登录,所以顺序很重要。