В Linux пароль пользователя сохраняется в /etc/shadow
Файл, если вы посмотрите содержимое, он выглядит так:
root:$6$MksUWINOmX.9ZXyP$yjO8RvJj5i9.G/mOx7ZA3npdX05iv5Z07k3zI/02LMBjPE01e8hUlVhMNNpzRIWG1n0n6flWZGgW2T/LsZGRT0:17885:0:99999:7:::
Если мы разделим эту строку «:», мы получим несколько полей:
- корень
- 6 $ mksuwinomx.9zxyp $ yjo8rvjj5i … Zgrt0.
- …
Здесь мы просто сосредоточены на первых 2 полях: первое имя пользователя, второй хешированный пароль.
Hashed Password, 6 $ mksuwinomx.9zxyp $ yjo8rvjj5i ... Zgrt0
В этом случае содержится 3 части, формат:
$hash-method-id$salt$hashed-string
Так что в нашем случае, если мы отделили вышеуказанную строку «$»:
- 6 -> Хеш-метод I d
- Mksuwinomx.9zxyp -> Соль
- yjo8rvjj5i … Zgrt0 -> hahhed-string
6 – идентификатор хэша, Linux поддерживает несколько хеш-методов:
- 1: MD5.
- 2a: Blowfish (не в главной Glibc; добавлено в некоторые распределения Linux)
- 5: SHA-256 (поскольку Glibc 2.7)
- 6: SHA-512 (поскольку Glibc 2.7)
Итак, в нашем примере, теперь мы знаем Linux Hashed наш пароль с солью с алгоритмом SHA-512, а затем сохранить его в /etc/shadow
файл.
Убедитесь с Python
У Питона есть Крипта
Библиотека для этого хеширования.
Для генерации случайной соли для метода хеширования SHA-512:
>>> import crypt >>> crypt.mksalt(crypt.METHOD_SHA512) '$6$nPDcj0JFDC76QDxe' >>> crypt.mksalt(crypt.METHOD_SHA512) '$6$z5XUE0nOLtk8uTEn' >>> crypt.mksalt(crypt.METHOD_SHA512) '$6$Qu6XnlFT16QUTfiQ'
Чтобы проверить Hashed Password в нашем примере, мы можем использовать Crypt.crypt
Для расчета хэшированного значения для нашего простого пароля с солью (myLoginpwd »- мой простой пароль здесь):
>>> import crypt >>> crypt.crypt("myloginpwd", "$6$MksUWINOmX.9ZXyP") '$6$MksUWINOmX.9ZXyP$yjO8RvJj5i9.G/mOx7ZA3npdX05iv5Z07k3zI/02LMBjPE01e8hUlVhMNNpzRIWG1n0n6flWZGgW2T/LsZGRT0'
Мы видим, что эта хэшированная строка такая же, как тот, который сохранен в /etc/shadow
файл.
Ссылка
Оригинал: “https://dev.to/0xbf/how-linux-stores-user-s-password-linux-tips-nm5”