Linuxのユーザのパスワードを保存する方法


Linuxでは、ユーザのパスワードは/etc/shadow ファイルを見てください.
root:$6$MksUWINOmX.9ZXyP$yjO8RvJj5i9.G/mOx7ZA3npdX05iv5Z07k3zI/02LMBjPE01e8hUlVhMNNpzRIWG1n0n6flWZGgW2T/LsZGRT0:17885:0:99999:7:::
この文字列を":"で割ると、いくつかのフィールドが得られます:
  • $6 $ mksuwinomx.9 zxyp $ yjo 8 rvjj 5 i i .ZGRT 0
  • ...
  • ここでは、最初の2つのフィールドに焦点を当てる:最初の1つのユーザー名、2番目のハッシュされたパスワードです.
    ハッシュされたパスワード$6$MksUWINOmX.9ZXyP$yjO8RvJj5i...ZGRT0 この場合、3つの部分があります.
    $hash-method-id$salt$hashed-string
    
    このような場合、上記の文字列を"$"で区切った場合、
  • 6 ->ハッシュメソッドID
  • mksuwinomx.9 zxyp ->塩
  • yjo 8 rvjj 5 i .zgrt 0 ->ハッシュ文字列
  • 6ハッシュメソッドIDは、Linuxは複数のハッシュメソッドをサポートしています.
  • 1 : MD 5
  • 2 A : Blowfish (主流glibcではありません;いくつかのLinuxディストリビューションで追加されました)
  • 5 : SHA - 256 ( glibc 2.7以降)
  • 6 : SHA - 512 ( glibc 2.7以降)
  • ですから、私たちの例では、LinuxがSHA - 512アルゴリズムで塩を使ってパスワードをハッシュしていることを知っています/etc/shadow ファイル.

    Pythonで確認する
    Pythonにはcrypt このハッシングのためのライブラリ.
    ハッシュメソッドSHA - 512にランダムなsaltを生成するには、次の手順に従います.
    >>> import crypt
    >>> crypt.mksalt(crypt.METHOD_SHA512)
    '$6$nPDcj0JFDC76QDxe'
    >>> crypt.mksalt(crypt.METHOD_SHA512)
    '$6$z5XUE0nOLtk8uTEn'
    >>> crypt.mksalt(crypt.METHOD_SHA512)
    '$6$Qu6XnlFT16QUTfiQ'
    
    ハッシュのパスワードを確認するには、次のようにします.crypt.crypt saltを使用したプレーンパスワードのハッシュ値を計算するには、以下のようにします.
    >>> import crypt
    >>> crypt.crypt("myloginpwd", "$6$MksUWINOmX.9ZXyP")
    '$6$MksUWINOmX.9ZXyP$yjO8RvJj5i9.G/mOx7ZA3npdX05iv5Z07k3zI/02LMBjPE01e8hUlVhMNNpzRIWG1n0n6flWZGgW2T/LsZGRT0'
    
    このハッシュされた文字列は/etc/shadow ファイル.

    リファレンス
  • http://man7.org/linux/man-pages/man3/crypt.3.html

  • https://docs.python.org/3/library/crypt.html