web-dev-qa-db-ja.com

augtoolを使用して/etc/pam.d/sshdから@includeをコメントアウトまたは削除します

/etc/pam.d/sshdの「@ includecommon-auth」行をコメントアウトまたは削除するにはどうすればよいですか?デフォルトのコンテンツは次のとおりです。

 ... 
 
#標準のUn * x認証。
 @ includecommon-auth 
 
 ... 

レンズのドキュメント はそれほど役に立ちません。私はAugeasを初めて使用しますが、パス式がどのように機能するかはまだよくわかりません。

具体的には、Dockerfileの一部としてaugtoolを使用してこれを実行しようとしています。私は素朴に次のコマンドを試しましたが、うまくいきませんでした:

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
Ates Goral

編集/削除するノードを見つけようとするときに行う最も重要なことは、augtoolのprintを使用してcurrentツリーを確認することです。コマンド:

$ 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]'

インデックス(1)をハードコーディングする代わりに、パス式を使用して値 "common-auth"に一致させ、正しい@includeエントリが存在する場合はそれを削除することができます。

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

.は、ノード(print出力の右側)のを意味します。 []内のすべてがパス式です。 Augeas wiki には、パス式に関する詳細情報がたくさんあります。

1
Dominic Cleal