Как подтвердить пароль root в Linux из SSH root?

Как подтвердить пароль root в Linux из SSH root?

Как проверить пароль root на удаленном компьютере?

У меня есть удаленные машины, к которым обычно обращаются через ssh root и другие пользователи. В целях безопасности у меня есть скрипт для периодической смены всех ключей и паролей пользователей с центрального сервера.

Для пользователей без прав root пароль обновляется следующим образом.

ssh -i a_priv_key root@ip "echo 'user:NEWPASS' | chpasswd"

И я проверяю, действительно ли что-то изменилось.

ssh -i b_priv_key user@ip "echo NEWPASS | sudo -S ls /root"

Однако если я хочу сделать то же самое с пользователем root, я застрял. Команда sudo -S ls /root всегда возвращает список с любым паролем, потому что мы только что подключились по ssh к удаленной машине как root.

А если мы подключимся по ssh как пользователь, sudo запросит пароль пользователя.

Я пытался что-то сделать с помощью su user && su root, потому что заметил, что он запрашивает пароль root, но не могу написать скрипт, как указано выше.

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

Я прочитал этот вопрос, но надеялся найти встроенный метод, позволяющий это сделать, а не писать специальное приложение, которое нужно устанавливать на удаленных машинах. Как проверить пароль в Linux?

решение1

Если настройка sudoна целевой машине является опцией, то вы можете настроить rootpwдля определенной команды, которая запрашивает sudoпароль root, а не пароль пользователя. Например, вы можете добавить следующую строку в файл /etc/sudoers.d/lsrootpw(и перезапустить sudoслужбу, если необходимо)

Defaults!/bin/ls        rootpw

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

ssh -i b_priv_key root@ip su user sudo -S ls /root <<< "NEWPASS"

NEWPASSкоторый будет идти в одну или другую сторону в зависимости от того, правильный ли пароль rootили нет. Этот тест потребует пользователя sudo на цели.

Или, если у вас есть команда Debian runuser, вы можете использовать nobodyследующее:

ssh -i b_priv_key root@ip runuser -u nobody -- sudo -S ls /root <<< "NEWPASS"

Это также должно последовательно давать два разных результата в зависимости от правильности пароля. В частности, правильный пароль приводит к жалобе на nobodyотсутствие в sudoersфайле. Хотя вы можете справиться с этим, добавив дополнительное объявление в /etc/sudoers.d/lsrootpw.

Конечно, в целом это не сильно отличается от наличия пользовательского приложения, поскольку требует установки чего-либо на целевом хосте(ах). В то же время, все это можно сделать с помощью последовательности из пяти удаленных команд (add lsrootpw, restart sudo, make the test, remove lsrootpwи restart sudo снова)

Связанный контент