У меня есть 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