![Как подтвердить пароль root в Linux из SSH root?](https://rvso.com/image/154443/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B4%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C%20root%20%D0%B2%20Linux%20%D0%B8%D0%B7%20SSH%20root%3F.png)
Как проверить пароль 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 снова)