Я создал пользователя и хочу зашифровать строку для этого пользователя из файла / etc / shadow. Как я могу это сделать
Хеширование пароля пользователя является односторонней операцией, вы можете хешировать пароль в виде простого текста и получить хеш.
Однако по заданному хешу вы не можете восстановить исходный пароль в виде обычного текста.
Также, если два пароля имеют одинаковый хэш, они одинаковы, но из-за засолка, разные хэши не гарантируют, что пароли разные.
При этом, чтобы увидеть хэш заданного пароля в виде простого текста, вы можете
sudo useradd test
), sudo passwd test
), /etc/shadow
(sudo grep test /etc/shadow
) sudo userdel test
)Лучше сделать это на автономном сервере, чтобы то короткое время, когда тестовый пользователь существует с известным или простым паролем, нельзя было использовать для взлома системы.
Есть несколько способов сделать это. Если у вас есть getent -
sudo getent shadow username | cut -f2 -d:
Если у вас нет getent, вы можете повлиять на то же самое с помощью grep
sudo grep "^username:" /etc/shadow | cut -f2 -d":"
Идея здесь состоит в том, чтобы использовать grep для получения требуемой строки, которая имеет эффект, аналогичный getent. "^" перед именем пользователя означает, что строка должна начинаться с имени пользователя. Знак ":" в конце - это разделитель полей. Это так, если у вас несколько похожих пользователей, только 1 будет соответствовать. (т.е. myusername и username4me не совпадают).
В glibc есть программа для этого:
getent shadow ironman
Выводит строку с разделителями, содержащую хешированный пароль. Требуется запуск с привилегиями. Работает, даже если пользователь находится не в файлах, а в чем-то вроде LDAP, согласно nsswitch.conf.
Помните, что хешированные пароли со временем могут быть взломаны. Измените любой пароль, хэш которого мог увидеть кто угодно, кроме установившего его пользователя и системных администраторов.