業務にて、Linuxにおけるアカウントのパスワード等に関するアルゴリズムを調べる必要がありましたので、調査結果を以下に記載しています。
パスワード暗号化(ハッシュアルゴリズム)の調査
パスワードの暗号化(ハッシュ アルゴリズム)で何が使われているかは、/etc/shadows のパスワードフィールドの頭3文字を見れば分かります。最近のOSでは、「$6$」になっているかと思いますが、これはSHA512が使われている事を指します。
ちなみに、以下がハッシュアルゴリズムの見分け表です。
$1$ | MD5 | さらに昔に使われていたDES(56bitまで)よりも長いパスワードが使える |
$2$ | Blowfish | |
$5$ | SHA-256 | |
$6$ | SHA-512 |
では、実際にどこで設定されているのかを見ていきます。
設定場所
Linuxアカウント周りはPAM(Pluggable Authentication Modules)が使われています。
昔は「/etc/login.defs」でログインやパスワード関連の設定を行っていました。現在はlogin,passwd,suなどのプログラムはPAMに置き換わっています。現状も /etc/login.defs ファイルは使われていますが、PAMを使う部分は関係ありません。(もう少し整理が必要・・・)
PAMの設定ファイルは、/etc/pam.d/ディレクトリに置かれています。
# ls /etc/pam.d/ chfn login polkit-1 smartcard-auth-ac sudo chsh newrole remote smtp sudo-i config-util other run_init smtp.sendmail su-l crond passwd runuser sshd system-auth fingerprint-auth password-auth runuser-l ssh-keycat system-auth-ac fingerprint-auth-ac password-auth-ac smartcard-auth su #
アプリ毎、用途毎に設定ファイルが存在しています。では、実際に中身を見ていきたいと思います。
PAM設定ファイルの中身
/etc/pam.d/system-auth に基本的な設定が入っています。
設定の意味については、色々ググると出てきます。
password の個所で、sha512となっているので、この個所がパスワードのハッシュアルゴリズムを設定している事になるかと思います。(/etc/shadow で確認した $6$ になっていた部分が、実際に設定されている箇所がこの場所。)
以上で、一旦調べたかった事は裏が取れたので、終了とします。(PAM関連は奥が深いので、この投稿では深追いしない事にします。)
補足:関連ライブラリ
ライブラリは、/lib64/security/ ディレクトリに置かれている。以下のとおり、多数のファイルがある。
# ls /lib64/security/ pam_access.so pam_filter.so pam_nologin.so pam_time.so pam_cap.so pam_ftp.so pam_permit.so pam_timestamp.so pam_chroot.so pam_group.so pam_postgresok.so pam_tty_audit.so pam_ck_connector.so pam_issue.so pam_pwhistory.so pam_umask.so pam_console.so pam_keyinit.so pam_rhosts.so pam_unix_acct.so pam_cracklib.so pam_lastlog.so pam_rootok.so pam_unix_auth.so pam_debug.so pam_limits.so pam_securetty.so pam_unix_passwd.so pam_deny.so pam_listfile.so pam_selinux_permit.so pam_unix_session.so pam_echo.so pam_localuser.so pam_selinux.so pam_unix.so pam_env.so pam_loginuid.so pam_sepermit.so pam_userdb.so pam_exec.so pam_mail.so pam_shells.so pam_warn.so pam_faildelay.so pam_mkhomedir.so pam_stress.so pam_wheel.so pam_faillock.so pam_motd.so pam_succeed_if.so pam_xauth.so pam_filter pam_namespace.so pam_tally2.so #
かなり沢山あります。/etc/pam.d/の中のファイルで参照設定されています。