![使用 augtool 从 /etc/pam.d/sshd 中注释掉或删除 @include](https://linux22.com/image/699047/%E4%BD%BF%E7%94%A8%20augtool%20%E4%BB%8E%20%2Fetc%2Fpam.d%2Fsshd%20%E4%B8%AD%E6%B3%A8%E9%87%8A%E6%8E%89%E6%88%96%E5%88%A0%E9%99%A4%20%40include.png)
我如何注释掉或删除 /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 维基有更多关于路径表达式的信息。