Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムにおけるユーザー認証は、システムのセキュリティを担保する上で最も重要な要素の一つです。 パスワードの設定や管理がその基本ですが、より強固なセキュリティを必要とする環境では、単純なパスワード認証だけでは不十分となる場合があります。 この記事では、Linuxのユーザー認証の拡張機能に焦点を当て、Pluggable Authentication Modules (PAM) を活用したパスワードポリシーの強化や、多要素認証(2段階認証)の導入方法について解説します。 これにより、セキュリティリスクを低減し、より堅牢なシステムを構築するための知識を習得できます。
PAMは、Linuxにおける認証システムの柔軟性を高めるためのフレームワークです。
各アプリケーション(例:login
、sshd
、sudo
など)は、個別の認証方法を実装するのではなく、PAMモジュールを利用して認証を行います。
これにより、システム管理者は、認証の仕組みを変更したい場合、PAM設定ファイルを編集するだけで、アプリケーション側のコードを変更することなく認証ルールを柔軟にカスタマイズできます。
PAM設定ファイルは通常、/etc/pam.d/
ディレクトリに、サービス名と同じ名前で保存されています。
例えば、sshd
サービスの設定は /etc/pam.d/sshd
に、sudo
コマンドの設定は /etc/pam.d/sudo
にあります。
PAMの設定ファイルは、以下の4つの要素で構成される行の集合体です。
type control module-path module-arguments
type
: 認証の種類を指定します。代表的なものに、認証(auth
)、アカウント管理(account
)、セッション管理(session
)、パスワード管理(password
)があります。control
: 認証モジュールの成否が、全体の認証プロセスにどう影響するかを制御します。required
: 認証に失敗した場合でも、他のモジュールをすべて実行します。最終的に失敗と判断されます。requisite
: 認証に失敗した場合、その時点で認証プロセスを即座に失敗とします。sufficient
: 認証に成功した場合、他の同じタイプのモジュールをスキップし、成功と判断します。optional
: 成功・失敗が全体の認証結果に影響しません。module-path
: 使用するPAMモジュールのファイルパス(通常、/lib/security
や/lib64/security
以下)。module-arguments
: モジュールに渡すオプション引数。たとえば、/etc/pam.d/sudo
にある以下の設定行は、sudo
コマンドの認証にPAMモジュール pam_unix.so
を必須(required
)として使用し、ユーザーがパスワードを入力して認証する際に利用されます。
auth required pam_unix.so
pam_pwquality
モジュールパスワードの複雑性や有効期限を設定し、セキュリティを強化することは、不正アクセスを防ぐ上で非常に効果的です。
PAMのpam_pwquality
モジュールを利用することで、このポリシーをシステム全体に適用できます。
多くのディストリビューションでは、このモジュールが/etc/pam.d/common-password
(Debian系)や/etc/pam.d/system-auth
(RHEL系)などのファイルで管理されます。
pam_pwquality
の主なオプションオプション名 | 説明 |
---|---|
difok |
新しいパスワードに含めなければならない、旧パスワードとは異なる文字の数を設定します。デフォルトは2。 |
minlen |
パスワードの最小文字数を設定します。 |
lcredit |
小文字の最小文字数を設定します。 -1 は1文字以上、0 は0文字、-2 は2文字以上を意味します。負の値は「最低文字数」を、正の値は「最低文字数に満たない場合に、その不足分をminlenに加算する」ことを意味します。 |
ucredit |
大文字の最小文字数を設定します。 |
dcredit |
数字の最小文字数を設定します。 |
ocredit |
特殊文字の最小文字数を設定します。 |
badwords |
パスワードとして使用を禁止する単語のリストを指定します。 |
enforce_for_root |
root ユーザーにもこのポリシーを適用します。 |
pwquality.conf
/etc/security/pwquality.conf
ファイルを編集することで、システム全体のパスワードポリシーを定義できます。
# パスワードの最小文字数を12に設定
minlen = 12
# 大文字、小文字、数字、特殊文字をそれぞれ1文字以上要求
lcredit = -1
ucredit = -1
dcredit = -1
ocredit = -1
この設定は、ユーザーが passwd
コマンドでパスワードを変更する際に適用されます。
pam_pwhistory
モジュール)pam_pwquality
にはパスワード履歴を制限する機能はありません。パスワードの再利用を禁止するには、pam_pwhistory.so
モジュールを使用するのが推奨されます。これは /etc/pam.d/common-password
や /etc/pam.d/passwd
などのパスワード管理フェーズ(password
タイプ)の設定に記述します。
# /etc/pam.d/common-password など
password required pam_pwhistory.so remember=5 use_authtok
password required pam_unix.so use_authtok
この設定は、直近5回使用したパスワードの再利用を禁止します。
※パスワードの有効期限(定期変更の強制など)は pam_pwquality
ではなく、/etc/login.defs
の PASS_MAX_DAYS
などの設定や、chage
コマンドで管理します。
パスワードに加えて、ワンタイムパスワード(OTP)などの別の認証要素を追加することで、セキュリティを飛躍的に向上させることができます。pam_google_authenticator
モジュールを利用すると、Google AuthenticatorやMicrosoft Authenticatorといったモバイルアプリと連携した多要素認証を簡単に実現できます。
必要なパッケージのインストール
Ubuntu/Debian系: sudo apt install libpam-google-authenticator
RHEL/CentOS系: sudo dnf install epel-release; sudo dnf install google-authenticator
google-authenticator
コマンドの実行
各ユーザーが自身のワンタイムパスワードを設定するために、google-authenticator
コマンドを実行します。このコマンドを実行すると、QRコードとリカバリーコードが表示されます。ユーザーはQRコードをスマートフォンアプリでスキャンし、紐付けを行います。
$ google-authenticator
PAM設定ファイルの編集
ログイン認証に多要素認証を追加するには、/etc/pam.d/sshd
や /etc/pam.d/login
などの設定ファイルを編集します。通常、auth
タイプの行に pam_google_authenticator.so
モジュールを追加します。
# /etc/pam.d/sshd
auth required pam_unix.so no_warn try_first_pass
auth required pam_google_authenticator.so nullok
try_first_pass
は「前段で取得済みのパスワードがあればそれを使い、無ければ自分でプロンプトする」という意味です。nullok
: このオプションは、設定していないユーザー(~/.google_authenticator
ファイルが存在しないユーザー)でも、ワンタイムパスワードを要求しないようにします。SSHサーバーの設定変更
SSH経由のログインに多要素認証を適用する場合、/etc/ssh/sshd_config
ファイルも変更する必要があります。
# /etc/ssh/sshd_config
UsePAM yes
KbdInteractiveAuthentication yes # 旧: ChallengeResponseAuthentication
PasswordAuthentication no
# 例1: 鍵認証 + OTP(両方必須)
AuthenticationMethods publickey,keyboard-interactive:pam
# 例2: 鍵認証 または (パスワード+OTP) を許可
# AuthenticationMethods publickey keyboard-interactive:pam
KbdInteractiveAuthentication yes
: これを有効にすることで、SSHクライアントがワンタイムパスワードのような追加の認証情報を要求できるようになります。AuthenticationMethods
: この行は、SSHログインに許可する認証方法の組み合わせを定義します。カンマ,
で区切るとAND(両方必須)、スペース
で区切るとOR(どちらか)となります。重要なサーバーでパスワードとOTPの両方を必須としたい場合は、この設定をより詳細に検討し、追加の検証を行う必要があります。設定変更後、sshdサービスを再起動します。
$ sudo systemctl restart sshd
これで、多要素認証が有効になります。ユーザーがSSHでログインを試みると、まずパスワードが求められ、その後ワンタイムパスワードの入力を求められるようになります。設定変更後は、必ず別のセッションで再ログインを試みて正常に動作することを確認し、問題なければ旧セッションを閉じましょう。
PAM設定は、システムの認証の根幹に関わるため、設定ミスは致命的な問題に繋がります。特に、以下の点に注意して作業を進めることを強く推奨します。
※設定ミスによるロックアウト(特にSSHやsudoでroot権限も奪われるケース)を防ぐため、本番運用サーバーでは十分な注意が必要です。リモート作業中は特に慎重に進めてください。
pam_pwquality
モジュールを使ったパスワードポリシーの強化と、pam_google_authenticator
モジュールを使った多要素認証の導入手順を具体的に説明しました。
これらの機能を適切に設定することで、システムのセキュリティレベルを大幅に向上させることが可能です。
システム運用においては、単にサービスを起動するだけでなく、そのセキュリティをいかに堅牢にするかが重要になります。パスワードポリシーの定期的な見直しや、重要サーバーへの多要素認証の導入は、いまや必須の対策と言えるでしょう。
この記事が、あなたのLinuxシステム管理におけるセキュリティ強化の一助となれば幸いです。次回は、SSH公開鍵・証明書認証の高度活用について解説します。ご覧いただきありがとうございました。