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

Изменить пароли для всех пользователей на сервере Linux

У меня есть 10 серверов Linux, которые мне нужно заблокировать, сбросив пароли для каждого пользователя сразу. За этим стоит длинная история, но общая идея заключается в том, что мне нужно, чтобы это произошло очень быстро в определенное время. Я собираюсь использовать один надежный пароль для всех учетных записей пользователей (только на начальном этапе), поэтому его не нужно читать из файла паролей или чего-то подобного.

Так что мне нужен лучший способ написать это, чтобы я мог сбросить все пароли сразу. Я могу извлечь список учетных записей пользователей с cat /etc/passwd | cut -f1 -d: , но в итоге включаются все учетные записи, в том числе системные, с которыми, как я полагаю, не стоит связываться.

Так какой же мой лучший вариант здесь?

НОТА! При сбросе паролей вам также необходимо стереть все лишнее с ~/.ssh/authorized_keys файл. Я не вспомнил об этом до тех пор, пока не стал - к счастью, я в значительной степени заблокировал серверы плотно, и в authorized_keys не было ничего, кроме материала server-to-server.

Вы можете выбрать UID> = 500, чтобы убедиться, что вы получаете только реальных пользователей, а не системные учетные записи, а затем использовать параметр --stdin в passwd, чтобы изменить пароль.

Примерно так должно работать:

 while IFS=: read u x nn rest; do  if [ $nn -ge 500 ]; then echo "YOURSTRONGPASSWORD" |passwd --stdin $u; fi  done < /etc/passwd

Вы можете использовать что-то вроде команды «newusers» для обновления паролей пользователей в пакетном режиме. Создайте файл, содержащий комбинации пользователь: пароль, и загрузите его через newusers ... Пароль вводится в незашифрованном виде, но при этом будет зашифрован.

newusers userpass.txt

userpass.txt будет выглядеть как файл / etc / passwd. Тот же формат.

Я бы скопировал / etc / passwd в новый файл, удалил строки системных учетных записей и заменил второе поле «x» общим паролем, который вы хотите использовать, а затем повторно импортировал бы с помощью команды newusers.

Отредактируйте теневую БД с помощью:

vipw -s

который также заблокирует файл от обновлений, а затем используйте свой текстовый редактор, чтобы заменить второе поле каждой строки, в которой есть поле pw.

Например, используйте:

$ openssl rand -base64 12
gw9H5sqr8YioMdwd
$ openssl passwd -1
Password: 
Verifying - Password: 
$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0

а затем от имени пользователя root используйте vipw -s; предполагая, что ваш текст $ EDITOR / $ VISUAL равен vi (m), тогда vipw сбросит вас туда, и вы можете сделать:

:g/^[^:]*:[^*!:][^:]*:/s,:[^:]*,:$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0:,

который является базовым сопоставлением с шаблоном, и в строках, соответствующих этому шаблону, выполните замену (только один раз в строке). При совпадении с шаблоном исключаются строки с полем пароля '!' или '*', поэтому пароли устанавливаются только для пользователей, у которых уже установлены пароли, независимо от того, какой uid; это защитит вас от случаев, когда система упаковки создает «системную» учетную запись с высоким uid, или от любой другой чепухи, которую произвел какой-нибудь упаковщик.

Обратите внимание, что это также сбросит пароль root. Если вы хотите исключить это, а корень находится в первой строке, замените начальное: g на: 2, $ g