Pam

使用 augtool 從 /etc/pam.d/sshd 中註釋掉或刪除 @include

  • February 21, 2017

如何註釋掉或刪除 /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 中進行所有其他配置更改,並且統一性會很好。

嘗試確定要編輯/刪除哪個節點時,最重要的事情是使用 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]'

您可以使用路徑表達式來匹配值“common-auth”,而不是對索引 (1) 進行硬編碼,以確保刪除正確的@include條目(如果存在)。

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

.表示節點的值*(*輸出的右側print)。中的任何內容[]都是路徑表達式。Augeas wiki有更多關於路徑表達式的資訊。

引用自:https://serverfault.com/questions/833382