web-dev-qa-db-ja.com

Augeasを使用したPAMの構成

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"

ここで何が欠けていますか?これらのコマンドは私が探しているノードを私に与えるべきではありませんか?

1
user7560

まず、リストする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プロバイダー があることを知りたいかもしれません。あなた自身の解決策。

1
ℝaphink

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']
0
user7560