Die Puppenkonfiguration mit augeas schlägt fehl, wenn sie mit notify kombiniert wird

7

Ich habe ein Problem mit dem folgenden Puppet-Manifest, das das passwdqcPam-Modul auf einem RHEL-6-System aktivieren soll (dies verwendet Puppet 0.25.5 und Augeas 0.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,
}

Wenn ich dieses Manifest ausführe, scheint es erfolgreich abgeschlossen zu werden:

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

Wenn ich jedoch die Zieldatei untersuche, wurden die Änderungen nicht übernommen:

# egrep 'PASSWDQC|CRACKLIB' /etc/sysconfig/authconfig
USECRACKLIB=yes
USEPASSWDQC=no

Wenn ich die notify => ...Zeile aus dem Manifest entferne , funktioniert sie genau wie beabsichtigt. Das heißt, vorausgesetzt:

augeas { 'authconfig':
        context => '/files/etc/sysconfig/authconfig',
        changes => [
                'set USEPASSWDQC yes',
                'set USECRACKLIB no',
                ],
}

Die Änderungen werden erfolgreich gespeichert:

# 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

Irgendeine Idee, was hier los ist? Offensichtlich glaubt Puppet , dass die Änderung beim ersten Mal vorgenommen wird, aber sie wird nicht tatsächlich auf der Festplatte gespeichert. Wir haben andere Konfigurationen mit Augeas und benachrichtigen Vorgänge, die einwandfrei funktionieren. Wir konnten nicht herausfinden, warum dies fehlschlägt. Beachten Sie, dass das gleiche Problem besteht, wenn ich notifydie Augeas-Operation durch subscribedie entsprechende execDefinition ersetze .

Mein aktueller Plan ist es, Pakete aus neueren Versionen von Puppet und Augeas zu erstellen und zu sehen, ob das Problem auf magische Weise verschwinden wird.

UPDATE : freiheit weist darauf hin, dass authconfigdiese Datei anscheinend überschrieben wird. Seltsamerweise war unter CentOS 5 das Ändern /etc/sysconfig/authconfigund anschließende Ausführen authconfig --updateallgenau das richtige Verfahren. Dies ist, was wir tatsächlich in unserem alten Kickstart verwenden.

Anscheinend hat sich das RHEL6-Upgrade authconfigauf seltsame und nicht hilfreiche Weise verhalten.

Larsks
quelle

Antworten:

7

Ein Teil der Antwort ist, dass sich das Verhalten des authconfigBefehls zwischen RHEL5 und RHEL6 geändert hat. In RHEL6 wird in RHEL6 anstelle des Lesens /etc/sysconfig/authconfig und anschließenden Generierens der Konfiguration authconfigjede einzelne von ihm verwaltete Konfigurationsdatei analysiert und anschließend als Datensatz des aktuellen Status generiert /etc/sysconfig/authconfig .

Dies bedeutet, dass Konfigurationsdateien direkt bearbeitet werden müssen, wenn entweder (a) versucht wird, die Ausführung des authconfigBefehls zu vermeiden , oder (b) versucht wird, Funktionen zu nutzen, die in der authconfigBefehlszeile nicht unterstützt werden.

Am Ende habe ich das passwdqcPAM-Modul aktiviert :

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,
}

Wenn Sie diese Antwort lesen, würde ich gerne Ihre Kommentare dazu hören, ob dies eine vernünftige Art ist, mit Dingen umzugehen. Ich bin neu bei Puppet, also fühle ich mich immer noch so, wie die Dinge funktionieren.

Larsks
quelle
1

Der /usr/sbin/authconfig --updateallBefehl schreibt in / etc / sysconfig / authconfig - Sie können dies mit einem einfachen "ls -l" bestätigen. Es überschreibt die Änderungen, die Puppet / Augeas vornehmen.

Wenn ich es wäre, würde ich damit umgehen, indem ich herausfinde, was die zugrunde liegenden Änderungen sind, die Sie brauchen, und diejenigen vornehme, von denen ich glaube, dass sie alle dazu dienen /etc/pam.d/system-auth-ac. Das würde es auch trivial machen, die verschiedenen Parameter des Moduls zu steuern.

freiheit
quelle
Das ist frustrierend, weil Informationen an anderer Stelle ( bugzilla.redhat.com/show_bug.cgi?id=605857#c1 ) genau das Gegenteil nahelegten. Ich bin neu bei Puppet, aber es scheint nicht sehr gut darin zu sein, Änderungen an einer Datei vorzunehmen (außer bei Augeas), während es sehr gut darin ist, Dateien zu ersetzen. Dies macht es schwierig, diese Änderungen direkt vorzunehmen system-auth-ac, da ich nur diese eine Änderung vornehmen und alle anderen Benutzermodifikationen beibehalten möchte. Es wäre einfach mit sed. Aber so etwas versuchen wir zu vermeiden ...
Larsks
Hmmm, ich sehe, dass es ein Augeas "Objektiv" für Pam-Konfigurationsdateien gibt. Vielleicht kann ich das schaffen.
Larsks