
Linux PAM简介
PAM是Pluggable Authentication Modules的首字母缩写,这个工具是在Linux系统中提供认证支持的核心要素之一。这个工具有助于提供动态的认证支持。纵观历史,这个工具是从一个被称为Unix可插拔认证模块的架构演变而来的。现在问题来了,为什么要引入这个概念呢?在早期,如果一个程序需要认证一个用户,就会从/etc/passwd中抓取和使用必要的信息,但从长远来看,这种方式对系统管理员和开发人员来说是很笨拙的。这就是PAM的用武之地,它消除了这种混乱,帮助程序透明地验证用户,无论信息是如何存储的。
Linux PAM的语法
在PAM的情况下,我们有2个配置文件来完成PAM工具的流程。PAM的主配置文件存在于/etc/pam.conf,而任何一个PAM感知的应用程序的配置都存在于/etc/pam.d/directory。所以现在,PAM感知的应用程序是那些专门为使用PAM而编译的应用程序。
下面是在Linux中配置主PAM文件的语法。
service type control-flag module module-arguments
在这里,每个占位符都表示一个特定的组件。例如,service需要用实际的应用程序名称来代替,type表示模块或上下文或接口的类型,也就是应用程序要求PAM执行的动作或功能,control-flag表示在认证不成功的情况下PAM-API的行为,module表示文件的实际路径或相对路径名,最后是module-arguments,它将控制模块的行为,包含一个空格分隔的令牌列表。
现在,/etc/pam.d/directory中的每个文件的语法与我们上面看到的基本相似,看起来像:
type control-flag module module-arguments
唯一缺少的是服务,因为每个文件本身就是一个服务。
PAM在Linux中是如何工作的?
为了了解PAM的工作情况,我们首先需要看一下PAM在行业中普遍使用的一个使用案例。在许多地方,人们会使用PAM来控制登录的尝试,只允许授权和认证的人通过GUI或界面。在其他一些情况下,开发人员也使用PAM来控制那些被授权使用su二进制文件来切换身份的用户,或者在某些情况下,使用passwd工具,使用户能够改变密码。
现在让我们看看Linux中PAM的工作流程,然后我们将看到语法中的字段中的选项。整个认证过程被分成4个管理组,其中所有的组都是相互独立的。
下面给出了这4个组:
- 账户模块。 在当前条件下,如果指定的账户有效或无效,则使用该模块来验证目标。许多条件,如账户的有效期,一天中的时间,以及用户是否可以访问相应的服务,都是在这个组中进行的一些检查。
- 认证模块。 一旦所有的背景细节被检查正确,用户的身份将在这个模块中被检查。这种身份检查是通过允许用户输入密码或任何其他只有相应用户需要知道的秘密来完成的。
- 密码模块。 该模块帮助用户更新密码,预计将与认证模块携手并进。两者的共鸣将使强密码得到执行。
- 会话模块。 这个模块定义了在会话开始和结束时需要执行的操作,是整个PAM方法论完成预期工作的最后但也是最重要的模块。当用户验证了自己的身份后,我们称会话开始。
现在,让我们看一下我们在语法中看到的字段的不同选项。
在类型方面,我们有4个选项,它们是:
- Auth: 这种类型是为了确保用户是经过认证的,并且只有他们才是他们应该是的。
- 帐户: 这是为了查看帐户的状态,并确保相应的工作是由该帐户允许的。
- 会话: 完成诸如设置使用限制或挂载目录的操作。
- 密码: 这个选项可以根据要求更改密码或任何其他凭证。
Linux PAM的例子
下面给出的是Linux PAM的例子。
这是Brain ward书中的一个著名例子。
代码
auth sufficient pam_rootok.so
auth requisite pam_shells.so
auth sufficient pam_unix.so
auth required pam_deny.so
解释
- 在上面的一组行中,第一行检查行动是否由root执行;如果是,它不检查其他东西,因为这个条件已经足够了。如果不是,那么它将查看shell是否存在于/etc/shells位置;如果是,那么它只移动到下一行,如果不是,它只是以无效授权的信息退出。
- 下一行又是一个充分条件,它通过一个密码来检查真实性。最后一组命令是deny模块,是一个特殊的模块,将永远返回认证失败。
结语
在这篇文章中,虽然这个命令没有附加输出,但对这个例子的解释是这个话题的重要检查点之一。我们鼓励你尝试不同的排列组合,为你要解决的用例制定一套规则。