У меня проблема со следующим манифестом 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
. Это также сделало бы тривиальным управление различными параметрами модуля.