Linuxの新規インストールと初期設定をしました。ところがPAMの設定が以前と状況が変わっており、戸惑いました。今回の投稿では、PAMの設定についてです。
私はソフトウェア開発には多くの場合はWindowsを使いますが、Linuxも使うこともあります。最近はWindows 10上のWSL / WLS2でLinuxを必要する多くのことができます。WSLはWindows Subsystem for Linuxの略で、Windows 10/11上から容易にLinuxを使うことができる仕組みです。
しかし、WSLではできないこともあり、その場合は、純粋なLinuxが必要となります。
Debian Linux
私はLinuxのディストリビューションとして、古くからDebian Linuxを利用しています。いままでは、かなり前に新規インストールしたDebian Linuxををアップグレードしながら使っていました。最終的にはDebian 10までアップグレードした状態で使っていました。
ただ、アップグレードしながら使っていると、最新のDebian Linuxでは新しい仕組みのモジュールに置き換わったのに、古い仕組みのモジュールがそのまま使われていることになります。
最新版のDebian 11 bullseyeが2021年8月14日にリリースされました。ちょうど良いタイミングであるため、古い仕組みのモジュールを一掃しようとDebian 11へはアップグレードではなく、新規インストールすることにしました。
Debian 11 bullseye の新規インストール
そこで、実際にDebian 11を新規インストールしてみました。Debian 11を新規インストールするのは容易でした。インストール時にいくつかの質問や選択肢があるので、それらを適切に入力していけば、インストールは問題なく完了します。
SSHのアカウントロックの設定
いままでDebian Linuxを使っていた時は、ほとんどがSSHでのリモートアクセスです。そのため、SSHのログオンアタックの脅威を小さくするために、SSHのログインのアカウントロックの設定をしていました。
以前は、このアカウントロックをPAMのpam_tally
モジュールを使って実現していました。
今回も同じようにpam_tally
を使って実現しようとしました。しかし、pam_tally
/ pam_tally2
のどちらも、Debian 11 bullseyeの標準のインストールでは利用できませんでした。
libpam-modules
Debianのパッケージを調べてみました。pamでパッケージを検索すると、2021年11月時点では以下のようにパッケージが見つかります。
pam ソースパッケージ
- stretch (libs): 1.1.8-3.6
バイナリパッケージ: libpam-cracklib, libpam-doc, libpam-modules, libpam-modules-bin, libpam-runtime, libpam0g, libpam0g-dev - buster (libs): 1.3.1-5
バイナリパッケージ: libpam-cracklib, libpam-doc, libpam-modules, libpam-modules-bin, libpam-runtime, libpam0g, libpam0g-dev - bullseye (libs): 1.4.0-9+deb11u1
バイナリパッケージ: libpam-cracklib, libpam-doc, libpam-modules, libpam-modules-bin, libpam-runtime, libpam0g, libpam0g-dev - bookworm (libs): 1.4.0-10
バイナリパッケージ: libpam-cracklib, libpam-doc, libpam-modules, libpam-modules-bin, libpam-runtime, libpam0g, libpam0g-dev - sid (libs): 1.4.0-10
バイナリパッケージ: libpam-cracklib, libpam-doc, libpam-modules, libpam-modules-bin, libpam-runtime, libpam0g, libpam0g-dev
この中のlibpam-modulesパッケージがPAM系のモジュールです。そこでこのlibpam-modulesパッケージに含まれているモジュールを確認しました。
Debian 10 buster
Debian 10 busterで使用されている amd64 アーキテクチャ用 libpam-modules
パッケージのファイル一覧から.soファイルだけを抽出すると以下の通りです。
/lib/x86_64-linux-gnu/security/pam_access.so /lib/x86_64-linux-gnu/security/pam_debug.so /lib/x86_64-linux-gnu/security/pam_deny.so /lib/x86_64-linux-gnu/security/pam_echo.so /lib/x86_64-linux-gnu/security/pam_env.so /lib/x86_64-linux-gnu/security/pam_exec.so /lib/x86_64-linux-gnu/security/pam_faildelay.so /lib/x86_64-linux-gnu/security/pam_filter.so /lib/x86_64-linux-gnu/security/pam_ftp.so /lib/x86_64-linux-gnu/security/pam_group.so /lib/x86_64-linux-gnu/security/pam_issue.so /lib/x86_64-linux-gnu/security/pam_keyinit.so /lib/x86_64-linux-gnu/security/pam_lastlog.so /lib/x86_64-linux-gnu/security/pam_limits.so /lib/x86_64-linux-gnu/security/pam_listfile.so /lib/x86_64-linux-gnu/security/pam_localuser.so /lib/x86_64-linux-gnu/security/pam_loginuid.so /lib/x86_64-linux-gnu/security/pam_mail.so /lib/x86_64-linux-gnu/security/pam_mkhomedir.so /lib/x86_64-linux-gnu/security/pam_motd.so /lib/x86_64-linux-gnu/security/pam_namespace.so /lib/x86_64-linux-gnu/security/pam_nologin.so /lib/x86_64-linux-gnu/security/pam_permit.so /lib/x86_64-linux-gnu/security/pam_pwhistory.so /lib/x86_64-linux-gnu/security/pam_rhosts.so /lib/x86_64-linux-gnu/security/pam_rootok.so /lib/x86_64-linux-gnu/security/pam_securetty.so /lib/x86_64-linux-gnu/security/pam_selinux.so /lib/x86_64-linux-gnu/security/pam_sepermit.so /lib/x86_64-linux-gnu/security/pam_shells.so /lib/x86_64-linux-gnu/security/pam_stress.so /lib/x86_64-linux-gnu/security/pam_succeed_if.so /lib/x86_64-linux-gnu/security/pam_tally.so /lib/x86_64-linux-gnu/security/pam_tally2.so /lib/x86_64-linux-gnu/security/pam_time.so /lib/x86_64-linux-gnu/security/pam_timestamp.so /lib/x86_64-linux-gnu/security/pam_tty_audit.so /lib/x86_64-linux-gnu/security/pam_umask.so /lib/x86_64-linux-gnu/security/pam_unix.so /lib/x86_64-linux-gnu/security/pam_userdb.so /lib/x86_64-linux-gnu/security/pam_warn.so /lib/x86_64-linux-gnu/security/pam_wheel.so /lib/x86_64-linux-gnu/security/pam_xauth.so
Debian 11 bullseye
Debian 11 bullseyeで使用されている amd64 アーキテクチャ用 libpam-modules
パッケージのファイル一覧から.soファイルだけを抽出すると以下の通りです。
/lib/x86_64-linux-gnu/security/pam_access.so /lib/x86_64-linux-gnu/security/pam_debug.so /lib/x86_64-linux-gnu/security/pam_deny.so /lib/x86_64-linux-gnu/security/pam_echo.so /lib/x86_64-linux-gnu/security/pam_env.so /lib/x86_64-linux-gnu/security/pam_exec.so /lib/x86_64-linux-gnu/security/pam_faildelay.so /lib/x86_64-linux-gnu/security/pam_faillock.so /lib/x86_64-linux-gnu/security/pam_filter.so /lib/x86_64-linux-gnu/security/pam_ftp.so /lib/x86_64-linux-gnu/security/pam_group.so /lib/x86_64-linux-gnu/security/pam_issue.so /lib/x86_64-linux-gnu/security/pam_keyinit.so /lib/x86_64-linux-gnu/security/pam_lastlog.so /lib/x86_64-linux-gnu/security/pam_limits.so /lib/x86_64-linux-gnu/security/pam_listfile.so /lib/x86_64-linux-gnu/security/pam_localuser.so /lib/x86_64-linux-gnu/security/pam_loginuid.so /lib/x86_64-linux-gnu/security/pam_mail.so /lib/x86_64-linux-gnu/security/pam_mkhomedir.so /lib/x86_64-linux-gnu/security/pam_motd.so /lib/x86_64-linux-gnu/security/pam_namespace.so /lib/x86_64-linux-gnu/security/pam_nologin.so /lib/x86_64-linux-gnu/security/pam_permit.so /lib/x86_64-linux-gnu/security/pam_pwhistory.so /lib/x86_64-linux-gnu/security/pam_rhosts.so /lib/x86_64-linux-gnu/security/pam_rootok.so /lib/x86_64-linux-gnu/security/pam_securetty.so /lib/x86_64-linux-gnu/security/pam_selinux.so /lib/x86_64-linux-gnu/security/pam_sepermit.so /lib/x86_64-linux-gnu/security/pam_setquota.so /lib/x86_64-linux-gnu/security/pam_shells.so /lib/x86_64-linux-gnu/security/pam_stress.so /lib/x86_64-linux-gnu/security/pam_succeed_if.so /lib/x86_64-linux-gnu/security/pam_time.so /lib/x86_64-linux-gnu/security/pam_timestamp.so /lib/x86_64-linux-gnu/security/pam_tty_audit.so /lib/x86_64-linux-gnu/security/pam_umask.so /lib/x86_64-linux-gnu/security/pam_unix.so /lib/x86_64-linux-gnu/security/pam_userdb.so /lib/x86_64-linux-gnu/security/pam_usertype.so /lib/x86_64-linux-gnu/security/pam_warn.so /lib/x86_64-linux-gnu/security/pam_wheel.so /lib/x86_64-linux-gnu/security/pam_xauth.so
pam_tally / pam_tally2 がpam_faillockに置き換わった
Debian 11 bullseyeからは、pam_tally / pam_tally2がなくなっています。その代わりに、pam_faillockが追加されています。今までpam_tally / pam_tally2 を使って実現していたことは、pam_faillockを使って実現する必要があるようです。
- Removed deprecated pam_tally and pam_tally2 modules, use pam_faillock instead.
非推奨のpam_tallyおよびpam_tally2モジュールを削除し、代わりにpam_faillockを使用するようにしました
と記載がありました。
またpam_tallyの作者(tmraz)も、かなり前からpam_faillockに移行すべきであることを主張していたようです。引用すると以下の通りです。
Comment (by tmraz):
[linux-pam] #62: merge pam_faillock
I already submitted pam_faillock a few years ago. I agree with you that it
should be included into Linux PAM and I really prefer not merging the code
with pam_tally[2] as the internal design is quite different. I’d prefer to
obsolete pam_tally and pam_tally2 altogether as their design is flawed.
コメント(tmrazさん):
数年前にすでにpam_faillockを提出しています。Linux PAMに含めるべきだという意見には賛成です。また、内部設計が全く異なるため、pam_tally[2]とコードをマージしないことを強く希望します。pam_tallyとpam_tally2は設計上の欠陥があるので、完全に廃止したほうがいいと思います。
pam_faillock への乗り換えは必須のようです。
少し調べてみたところpam_faillockモジュールの設定は、 pam_tally / pam_tally2 の設定とは違いがあるようです。
今回の投稿では、最新のDebian Linuxである Debian 11 bullseye では、pam_tally / pam_tally2がpam_faillockに置き換わっていたことを説明しました。次回の投稿では、pam_faillockモジュールを使ったアカウントロックのPAMの設定について説明しようと思います。
“PAMのpam_faillockとpam_tally” への1件の返信