Как настроить linux, чтобы заставить новых пользователей менять свой пароль при первом входе в систему

11

Я пытаюсь настроить политику паролей пользователей на RHEL 6.6 и хочу, чтобы система попросила вновь созданных пользователей изменить первоначальный пароль при первом входе в систему.

Обратите внимание, что я попытался установить для переменной EXPIRE значение 0, а для параметра INACTIVE - значение -1 в / etc / default / useradd, но это привело к истечению срока действия новой учетной записи пользователя после создания. Вывод команды chage после создания пользователя с этими переменными:

 # chage -l foo
 Last password change                                : Feb 22, 2015
 Password expires                                    : May 23, 2015
 Password inactive                                   : never
 Account expires                                     : Feb 22, 2015
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Когда я пытаюсь войти в систему под именем пользователя foo, появляется сообщение «Срок действия вашей учетной записи истек. Пожалуйста, свяжитесь с системным администратором».

Но если я открою окно «Свойства пользователя», выберите вкладку «Информация о пароле» и установите флажок «Принудительно изменить пароль при следующем входе в систему», результатом будет то, что я ожидаю. Новому пользователю будет предложено сменить пароль. Вывод команды chage в этом случае будет:

 # chage -l foo2
 Last password change                                : password must be changed
 Password expires                                    : password must be changed
 Password inactive                                   : password must be changed
 Account expires                                     : never
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Когда я вхожу в систему под пользователем foo2, система просит меня сменить пароль.

Итак, есть ли способ настроить систему для настройки параметров учетной записи пользователя при создании, как во втором случае?

Upd

 cat /etc/default/useradd
 # useradd defaults file
 GROUP=100
 HOME=/home
 INACTIVE=-1
 EXPIRE=0
 SHELL=/bin/bash
 SKEL=/etc/skel
 CREATE_MAIL_SPOOL=yes

Даже если я прокомментирую НЕАКТИВНО или установлю положительное значение, срок действия учетной записи истек, но пароль отсутствует.

Также я настроил PAM на машине.

Upd 2

Я проверил это на машине с RHEL 6.2 и без конфигурации PAM. Эффект тот же.

Mike_Lychkov
источник
Вы должны попробовать использовать chage -d 0 {user-name}.
Хастур
Есть ли способ сделать это автоматически во время команды useradd, а не с помощью дополнительных команд или действий?
Mike_Lychkov
1
EXPIRE=0в /etc/default/useraddдолжен сделать работу. Я читал, что вы пытались. Можете ли вы добавить без комментариев строки /etc/default/useradd? Он заблокирован, даже если вы не укажете INACTIVE = -1, а другое значение или если вы прокомментируете эту строку? Можете ли вы указать, заблокированы ли учетные записи, даже если они созданы из командной строки. И, пожалуйста, если у вас есть другой вопрос, разместите его на отдельной странице, если он будет иметь разный ответ.
Hastur
1
Использование adduserпозволяет ввести chageкоманду /usr/local/sbin/adduser.local. Вы также можете установить поле возраста в / etc / shadow равным 0. useradd«утилита низкого уровня», предназначенная для использования в сочетании с другими командами.
mpez0

Ответы:

1

Поскольку вы спрашиваете о RHEL6, я посмотрел исходный код для useradd (который поставляется как часть пакета 'shadow'). В useradd.c есть функция new_spent, где она устанавливает новую запись теневого пароля. Там он решает проблему «истек срок действия пароля при создании» следующим образом:

if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;

Оооочень ... Если вы установите ноль, это делает его -1.

Авторы программы специально разработали код установки устаревания на 0, поэтому не имеет значения, если вы установите его на 0 в параметре / etc / default / useradd для EXPIRE. (Если бы я делал этот код, я бы посмотрел, установил ли пользователь пароль в команде, а затем разрешил истечь, но это был не я ...)

Кроме того, выше было предложено поместить скрипт в /usr/local/sbin/adduser.local для выполнения команды 'chage'. Это был хороший совет для системы Debian / Ubuntu, где useradd - это perl-скрипт, который действительно запускает этот файл, если он его находит, но на RHEL команда useradd - это двоичный код C.

Если бы я был вами и был полон решимости получить такое поведение на RHEL6 useradd, я бы получил SRPM для пакета shadow, закомментировал эти строки выше и выполнил rpmbuild для пакета и rockaway. Победа!

П. Хеффнер
источник
1

Почему бы не добавить это в скрипт?

passwd -e username

Если все, что вам нужно, это первый вход в систему, это будет работать. -eНемедленно истекает пароль учетной записи, поэтому при следующем входе пользователя вынужден обновить свой пароль? (см. man passwd)

tniles
источник
И если вы ищете решение для конкретного чейджа, возможно, попробуйте переключатель «-M / - maxdays» со значением «0». Я не очень знаком с chage, но со страницы руководства это выглядит разумно.
tniles
-1

Автоматический режим:

Обновите этот файл:

/etc/default/useradd

Этот файл содержит подробную информацию о том, какие настройки будут применены к новым пользователям, созданным в системе с помощью команды useradd.

Просто установите значение EXPIRE = 0 в этом файле, и после этого каждый раз, когда будет создаваться новый пользователь, он будет вынужден сменить пароль при следующем входе в систему.

Источник: GeekRide

Теперь редактировать этот файл в терминале было сложно. Поэтому я изменил права доступа к файлу на 777, используя:

chmod 777 /etc/default/useradd

и отредактировал его в grub.

(Благодаря Linux Command .)

Проверено в моей Ubuntu 12.04.5 VM.

Руководство:

Используйте следующий синтаксис, чтобы заставить пользователя изменить свой пароль при следующем входе в Linux:

# chage -d 0 {user-name}

В этом примере, чтобы заставить Тома изменить свой пароль при следующем входе в систему, введите:

# chage -d 0 tom

-d 0: установить количество дней с 1 января 1970 года, когда пароль последний раз менялся. Дата также может быть выражена в формате ГГГГ-ММ-ДД. Установив его на ноль, вы заставите пользователя сменить пароль при первом входе в систему.

Источник: nixCraft

Чистая копия-паста. Буквально. ;)
Проверено на моей Ubuntu 12.04.5 VM.

Варад Махашабде
источник
ОП хочет, чтобы это делалось автоматически во время команды useradd, если вы прочитали комментарии выше.
Безумный
Больше ничего комментировать не буду, но делать chmod -R 777 /это очень глупо!
PulseJet
@PulseJet да, я знаю, что в ретроспективе, и этот ответ был давным-давно, поэтому, пожалуйста, просто позвольте ему быть
Варад Махашабде
@VaradMahashabde, тогда я бы предложил удалить такие вещи из ваших ответов, так как они должны быть, по крайней мере, нормальными для следующего человека, который их читает.
PulseJet