Augeasを使用して、デフォルトのUbuntu14.04インストールで/etc/pam.dディレクトリ内のファイルを構成しようとしています。私の目標は、「nullok」または「nullok_secure」のいずれかの引数を持つすべてのノードを見つけて、それらの引数を構成から削除することです。これは最終的にPuppetによって実施されますが、現在、ローカルマシンでaugtoolを使用して構成を検討しています。
私が読んだすべてのことから、次の式は「nullok」と「nullok_secure」を持つノードを生成する必要があります。
augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok']
augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok_secure']
または、代わりに:
augtool print /files/etc/pam.d/*/*/argument[. = 'nullok']
augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']
残念ながら、これらは私をどこにも連れて行かず、私は私の人生のために、その理由を理解することができません。これは augtool print
私が知っている1つのファイルの引数があります(簡潔にするためにコメントは削除されています):
/files/etc/pam.d/common-auth
/files/etc/pam.d/common-auth/1
/files/etc/pam.d/common-auth/1/type = "auth"
/files/etc/pam.d/common-auth/1/control = "[success=2 default=ignore]"
/files/etc/pam.d/common-auth/1/module = "pam_unix.so"
/files/etc/pam.d/common-auth/1/argument = "nullok_secure"
/files/etc/pam.d/common-auth/2
/files/etc/pam.d/common-auth/2/type = "auth"
/files/etc/pam.d/common-auth/2/control = "[success=1 default=ignore]"
/files/etc/pam.d/common-auth/2/module = "pam_lsass.so"
/files/etc/pam.d/common-auth/2/argument = "try_first_pass"
/files/etc/pam.d/common-auth/3
/files/etc/pam.d/common-auth/3/type = "auth"
/files/etc/pam.d/common-auth/3/control = "requisite"
/files/etc/pam.d/common-auth/3/module = "pam_deny.so"
/files/etc/pam.d/common-auth/4
/files/etc/pam.d/common-auth/4/type = "auth"
/files/etc/pam.d/common-auth/4/control = "required"
/files/etc/pam.d/common-auth/4/module = "pam_permit.so"
/files/etc/pam.d/common-auth/5
/files/etc/pam.d/common-auth/5/type = "auth"
/files/etc/pam.d/common-auth/5/control = "optional"
/files/etc/pam.d/common-auth/5/module = "pam_cap.so"
ここで何が欠けていますか?これらのコマンドは私が探しているノードを私に与えるべきではありませんか?
まず、リストする2つの式は厳密には同等ではありません。
/files/etc/pam.d/*/*/argument[../argument = 'nullok']
argument
に設定された値を持つargument
兄弟ノード(またはそれ自体)を持つ/files/etc/pam.d
の下の2レベルのnullok
ノードを選択します。
/files/etc/pam.d/*/*/argument[. = 'nullok']
/files/etc/pam.d
の下の2レベルのargument
ノードを選択し、値をnullok
に設定します(ただし、兄弟が存在する場合は選択しません)。
今あなたが抱えている問題は、あなたが一致させようとしているargument
ノードが実際には2ではなく/files/etc/pam.d
の下の3レベルであるということです、したがって、別のレベルの/*
が必要になります。
レベルのカウントを回避する最も簡単な方法は、代わりに//
を使用して、任意のレベルで一致させることです。
/files/etc/pam.d//argument[.='nullok']
そうは言っても、私はあなたがそれで何をするつもりかわかりませんが、 PAMエントリを管理するためのAugeasベースのPuppetプロバイダー があることを知りたいかもしれません。あなた自身の解決策。
Augeas IRC部屋でいくつかの作業を行った後、私の問題は単に構文エラーであったようです。「augtoolprint」を直接(augtool>プロンプトにドロップせずに)使用する場合、パスは引用されます。意味、
augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']
動作しませんが:
augtool print '/files/etc/pam.d/*/*/argument[. = "nullok_secure"]'
正しい結果が得られます。また、augtoolプロンプトにドロップすると、引用符がなくてもコマンドは正しく機能します。
$ augtool
augtool> print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']