我正在尝试使用Augeas在默认的Ubuntu 14.04安装中configuration/etc/pam.d目录下的文件。 我的目标是find所有具有“nullok”或“nullok_secure”参数的节点,并从configuration中删除这些参数。 这将最终由Puppet强制执行,但我目前正在使用本地机器上的augtool进行configuration。
从我读过的所有东西,下面的expression式应该让我用'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
(为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"
我在这里错过了什么? 这些命令不应该给我我正在寻找的节点?
首先,你列出的两个expression式并不完全相同。
/files/etc/pam.d/*/*/argument[../argument = 'nullok']
select/files/etc/pam.d
下的argument
节点2个级别,其具有argument
兄弟节点(或它们自己),其值设置为nullok
,而
/files/etc/pam.d/*/*/argument[. = 'nullok']
select/files/etc/pam.d
下的argument
节点2个级别,其值设置为/files/etc/pam.d
(但不包括它们的兄弟,如果有的话)。
现在你遇到的问题是你试图匹配的argument
节点实际上是在/files/etc/pam.d
下的3个级别,而不是2,所以你需要另一个级别的/*
。
避免计数级别的最简单的方法是在任何级别匹配,使用//
代替:
/files/etc/pam.d//argument[.='nullok']
也就是说,我不知道你打算怎么做,但是你可能想知道有一个基于Augeas的Puppet提供者来pipe理PAM条目 ,这可能比重新实现你自己的解决scheme容易得多。
在Augeas IRC房间里做了一些事情之后,似乎我的问题只是一个语法错误。 直接使用“augtool打印”(不要放入augtool>提示符)时,必须引用path。 含义,
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']