使用 Augeas 配置 PAM

使用 Augeas 配置 PAM

我正在尝试使用 Augeas 在默认的 Ubuntu 14.04 安装中配置 /etc/pam.d 目录中的文件。我的目标是找到所有具有“nullok”或“nullok_secure”参数的节点,并从配置中删除这些参数。这最终将由 Puppet 强制执行,但我目前正在使用本地机器上的 augtool 进行配置。

从我所读过的所有内容来看,以下表达式应该为我提供具有“nullok”和“nullok_secure”的节点:

augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok']
augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok_secure']

或者,换句话说:

augtool print /files/etc/pam.d/*/*/argument[. = 'nullok']
augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']

不幸的是,这些对我没有任何帮助,而且我无论如何也想不出为什么。这是augtool print我知道有参数的一个文件(为简洁起见删除了注释):

/files/etc/pam.d/common-auth
/files/etc/pam.d/common-auth/1
/files/etc/pam.d/common-auth/1/type = "auth"
/files/etc/pam.d/common-auth/1/control = "[success=2 default=ignore]"
/files/etc/pam.d/common-auth/1/module = "pam_unix.so"
/files/etc/pam.d/common-auth/1/argument = "nullok_secure"
/files/etc/pam.d/common-auth/2
/files/etc/pam.d/common-auth/2/type = "auth"
/files/etc/pam.d/common-auth/2/control = "[success=1 default=ignore]"
/files/etc/pam.d/common-auth/2/module = "pam_lsass.so"
/files/etc/pam.d/common-auth/2/argument = "try_first_pass"
/files/etc/pam.d/common-auth/3
/files/etc/pam.d/common-auth/3/type = "auth"
/files/etc/pam.d/common-auth/3/control = "requisite"
/files/etc/pam.d/common-auth/3/module = "pam_deny.so"
/files/etc/pam.d/common-auth/4
/files/etc/pam.d/common-auth/4/type = "auth"
/files/etc/pam.d/common-auth/4/control = "required"
/files/etc/pam.d/common-auth/4/module = "pam_permit.so"
/files/etc/pam.d/common-auth/5
/files/etc/pam.d/common-auth/5/type = "auth"
/files/etc/pam.d/common-auth/5/control = "optional"
/files/etc/pam.d/common-auth/5/module = "pam_cap.so"

我这里漏掉了什么?这些命令不应该给我我正在寻找的节点吗?

答案1

首先,你列出的两个表达方式并不严格等同。

/files/etc/pam.d/*/*/argument[../argument = 'nullok']

选择argument低于 2 级的节点/files/etc/pam.d,这些节点具有argument兄弟节点(或它们自己),并且其值设置为nullok,而

/files/etc/pam.d/*/*/argument[. = 'nullok']

选择argument低于 2 个级别的节点,/files/etc/pam.d并将值设置为nullok(但如果有,则不包括它们的兄弟节点)。

现在你遇到的问题是,argument你尝试匹配的节点实际上是3级别之下/files/etc/pam.d,而不是 2,因此您需要另一个级别/*

避免计算级别的最简单方法是在任何级别进行匹配,方法是使用//

/files/etc/pam.d//argument[.='nullok']

话虽如此,我不知道你打算用它做什么,但你可能想知道有一个基于 Augeas 的 Puppet 提供商来管理 PAM 条目,这可能比重新实现您自己的解决方案容易得多。

答案2

在 Augeas IRC 聊天室处理了一些问题后,我的问题似乎只是一个语法错误。直接使用“augtool print”(不进入 augtool> 提示符)时,必须用引号括住路径。意思是,

augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']

不起作用,但是:

augtool print '/files/etc/pam.d/*/*/argument[. = "nullok_secure"]'

产生正确的结果。此外,如果您进入 augtool 提示符,即使没有引号,该命令也可以正常工作:

$ augtool
augtool> print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']

相关内容