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

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

 ...

 #标准的Un * xauthentication。
 @include common-auth

 ...

镜头文件不是所有有用的。 我是Augeas的新手,不太清楚pathexpression式是如何工作的。

我试图用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中进行所有其他configuration更改,并且一致性会很好。

在试图确定要编辑/删除哪个节点时,最重要的事情是使用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行有path/files/etc/pam.d/ssh/include[1] ,所以这会删除它:

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

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

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

. 意味着节点的print输出的右侧)。 []中的任何内容都是pathexpression式。 Augeas wiki有很多关于pathexpression式的信息。