使用 augtool 从 /etc/pam.d/sshd 中注释掉或删除 @include

使用 augtool 从 /etc/pam.d/sshd 中注释掉或删除 @include

我如何注释掉或删除 /etc/pam.d/sshd 中的“@include common-auth”行?默认内容是:

...

# 标准 Un*x 身份验证。
@include 通用身份验证

...

镜头文档没什么帮助。我是 Augeas 的新手,还不太清楚路径表达式是如何工作的。

具体来说,我正尝试使用 augtool(作为 Dockerfile 的一部分)来执行此操作。我天真地尝试了以下命令,但没有成功:

augtool --autosave 'rm /files/etc/pam.d/sshd/@include common-auth'

我采取了这样的做法sed,并且下面的方法为我完成了工作:

sed -i 's/@include common-auth/#@include common-auth/' /etc/pam.d/sshd

但我仍在尝试找出是否有办法使用 augtool 来完成此操作,因为我正在使用 augtool 在我的 Dockerfile 中进行所有其他配置更改,并且统一性会很好。

答案1

在尝试确定要编辑/删除哪个节点时,最重要的事情是查看当前的使用 augtool 的print命令树:

$ augtool
augtool> print /files/etc/pam.d/sshd
/files/etc/pam.d/sshd
/files/etc/pam.d/sshd/#comment[1] = "PAM configuration for the Secure Shell service"
/files/etc/pam.d/sshd/#comment[2] = "Standard Un*x authentication."
/files/etc/pam.d/sshd/include[1] = "common-auth"
/files/etc/pam.d/sshd/#comment[3] = "Disallow non-root logins when /etc/nologin exists."
/files/etc/pam.d/sshd/1
/files/etc/pam.d/sshd/1/type = "account"
[..]

这表明该@include common-auth行有路径/files/etc/pam.d/ssh/include[1],因此这将删除它:

augtool -s 'rm /files/etc/pam.d/sshd/include[1]'

您可以使用路径表达式来匹配值“common-auth”,而不是对索引 (1) 进行硬编码,以确保删除@include存在的正确条目。

augtool -s 'rm /files/etc/pam.d/sshd/include[. = "common-auth"]'

.意味着价值节点(输出的右侧print)。 内的任何内容[]都是路径表达式。Augeas 维基有更多关于路径表达式的信息。

相关内容