Linux автоматическая смена пароля

Обновлено: 08.07.2024

у нас есть несколько серверов Red Hat linux в нашей ИТ-среде. Члены моей команды просят меня написать сценарий (предпочтительно сценарий оболочки), чтобы изменить пароль пользователя на каждом из них за один раз, используя SSH.

Я попытался найти решение, но многие из найденных скриптов используют Expect. Мы не ожидаем, установленный на наших серверах, и системные администраторы отказались позволить нам установить его. Кроме того, пользователи не имеют доступа root so passwd --stdin или chpasswd не может быть использован.

есть ли способ написать скрипт, чтобы пользователь мог запустить его и изменить пароль только своего пользователя на всех серверах в списке?

удаленным машинам не нужно ожидать установки. Вы можете установить expect на локальную рабочую станцию или виртуальную машину (virtualbox) или любой *Nix box и написать оболочку, которая вызывает это .ex (expect) скрипт (могут быть небольшие изменения от дистрибутива к дистрибутиву, это проверено на CentOS 5/6):

вам не нужен root-доступ, чтобы использовать passwd .

Это shoud работает просто отлично.

вы должны попробовать pssh (параллельный ssh одновременно).

основываясь на примере squashbuff, я попробовал следующее, что хорошо сработало для меня:

безопасность мудрая, может быть улучшена, чтобы принимать входные данные без эха на экран или сохранения открытого текста на диск.

другая возможность: измените его вручную на одном сервере. Получите зашифрованный пароль из /etc / shadow. Теперь сделайте что-нибудь вроде этого:

конечно, "encrypted_passwd" - это то, что вы получили из /etc/shadow, где вы вручную изменили пароль. И $HOST_LIST-это список хостов, на которых вы хотите изменить пароль. Это может быть создано просто с помощью:

или, возможно, с файлом (как предлагали другие):

где файл "host_list.txt " имеет список всех систем, в которых вы хотите изменить пароль.

Edit: если ваша версия passwd не поддерживает опцию-p, у вас может быть доступна программа "usermod". Пример выше остается тем же, просто замените "passwd" на "usermod".

кроме того, вы можете рассмотреть полезный инструмент pdsh, что упростило бы приведенный выше пример примерно так:

последний "gotcha", чтобы искать: зашифрованный пароль, вероятно, содержит символ знака доллара ('$') в качестве разделителя полей. Вероятно, вам придется избегать тех, кто находится в вашем цикле for или pdsh (т. е. "$" становится "\$").

установить sshpass на любом сервере, с которого вы хотите выполнить скрипт.

подготовьте текстовый файл, в котором вы должны передать детали, такие как Хоста, Имя Пользователя, пароль и порт. (По вашему требованию).

подготовьте файл сценария, используя ниже подробности.

альтернативой, которую вы можете представить своим коллегам, будет использование аутентификации без пароля. Они сгенерируют пару открытый / закрытый ключ и зарегистрируют свой открытый ключ в

/.ssh / authorized_keys файл на каждом из серверов, в которые они входят.

можете ли вы использовать Perl?

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

Если требуется несколько модулей Perl (Net::OpenSSH:: Parallel, ожидал и их зависимости), установленные на локальном компьютере, на котором запущен скрипт, но ничего на удаленных серверах, где пароль должен быть изменен.

Жизнь системного администратора не проста. Поддержка систем, безопасность сетевого контура, решение проблем - уследить за всем сложно. Пользовательские пароли – важный нюанс и их, безусловно, нужно менять с определенной периодичностью.

В статье расскажем, как автоматически заставлять пользователей Linux сменить их пароли.

СРОК ДЕЙСТВИЯ ПАРОЛЕЙ

Чтобы получить информацию о пользовательских паролях и о дате их окончания введите команду:

Будет выведена следующая информация:

  • Когда пароль был последний раз изменен;
  • Дата окончания действия пароля;
  • Сколько дней осталось до окончания действия пароля;
  • Когда учетная запись пользователя будет закончена (можно, пожалуйста, далее мы будем говорить « заэкспайрится »?)
  • Минимальное количество дней между итерацией смены пароля;
  • Максимальное количество дней между итерацией смены пароля;

