次のPuppetマニフェストに問題があります。これは、RHEL-6システムでpasswdqc
pamモジュールを有効にすることを目的としています(これはPuppet0.25.5とaugeas0.7.2を使用しています)。
augeas { 'authconfig':
context => '/files/etc/sysconfig/authconfig',
changes => [
'set USEPASSWDQC yes',
'set USECRACKLIB no',
],
notify => Exec['authconfig-all'],
}
exec { 'authconfig-all':
command => '/usr/sbin/authconfig --updateall',
refreshonly => true,
}
このマニフェストを実行すると、正常に完了したように見えます。
info: Applying configuration version '1311189237'
notice: //Augeas[authconfig]/returns: executed successfully
info: //Augeas[authconfig]: Scheduling refresh of Exec[authconfig-all]
notice: //Exec[authconfig-all]: Triggering 'refresh' from 1 dependencies
しかし、ターゲットファイルを調べても、変更は適用されていません。
# egrep 'PASSWDQC|CRACKLIB' /etc/sysconfig/authconfig
USECRACKLIB=yes
USEPASSWDQC=no
マニフェストからnotify => ...
行を削除すると、意図したとおりに機能します。つまり、これを考えると:
augeas { 'authconfig':
context => '/files/etc/sysconfig/authconfig',
changes => [
'set USEPASSWDQC yes',
'set USECRACKLIB no',
],
}
変更は正常に保存されます。
# puppet /path/to/manifest.pp
info: Applying configuration version '1311189502'
notice: //Augeas[authconfig]/returns: executed successfully
# egrep 'PASSWDQC|CRACKLIB' /etc/sysconfig/authconfig
USECRACKLIB=no
USEPASSWDQC=yes
ここで何が起こっているのか分かりますか?明らかに、puppetは、変更が最初に行われたと信じていますが、実際にはディスクに保存されていません。 augeasを使用する他の構成があり、正常に機能する操作を通知します。なぜこれが失敗しているのか理解できていません。 augeas操作のnotify
を対応するsubscribe
定義のexec
に置き換えると、同じ問題が発生することに注意してください。
私の現在の計画は、より新しいバージョンのpuppetとaugeasからパッケージを構築し、問題が魔法のように消えるかどうかを確認することです。
[〜#〜] update [〜#〜]:freiheitは、authconfig
がこのファイルを上書きしているように見えることを指摘しています。奇妙なことに、CentOS 5では、/etc/sysconfig/authconfig
を変更してからauthconfig --updateall
を実行するのが正確に正しい手順でした。これは、従来のキックスタートで実際に使用しているものです。
したがって、明らかにRHEL6のアップグレードにより、authconfig
が奇妙で役に立たない方法で動作するようになりました。
答えの一部は、authconfig
コマンドの動作がRHEL5とRHEL6の間で変更されたことです。 RHEL6では、reading/etc/sysconfig/authconfig
を生成してから構成を生成する代わりに、RHEL6のauthconfig
は、管理する個々の構成ファイルを解析してから生成/etc/sysconfig/authconfig
現在の状態の記録として。
つまり、(a)authconfig
コマンドの実行を回避しようとしている場合、または(b)authconfig
コマンドライン。
これは、私がpasswdqc
PAMモジュールを有効にすることになったものです。
augeas { 'pam_passwdqc':
context => '/files/etc/pam.d/system-auth-ac/',
changes => [
'rm *[module="pam_cracklib.so"]',
'ins 9999 before *[type="password"][module="pam_unix.so"]',
'set 9999/type password',
'set 9999/control requisite',
'set 9999/module pam_passwdqc.so',
'set 9999/argument enforce=everyone',
],
onlyif => 'match *[module="pam_passwdqc.so"] size == 0',
notify => Exec['authconfig-update-all'],
}
exec { 'authconfig-update-all':
command => '/usr/sbin/authconfig --updateall',
refreshonly => true,
}
この答えを読んでいることに気づいたら、これが物事を正しく処理する方法であるかどうかについてのコメントをお待ちしています。私はPuppetを初めて使用するので、物事の仕組みを今でも感じています。
_/usr/sbin/authconfig --updateall
_コマンドは/ etc/sysconfig/authconfigに書き込みます-これは単純な「ls-l」で確認できます。 puppet/augeasが行った変更を上書きしています。
私の場合は、必要な基本的な変更を把握し、それらを作成することでこれを処理します。これはすべて_/etc/pam.d/system-auth-ac
_にあると思います。それはまた、モジュールへのさまざまなパラメータを制御することを簡単にします。