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

Смена пароля root с помощью скрипта не выполняется, но сообщает об успехе

У меня есть проект, который требует, чтобы я создал сценарий / последовательность команд для изменения пароля root в установке CentOS 7.

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

В настоящее время я использую следующее и получаю сообщение об успехе:

[root@localhost]# echo -e ‘password\npassword’ | (passwd --stdin root)
Changing password for user root.
passwd: all authentication tokens updated successfully.

Однако на самом деле это не меняет пароль. При дальнейшем осмотре (установка пароля вручную) замечаю пароль password не проходит проверку словаря, но в конце сообщает об успехе:

[root@localhost]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.

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

Есть ли у кого-нибудь предложение попытаться проверить пароль перед его установкой или, желательно, получить ПОЛНЫЙ вывод из passwd ?

Когда используешь passwd --stdin вам нужно всего лишь один раз отправить пароль. Итак, правильная версия

echo password | passwd --stdin

Если ваш образец кода точен, то (а) у вас там есть умные кавычки, когда вам нужны прямые кавычки, и (б) пароль, вероятно, установлен на что-то вроде `password \ npassword '(возможно, с умными кавычками с обеих сторон).

Заставить вещи работать с passwd Команда впечатляет, поскольку она традиционно интерактивна, и ее сложно автоматизировать. (Да здравствует поколение gnu за то, что оно относительно безболезненно.) Но если вы занимаетесь автоматизацией, почему бы не использовать команды, более удобные для автоматизации, например chpasswd?

echo root:password | chpasswd

будет делать то, что вы делаете выше. И если вы хотите сделать 50 сразу, просто отправьте больше строк username:password.