Назад | Перейти на главную страницу

Конфигурация марионетки с использованием augeas не работает при сочетании с уведомлением

У меня проблема со следующим манифестом Puppet, который предназначен для включения passwdqc pam-модуль в системе RHEL-6 (используется Puppet 0.25.5 и 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,
}

Если я запустил этот манифест, он, похоже, завершится успешно:

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

Есть идеи, что здесь происходит? Очевидно марионеточный верит что изменение вносится в первый раз, но фактически не сохраняется на диск. У нас есть другие конфигурации, использующие операции augeas и notify, которые работают нормально; мы не смогли понять, почему это не удается. Обратите внимание, что та же проблема существует, если я заменю notify на операции Augeas с subscribe на соответствующих exec определение.

Мой текущий план - собрать пакеты из более свежих версий puppet и augeas и посмотреть, исчезнет ли проблема волшебным образом.

ОБНОВИТЬ: freiheit указывает, что authconfig похоже, перезаписывает этот файл. Как ни странно, под CentOS 5 изменение /etc/sysconfig/authconfig а затем бег authconfig --updateall была совершенно правильная процедура. Это то, что мы фактически используем в нашем устаревшем Kickstart.

Итак, очевидно, что обновление RHEL6 сделало authconfig вести себя странно и бесполезно.

Частично ответ заключается в том, что поведение authconfig команда изменилась между RHEL5 и RHEL6. В RHEL6 вместо чтение /etc/sysconfig/authconfig а затем создание конфигурации, authconfig в RHEL6, кажется, анализирует каждый отдельный файл конфигурации, которым он управляет, а затем генерирует /etc/sysconfig/authconfig как запись текущего состояния.

Это означает, что нужно редактировать файлы конфигурации напрямую, если вы либо (а) пытаетесь избежать запуска authconfig или (б) пытается воспользоваться функциями, которые не поддерживаются 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". Он перезаписывает изменения, которые делает марионетка / августейший.

Если бы это был я, я бы справился с этим, выяснив, какие основные изменения вам нужны, и внес бы те, которые, как я считаю, /etc/pam.d/system-auth-ac. Это также сделало бы тривиальным управление различными параметрами модуля.