Python, получить зашифрованный пароль пользователя из тени
Я пытаюсь получить зашифрованный пароль пользователя системы, чтобы сравнить его с другим зашифрованным sha512. Я пробовал pwd, но кажется, что этот модуль не имеет дело с паролями пользователей, или используемая система "слишком современна" для этого (сжатие debian). Вот что я получаю:
import pwd
username = 'root' #or another user
pwd_struct = pwd.getpwnam(username)
print pwd_struct
>>>pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')
где pw_passwd='x', а не строка sha512.
Предназначенный для использования этого с модулем шифрования python ( пример здесь), я получил исключение "Извините, в настоящее время нет поддержки теневых паролей", что является нормальным, так как мой pw_passwd = 'x'.
Есть ли другой правильный метод для получения хэшированных паролей, или я должен закрасить свой собственный парсер для /etc/shadow?
2 ответа
Попробуй модуль spwd
Платформы: Unix
Новое в версии 2.5.
Этот модуль обеспечивает доступ к базе данных теневых паролей Unix. Он доступен в различных версиях Unix.
У вас должно быть достаточно привилегий для доступа к базе данных теневых паролей (обычно это означает, что вы должны быть пользователем root).
Записи базы данных теневых паролей сообщаются как объект, похожий на кортеж, атрибуты которого соответствуют членам структуры spwd (см. Ниже поле "Атрибут"):
>>> import spwd
>>> spwd.getspnam('root')
spwd.struct_spwd(sp_nam='root', sp_pwd='!', sp_lstchg=15238, sp_min=0, sp_max=99999, sp_warn=7, sp_inact=-1, sp_expire=-1, sp_flag=-1)
Помните, вам нужно иметь разрешение на чтение /etc/shadow
чтобы это работало
Поиск в Google по терминам "python" и "shadow" возвращает библиотеку spwd в качестве первого результата.
Так как теневые пароли были введены, чтобы предотвратить грубую атаку обычного пользователя на атаку файла паролей, вы сможете получить доступ к теневым паролям только через учетную запись привилегированного пользователя, например root.