Поле PASSWD не только хэш SHA-512 пароля *
Это объясняется в crypt
manpage. Формат $id$salt$hash
, где id
определяет хеш-метод (1 для MD5, 2a для Blowfish, 5 для SHA-256, 6 для SHA-512), salt
определяет соль для использования с этим алгоритмом, а hash
определяет, какой результат должен быть.
Как видно из manpage, вы можете передать все $id$salt$
функции crypt
вместо salt
, и он будет автоматически использовать соответствующий алгоритм. Это не было бы слишком сложно сделать, скажем, ctypes
.
Во всяком случае, то, что вы делаете, - это почти наверняка плохая идея. Для доступа к /etc/shadow
вам нужно будет работать как root
, и вам нужно будет симулировать больше, чем просто проверку пароля, если вы действительно хотите проверить, что пользователь может войти в систему, и, конечно, вам нужно будет обрабатывать безопасный ввод и убедитесь, что вы не сохранили пароль в открытом тексте где-то и так далее. Это намного проще и безопаснее, просто дайте PAM выполнить эту работу за вас.
* Я считаю, что в теории, может быть-если он не начинается с $
это интерпретируется как некий унаследованной формат ... предположительно означает это интерпретируется как POSIX crypt
с использованием алгоритма DES.
Я не уверен, но, возможно, доступ к теневому файлу не требуется. Не можете ли вы использовать API своей операционной системы, чтобы попытаться войти в систему (как у вас есть имя пользователя и пароль)? Когда вы можете войти в систему, учетные данные являются хорошими, если нет, то это не так. – Hyperboreus
Кроме того, '/ etc/shadow' не может быть даже понятным для обычного пользователя. – abarnert