Я использую следующий пользовательский ресурс для создания unix
user, а затем установите начальный пароль для пользователя. Затем я выполнил команду exec с chage, чтобы заставить пользователя изменить свой пароль после его первого входа в систему. Манифест выглядит следующим образом
node 'node2.example.com','node3.example.com'{
user {
'askar':
ensure => 'present',
managehome => 'true',
comment => 'Laskar Home',
home => '/home/askar',
shell => '/bin/bash',
expiry => '2016-04-22',
password => '$1$T7iMiuVY$bVjrtyWV4diXBKlCgcDKT0',
password_min_age => '20',
password_max_age => '60',
}
exec {
'chage':
path => '/usr/bin/',
command => 'chage -d 0 askar',
}
}
Проблема с указанными выше манифестами заключается в том, что каждый раз, когда агент извлекает манифесты, пароль снова устанавливается на пароль по умолчанию, а затем пользователь вынужден изменить свой пароль.
Итак, чтобы избежать этого, я добавляю refreshonly
параметр следующим образом
exec {
'chage':
path => '/usr/bin/',
command => 'chage -d 0 askar',
subscribe => File['askar'],
refreshonly => true,
}
}
Затем я подтвердил, что после применения refreshonly
параметр,
пароль не меняется на пароль по умолчанию, а также chage
в exec
не выполняется. Но у меня было мало сомнений относительно того, как работает параметр refreshonly, и я не уверен, работает ли он у меня нормально.
1) Поскольку refreshonly
является exec
параметр, использующий его внутри exec
не вызовет chage -d 0 askar
выполнить, если нет изменений в user
ресурсные манифесты. Я здесь прав? Означает ли это также, что user
ресурс также не будет выполняться вместе с exec
из-за refreshonly
параметр, который означает, что пароль пользователя не будет установлен по умолчанию, который был определен в user
ресурс?
2) Пробовал менять password_min_age => '20' to password_min_age => '30',
теперь, поскольку это изменение в user
проявляется, я ожидаю, что exec
ресурс будет выполнен с chage
команда и пользователь будет вынужден изменить свой пароль. Но я не вижу этого изменения. Я неправильно понимаю здесь?
3) или как я определяю refreshonly
сам параметр неверен. Синтаксис должен был быть subscribe => User['askar'],
вместо того subscribe => File['askar'],
@Zama Вопрос: Учитывая вашу проблему, я столкнулся с той же проблемой, которую вы задали в своем пункте №: 3, когда при изменении каких-либо атрибутов в пользовательском ресурсе ресурс exec не выполняется, что, по нашему мнению, должно быть. Но проблема в том, что мы с вами сделали неправильную вещь, поместив ключ «уведомить / подписаться» в ресурс exec. Подумайте так: если в пользовательском ресурсе изменяются какие-либо атрибуты, он должен «уведомить» ресурс exec о своем выполнении. не так ли? а не наоборот. Посмотрите на мой манифест ниже:
user { "john" :
ensure => 'present',
uid => '502',
password => '$1$3uCLHGag$TVHLvE9T14XVSYoKA4YlH1' ,
managehome => 'true',
notify => EXEC['password change']
}
exec { 'password change' :
command => 'chage -d 0 john' ,
path => '/usr/bin',
refreshonly => 'true'
}
~ ~ Когда я меняю пароль на "$1$QmJsatk6$4B.7Ksj5D608SHb/qVscM0"
, затем он уведомляет ресурс exec о выполнении.
если мы поместим «notify» в ресурс exec, все, что вы измените в пользовательском ресурсе, ресурс exec не будет выполняться. Все зависит от того, где указать «уведомлять». Подсказки: ресурс, который вы ожидаете изменить, примените само уведомление. Надеюсь, это проясняет концепцию.
На ваш третий вопрос: посмотрите мой манифест.
Прохождение password
приписывать user
ресурс не требуется. Если вы не предоставите пароль, я считаю, что марионетка оставит его отключенным, но вам нужно будет проверить. Я знаю, что если вы не предоставите пароль, марионетка не изменит пароль существующей учетной записи.
У меня нет среды для тестирования, но я считаю, что у вас может быть пользовательский ресурс, который создает учетную запись без пароля, а затем имеет уведомление, которое уведомляет exec, который делает что-то вроде usermod -p '$1$T7iMiuVY$bVjrtyWV4diXBKlCgcDKT0'
или что-то.