PAMのpam_faillockとpam_tally

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 ソースパッケージ

この中の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を使って実現する必要があるようです。

実際にLinux-PAM 1.5.0のリリースノートにも

  • 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):
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は設計上の欠陥があるので、完全に廃止したほうがいいと思います。

[linux-pam] #62: merge pam_faillock

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件の返信

コメントを残す