ЗАСТАВЛЯЕМ ПОЛЬЗОВАТЕЛЯ МЕНЯТЬ ПАРОЛЬ КАЖДЫЕ 90 ДНЕЙ

Следующей командой вы можете поставить жесткое правило смены паролей:

Команду можно выполнить от root пользователя или от юзера с sudo правами. Проверить, что настройка установлена корректно, можно с помощью команды chage -l

СРОК ДЕЙСТВИЯ УЧЕТНОЙ ЗАПИСИ

Представьте, у вас есть два юзера: Иван и Петр. И доступ им нужно организовать на 2 дня, с момента сегодняшней даты (сегодня 29 ноября). Получается, создаем им пользователей:

Создаем пароли для них:

Как мы уже сказали, Иван и Петр уезжают через 2 дня. Соответственно, делаем для них следующую конфигурацию:

Если вы запустите команду chage -l , то увидите актуальную дату жизни аккаунта. Как только аккаунты Ивана и Петра заэкспайрятся, их можно будет удалить командой:

СКОЛЬКО ВРЕМЕНИ НА СМЕНУ ПАРОЛЯ?

Пароль Геннадия заэкспайрился (истек срок годности) в воскресение. Мы дадим Гене 5 дней, чтобы он зашел в свою учетную запись и сменил пароль. Если он этого не сделает, аккаунт будет заблокирован. Сделать это можно вот так:

Ну, а если Геннадий так и не сменит пароль и учетная запись заблокируется, удалить ее можно вот так:

ПРЕДУПРЕЖДЕНИЯ ДЛЯ ПОЛЬЗОВАТЕЛЕЙ

Вы – адекватный человек. И наверняка хотите, чтобы ваши юзеры были уведомлены о смене пароля заранее. Например, чтобы Геннадий узнал, что через 7 дней истекает срок годности его пароля, дайте следующую команду:

ЗАЩИЩАЕМСЯ ОТ ЧАСТОЙ СМЕНЫ ПАРОЛЕЙ

Вдруг в вашем штате завелся очень взволнованный безопасностью сотрудник, который меняет пароли каждый день? Такое. Чтобы сделать минимальное количество дней между сменой паролей в две недели (14 дней), можно указать следующую команду:

Сделали большой лимит и передумали? Не проблема – удалить ограничение в днях можно вот так:

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

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

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

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

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

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

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

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

3 ответа 3

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

Тааак . Если вы установите ноль, это делает его -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. Победа!

Меняем пароль в Linux

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

Для изменения паролей в Linux служит команда passwd. Команду можно выполнять без указания каких-либо параметров, либо явно указать имя пользователя, пароль которого вы хотите сменить (в данном случае требуются права суперпользователя). После чего вам нужно будет ввести текущий пароль, а затем дважды ввести новый пароль.

Меняем пароль текущего пользователя

Чтобы сменить пароль текущего пользователя выполните команду passwd без параметров:

После этого нужно будет ввести текущий пароль и нажать клавишу Enter, затем ввести новый пароль и снова нажать Enter и, наконец, еще раз ввести новый пароль и нажать Enter.

Обратите внимание на то, что когда вы вводите пароль, он не отображается на экране.

Это означает, что вы ввели очень простой (или короткий) пароль. В таком случае повторите команду passwd и введите более сложный пароль (как минимум длиной от 6 до 8 символов, пароль должен включать цифры, прописные и строчные символы). Чтобы избежать проверки пароля на сложность необходимо выполнять команду passwd через sudo (см. ниже).

Меняем пароль произвольного пользователя

Чтобы сменить пароль любого пользователя вам необходимо запускать программу passwd под пользователем root или через sudo. Например, чтобы сменить пароль пользователя с именем pingvinus необходимо выполнить:

В данном случае вам нужно будет ввести только новый пароль:

Здесь пароль не проверяется на сложность и можно задавать совсем простые и короткие пароли.

Дополнительная информация

Я рассмотрел два простых способа для быстрого изменения паролей пользователей. Получить полный список возможностей команды passwd можно, выполнив в терминале:

Читайте также: