如何设置PAM模块控制Linux密码策略

如何设置PAM模块控制Linux密码策略,第1张

不知道你是那个发行版。首先你的电脑要安装pam_unix2.so模块(一般默认都安装了)Redhat/Fedora/CentOS 系列的linux 编辑 /etc/pam.d/system-authDebian/Ubentu/Suse 系列的linux 编辑 /etc/pam.d/common-auth把含有 pam_unix.so的这行编辑成:password sufficient pam_unix.so use_authtok md5 shadow remember=3(默认的是13)还有就是要创建一个旧密码记录文件/etc/security/opasswd,以及设置密码生命周期

      选择RPM包的优点:稳定,可靠,规范,对应的解决方案也比较成熟,运维方便并便于自动化

      选择RPM包的缺点:更新不够及时,可能存在安全漏洞不及时解决

      选择编译包的优点:功能新,提供最快的安全漏洞解决支持,自主选择模块

      选择编译包的缺点:自主选择性强, *** 作及管理难度较大,运维不方便且不利于自动化

      A:RPM包安装自带PAM模块;如果是编译安装,必须--with-pam

      B:登录时的PAM验证机制流程:

      一般来说,telnet会引用login的PAM模块,而login的验证阶段会有/etc/securetty的限制!由于远程联机属于pts/n (n 为数字)的动态终端机接口装置名称,并没有写入到/etc/securetty ,因此root无法以telnet登陆远程主机。至于ssh使用的是/etc/pam.d/sshd这个模块,你可以查阅一下该模块,由于该模块的验证阶段并没有加入pam_securetty,因此就没有/etc/securetty的限制!故可以从远程直接联机到服务器端。

      在配置ssh时,最好先临时启用Telnet(xinetd),在Telnet环境下确认ssh配置完成,并确实ssh登录正常后,再关闭Telnet(xinetd)。

      在SSH主配置文件/etc/ssh/sshd_config开启PAN机能「UsePAM yes」查看log中没有PAM的报错,有报错是这样的「Starting sshd:/etc/ssh/sshd_config line 82: Unsupported option UsePAM」,说明没有部署PAM模块。

本系列讲解了 Linux-PAM 的工作机制和配置方式,并利用几个 Linux-PAM 模块做一些有趣的小实验。附录中介绍了一些常用的 Linux-PAM 模块。

本文的目标读者是期望了解 PAM 认证机制的 Linux 用户或者系统管理员。如果您是开发人员,希望编写一个使用 PAM 认证的应用程序,或者是为 PAM 写插件的开发人员,本文的内容可能并不能满足您的需求,请参阅 《Linux-PAM应用开发指南》 (英文)和 《Linux-PAM 模块开发指南》 (英文)。

PAM 的各个模块一般存放在 /lib/security/ 或 /lib64/security/ 中,以动态库文件的形式存在(可参阅 dlopen(3) ),文件名格式一般为 pam_*.so 。PAM 的配置文件可以是 /etc/pam.conf 这一个文件,也可以是 /etc/pam.d/ 文件夹内的多个文件。如果 /etc/pam.d/ 这个文件夹存在,Linux-PAM 将自动忽略 /etc/pam.conf 。

/etc/pam.conf 类型的格式如下:

/etc/pam.d/ 类型的配置文件通常以每一个使用 PAM 的程序的名称来命令。比如 /etc/pam.d/su , /etc/pam.d/login 等等。还有些配置文件比较通用,经常被别的配置文件引用,也放在这个文件夹下,比如 /etc/pam.d/system-auth 。这些文件的格式都保持一致:

不难看出,文件夹形式的配置文件中只是没有了服务名称这一列:服务名称已经是文件名了。

由于很难在时下的发行版本中找到使用 /etc/pam.conf 这一独立文件作为 PAM 配置的例子,此处仅就 /etc/pam.d/ 格式举例。在笔者安装的 CentOS(x64) 7.2.1511 中, /etc/pam.d/login 的内容如下:

# 表示注释。

每一行代表一条规则。但也可以用 \\ 来放在行末,来连接该行和下一行。

例子的最后一行开头有一个短横线 - ,意思是如果找不到这个模块,导致无法被加载时,这一事件不会被记录在日志中。这个功能适用于那些认证时非必需的、安装时可能没被安装进系统的模块。

我们在[第一篇]({% post_url 2016-03-30-pam-tutorial-1-intro %})中接触了 Linux-PAM 的四种工作类别(type)。在上面的例子中,工作类别作为第一列出现。

讲到这里,我们有必要聊一聊 PAM 的 流程栈(stack) 概念:它是认证时执行步骤和规则的堆叠。在某个服务的配置文件中,它体现在了配置文件中的自上而下的执行顺序中。栈是可以被引用的,即在一个栈(或者流程)中嵌入另一个栈。我们之后和它会有更多的接触。

第二列为 控制模式(control) ,用于定义各个认证模块在给出各种结果时 PAM 的行为,或者调用在别的配置文件中定义的认证流程栈。该列有两种形式,一种是比较常见的“关键字”模式,另一种则是用方括号( [] )包含的“返回值=行为”模式。

“关键字”模式下,有以下几种控制模式:

“返回值=行为”模式则更为复杂,其格式如下:

其中, valueN 的值是各个认证模块执行之后的返回值。有 success 、 user_unknown 、 new_authtok_reqd 、 default 等等数十种。其中, default 代表其他所有没有明确说明的返回值。返回值结果清单可以在 /usr/include/security/_pam_types.h 中找到,也可以查询 pam(3) 获取详细描述。

流程栈中很可能有多个验证规则,每条验证的返回值可能不尽相同,那么到底哪一个验证规则能作为最终的结果呢?这就需要 actionN 的值来决定了。 actionN 的值有以下几种:

我们在前文中已经介绍了控制模式(contro)的“关键字”模式。实际上,“关键字”模式可以等效地用“返回值=行为”模式来表示。具体的对应如下:

正如前文所述,模块一般保存在 /lib/security 或 /lib64/security 中(取决于 *** 作系统位数)。Linux-PAM 配置文件中的模块位置可以是相对于上述文件夹的相对路径,也可以是文件的全路径。

模块参数用空格与模块路径相隔。该参数将只和特定模块相关,因此某个模块的文档中一定包含其参数的信息。如果需要在单个参数中使用空格,可以将整个参数用方括号( [] )包裹起来。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11410000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存