第19章 DHCPとPAM認証

LPIC-2 210.1〜210.2 相当

ネットワーク上のクライアント管理に関わる2つの技術、DHCPとPAMを扱います。LDAPクライアントとしての設定・OpenLDAPサーバーの構築は、新設した別章で扱います。

DHCP — IPアドレスの自動割り当て

DHCP(Dynamic Host Configuration Protocol)は、クライアントに自動的にIPアドレスなどのネットワーク情報を配布する仕組みです。ここでは、LPICの出題範囲でも中心となっているISC DHCP(isc-dhcp-server)を例に基本構文を扱います。

試験対策: ISC DHCPは開発元のISCによる積極的な開発・サポートがすでに終了しており、後継のKea DHCPへの移行が進んでいます(Debianの新しいバージョンではisc-dhcp-serverパッケージ自体が提供されなくなり、RHEL系でもKeaが標準になりつつあります)。LPIC試験の出題内容は現時点でも主にISC DHCPの設定構文(本章で扱うdhcpd.confの書式)を対象としているため、試験対策としては引き続きISC DHCPの構文を押さえておく必要がありますが、新規に構築する実務環境ではKeaの採用を検討するのが現在の一般的な流れです。
/etc/dhcp/dhcpd.conf(ISC DHCPの例)
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    option domain-name-servers 8.8.8.8;
}

host printer01 {
    hardware ethernet 00:11:22:33:44:55;
    fixed-address 192.168.1.50;
}

上の host ブロックのように、MACアドレスを指定して常に同じIPアドレスを割り当てる「静的割り当て(DHCPリザベーション)」も可能です。プリンタやサーバーなど、IPアドレスを固定したい機器に使われます。

$ sudo systemctl restart isc-dhcp-server   # 正常時は無出力
$ cat /var/lib/dhcp/dhcpd.leases   # 割り当て済みのリース情報を確認
lease 192.168.1.101 {
  starts 5 2026/08/21 09:00:00;
  ends 5 2026/08/21 17:00:00;
  hardware ethernet 08:00:27:aa:bb:cc;
  client-hostname "kosuke-laptop";
}

この行のこの値に注目: starts/endsが実際にそのIPアドレスを貸し出している期間で、hardware ethernet行のMACアドレスからどの機器に割り当てられたかを特定できます。同じIPアドレスに対して複数のleaseブロックが記録されている場合、時系列で一番下(最新)のものが現在有効なリース情報です。

DHCPの通信の流れ(DORA)

クライアントがIPアドレスを取得するまでの流れは、頭文字を取って「DORA」と呼ばれる4段階のやり取りで構成されます。

段階内容
DiscoverクライアントがブロードキャストでDHCPサーバーを探す
OfferDHCPサーバーが割り当て候補のIPアドレスなどを提示する
Requestクライアントが提示された内容を使うことを要求する
AckDHCPサーバーが割り当てを確定し、リース期間などを通知する

割り当てられたIPアドレスには有効期限(リース期間)があり、クライアントは期限の約半分が経過した時点で同じサーバーに更新(renew)を要求します。DHCPサーバーがダウンしていてリースが更新できないままリース期間が切れると、クライアントはIPアドレスを失い通信できなくなります。

DHCPリレーエージェント: DHCPの要求はブロードキャストのため、既定ではDHCPサーバーと同じネットワークセグメント内のクライアントにしか届きません。異なるサブネットのクライアントにサービスを提供したい場合は、各サブネットのルーター(またはDHCPリレーエージェント dhcrelay)が要求をDHCPサーバーへ中継するように設定します。

PAM — 認証の仕組みを差し替え可能にする

PAM(Pluggable Authentication Modules)は、「ログインを許可するかどうか」の判断ロジックを、アプリケーションごとに個別実装せず、共通の仕組みとして差し替え可能にする仕組みです。設定は /etc/pam.d/ 以下にサービスごとのファイルとして置かれます。

/etc/pam.d/sshd の一部
auth     required   pam_unix.so
account  required   pam_unix.so
password required   pam_unix.so
制御フラグ意味
required失敗しても後続のモジュールは実行するが、最終的には認証失敗とする
requisite失敗した時点で即座に認証失敗とする
sufficient成功すればその時点で認証成功とする(後続は評価不要)
optional成功・失敗のいずれも全体の結果には影響しない(他に有効なモジュールがない場合を除く)

PAMには「モジュールタイプ」もあり、auth(本人確認)、account(アカウントの有効性、有効期限など)、password(パスワード変更時の処理)、session(ログイン前後のセッション処理)の4種類に分かれます。同じモジュールでも、どのタイプとして呼ばれるかで役割が変わります。

アカウントロックアウトの例(/etc/pam.d/common-auth に追記)
auth required pam_tally2.so deny=5 unlock_time=600
# 5回連続でログインに失敗したアカウントを600秒間ロックする

PAMモジュールはリソース制限の設定にも使われます。pam_limits.so は、ユーザーが開けるファイル数やプロセス数の上限(ulimit相当)を /etc/security/limits.conf の記述に基づいて適用します。

/etc/security/limits.conf の例
@developers  soft  nofile  4096
@developers  hard  nofile  8192
# developersグループのユーザーが同時に開けるファイル数の上限をsoft/hardで指定
よくある間違い: PAMの設定ファイルを編集した直後にsshdなど別のセッションでログアウトしてしまうと、設定ミスがあった場合に誰もログインできなくなる恐れがあります。編集後は既存のログインセッションを維持したまま、別の端末やセッションで新規ログインを試して問題がないことを確認してから、元のセッションを閉じるのが安全な手順です。

pam_faillockによるアカウントロックアウト(現行の標準)

先ほど紹介したpam_tally2.soは、多くのディストリビューションですでに非推奨となっており、後継のpam_faillock.soに置き換えられています。RHEL系では8以降、Debian系でも比較的新しいバージョンでpam_faillockが標準的に使われます。設定の多くは/etc/security/faillock.confにまとめられ、pam.d側の記述はモジュールを3箇所で呼び出す形になります。

/etc/pam.d/system-auth(RHEL系の例。authselect管理下の場合は直接編集しない)
auth required pam_faillock.so preauth silent deny=5 unlock_time=600
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=600
auth sufficient pam_faillock.so authsucc

pam_faillockはauthタイプの中で3回呼び出されるのが特徴です。preauthは実際の認証を試みる前に、そのアカウントがすでにロックされていないか確認する呼び出しです。認証本体(pam_unix.soなど)の後、authfailは認証が失敗した場合に失敗カウントを記録するために、authsuccは認証が成功した場合に失敗カウントをリセットするために使われます。

$ sudo faillock --user alice          # aliceの失敗回数と履歴を確認
alice:
When                Type  Source                                             Valid
2026-08-21 09:12:03 RHOST 198.51.100.7                                          V
2026-08-21 09:12:10 RHOST 198.51.100.7                                          V
$ sudo faillock --user alice --reset  # aliceのロックを解除(正常時は無出力)

この行のこの値に注目: Source列に表示されるIPアドレスから、どこからの認証失敗が積み重なっているかが分かります。同一IPから短時間に複数回記録されている場合は、ブルートフォース攻撃を受けている可能性があります。--resetを実行すると失敗カウントがクリアされ、アカウントロックが解除されます。

試験対策: pam_tally2はすでに多くのディストリビューションで廃止・非推奨となっています。既存の設定例としてpam_tally2を見かけることはありますが、現行の環境ではpam_faillockが標準であることを押さえておきましょう。

pam_pwqualityによるパスワード強度の強制

ユーザーが弱いパスワード(辞書に載っている単語、短すぎる文字列など)を設定してしまうのを防ぐには、pam_pwquality.so(旧称pam_cracklib.so)を使います。設定は/etc/security/pwquality.confにまとめて記述するか、pam.d側に直接オプションを書きます。

/etc/pam.d/common-password(Debian系)または /etc/pam.d/system-auth(RHEL系)
password requisite pam_pwquality.so retry=3 minlen=10 dcredit=-1 ucredit=-1 ocredit=-1
オプション意味
minlenパスワードの最小文字数
dcredit数字に対する要件(負の値は「最低でもこの数だけ数字を含む」ことを要求)
ucredit大文字に対する同様の要件
ocredit記号(その他の文字)に対する同様の要件
retry要件を満たさない場合に再入力を許す回数

制御フラグにrequisiteを使っているのは、パスワード品質チェックに失敗した時点で以降のモジュール(実際のパスワード変更処理)を評価せず、即座に処理を打ち切るためです。

pam_listfileによるアクセス制御リスト

pam_listfile.soは、特定のファイルに列挙したユーザー・グループ単位で、サービスへのアクセスを明示的に許可・拒否するモジュールです。特定のサービスに対して「このユーザーだけは常にログインを拒否する」といった単純なブラックリスト/ホワイトリスト運用に向いています。

/etc/pam.d/sshd への追記
auth required pam_listfile.so item=user sense=deny file=/etc/ssh/denyusers onerr=succeed

item=userはチェック対象がユーザー名であることを、sense=denyはファイルに列挙されたユーザーを拒否する意味を、onerr=succeedはファイルの読み込み自体に失敗した場合の既定の挙動(この場合は認証を継続させる)を指定します。TCP Wrappers(/etc/hosts.allow・/etc/hosts.deny)に似た発想ですが、pam_listfileはPAM対応の任意のサービスに横断的に使える点が異なります。

PAM設定を管理するディストリ側のツール

PAMの設定ファイルを直接手で編集する代わりに、ディストリビューションによっては専用の管理コマンドが用意されています。

ディストリ系統ツール役割
Debian/Ubuntu系pam-auth-updateインストール済みのPAMモジュール(pam_mkhomedirなど)を対話的に有効・無効化し、共通設定ファイル(common-authなど)に反映する
RHEL系(8以降)authselect「認証プロファイル」という単位でPAM設定を一括管理する。個々のファイルを直接編集すると、authselectの管理から外れて次回の切り替え時に上書きされる恐れがある
注意: authselectで管理されている環境では、/etc/pam.d/system-authなどを直接編集すると、authselectでプロファイルを切り替えた際に変更が失われます。カスタマイズを行う場合はauthselect create-profileで独自プロファイルを作成し、その中で調整するのが安全な手順です。

DHCPリレーエージェント

DHCPはブロードキャスト(同一ネットワーク内への一斉送信)を使う仕組みのため、本来はDHCPサーバーと同じネットワークセグメント内のクライアントにしか届きません。オフィスや拠点が複数のネットワークセグメントに分かれている場合、各セグメントにDHCPサーバーを個別に用意するのは管理上手間がかかります。この課題を解決するのがDHCPリレーエージェントで、あるセグメントに届いたDHCP要求を、別セグメントにある中央のDHCPサーバーへ中継する役割を果たします。多くのL3スイッチやルーターがこの機能を備えており、Linuxサーバーでもisc-dhcp-relayのようなパッケージで実現できます。

DHCPの固定割り当て(アドレス予約)

プリンタやNAS、監視カメラなど、常に同じIPアドレスであってほしい機器には、DHCPサーバー側で「このMACアドレスには常にこのIPアドレスを割り当てる」という予約設定を行うのが一般的です。クライアント側で静的IPを直接設定する方法と異なり、アドレス管理をDHCPサーバー側に一元化できるため、後からアドレス体系を見直す際にも変更箇所が少なく済むという利点があります。

/etc/dhcp/dhcpd.conf の一部
host printer01 {
    hardware ethernet 00:11:22:33:44:55;
    fixed-address 192.168.1.50;
}

設定変更後はsudo systemctl restart isc-dhcp-serverで反映し、対象機器側でDHCPの再取得(多くの場合は再起動やネットワークの再接続)を行うことで新しい割り当てが有効になります。

DHCPの主要なオプションとスコープ設定

dhcpd.confでは、サブネットごとに配布するネットワーク情報をoptionで細かく指定できます。

オプション内容
option subnet-maskサブネットマスク
option routersデフォルトゲートウェイのアドレス
option domain-nameクライアントに設定するドメイン名
option domain-name-serversDNSサーバーのアドレス(複数指定可)
option broadcast-addressブロードキャストアドレス
option ntp-serversNTPサーバーのアドレス
default-lease-timeクライアントが明示的に要求しなかった場合の既定のリース期間(秒)
max-lease-timeクライアントが要求できるリース期間の上限(秒)
/etc/dhcp/dhcpd.conf の一部
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    option domain-name "example.com";
    option domain-name-servers 192.168.1.1, 8.8.8.8;
    option ntp-servers 192.168.1.1;
}

グローバルスコープ(subnetブロックの外)に書いたoptionは全サブネット共通の既定値となり、サブネットブロックの中で同じoptionを指定すると、そのサブネットに限って値が上書きされます。

複数のネットワークセグメントを扱うshared-network

物理的に同じネットワークセグメント(同一のスイッチ配下など)に、異なるIPアドレス帯(サブネット)が複数割り当てられている環境(セカンダリアドレスを使う場合など)では、shared-networkブロックで複数のsubnet定義をまとめます。

/etc/dhcp/dhcpd.conf の一部
shared-network office-lan {
    subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200;
    }
    subnet 192.168.2.0 netmask 255.255.255.0 {
        range 192.168.2.100 192.168.2.200;
    }
}

shared-networkでまとめておくことで、DHCPサーバーは同じ物理セグメント上の複数のIPアドレス帯をまたいで、空いているアドレスをクライアントに割り当てられるようになります。

クライアント側のDHCP設定(dhclient.conf)

DHCPクライアント側の挙動も/etc/dhcp/dhclient.confでカスタマイズできます。サーバーから提示されたオプションのうち、どれを実際に適用するかを制御する場合に使います。

/etc/dhcp/dhclient.conf の一部
request subnet-mask, broadcast-address, routers, domain-name, domain-name-servers;
send host-name "client01";
require domain-name-servers;

requestはサーバーに求めるオプションの一覧、sendはクライアントからサーバーへ送る情報(この例ではホスト名)、requireは指定したオプションがサーバーから提示されなければリース自体を拒否する、より厳格な指定です。

DHCPv6の基礎

IPv6環境でのアドレス自動設定には、DHCPv6以外にRA(Router Advertisement、ルーターによるアドレスプレフィックスの広告)という仕組みもあり、両者は組み合わせて使われます。

方式特徴
ステートレス自動設定(SLAAC)+RAルーターが広告するプレフィックスをもとに、クライアントが自身でアドレスを生成する。DNSサーバーなどの追加情報は別途DHCPv6(ステートレスモード)で補うことが多い
DHCPv6(ステートフル)IPv4のDHCPと同様に、DHCPv6サーバーがアドレスを払い出し、リース状態を管理する
/etc/dhcp/dhcpd6.conf の例(ISC DHCPのIPv6版)
subnet6 2001:db8:1::/64 {
    range6 2001:db8:1::100 2001:db8:1::200;
    option dhcp6.name-servers 2001:db8:1::1;
}

RA広告でルーターの「Managed」フラグ(Mフラグ)が立っている場合、クライアントはSLAACではなくDHCPv6のステートフルモードでアドレスを取得しようとします。IPv6環境の切り分けでは、RAを広告しているルーター側の設定(radvdなど)とDHCPv6サーバー側の設定の両方を確認する必要がある点が、IPv4のDHCPとの大きな違いです。

確認クイズ

Q1. クライアントにIPアドレスなどのネットワーク情報を自動的に配布するプロトコルはどれですか?

解説: DHCP(Dynamic Host Configuration Protocol)は、IPアドレスなどのネットワーク設定情報をクライアントに自動配布する仕組みです。

Q2. PAMの役割として最も適切な説明はどれですか?

解説: PAM(Pluggable Authentication Modules)は、認証の仕組みをモジュールとして差し替え可能にする共通基盤です。

Q3. PAMの制御フラグのうち、失敗した時点で即座に認証失敗とするものはどれですか?

解説: requisiteは、そのモジュールが失敗した時点で即座に認証失敗として処理を打ち切ります。requiredは失敗しても後続のモジュールを継続評価します。

Q4. PAMでファイル数やプロセス数の上限を/etc/security/limits.confの記述に基づいて適用するモジュールはどれですか?

解説: pam_limits.soは、/etc/security/limits.confの記述に基づいてユーザーが利用できるリソースの上限(ulimit相当)を適用するモジュールです。

Q5. 多くのディストリビューションでpam_tally2.soの後継として使われている、アカウントロックアウト用のモジュールはどれですか?

解説: pam_tally2.soは非推奨となり、後継のpam_faillock.soに置き換えられています。RHEL系では8以降、標準的に使われています。

Q6. pam_faillock.soがpreauthで呼び出される目的として正しいものはどれですか?

解説: preauthは、認証本体を実行する前にアカウントがロック済みでないかを確認するための呼び出しです。

Q7. ロックされたアカウントの状態確認・解除に使うコマンドはどれですか?

解説: faillock --user ユーザー名で失敗回数や履歴を確認でき、--resetオプションでロックを解除できます。

Q8. pam_pwquality.soのオプションのうち、パスワードの最小文字数を指定するものはどれですか?

解説: minlenはパスワードの最小文字数を指定するオプションです。dcreditは数字の要件、retryは再入力の許容回数を指定します。

Q9. PAMの制御フラグにrequisiteを用いてpam_pwquality.soを呼び出す理由として適切なものはどれですか?

解説: requisiteは、そのモジュールが失敗した時点で即座に処理を打ち切る制御フラグで、弱いパスワードでの変更をその場で防ぐために使われます。

Q10. pam_listfile.soの用途として正しいものはどれですか?

解説: pam_listfile.soは、ファイルに列挙したユーザーやグループを対象に、サービスへのアクセスを許可・拒否するアクセス制御リストとして機能します。

Q11. RHEL系(8以降)でPAMの認証プロファイルを一括管理するツールはどれですか?

解説: authselectはRHEL系で認証プロファイルを一括管理するツールです。pam-auth-updateはDebian/Ubuntu系で使われる同様の役割のツールです。

Q12. dhcpd.confのdefault-lease-timeとmax-lease-timeの違いとして正しいものはどれですか?

解説: default-lease-timeは要求がなかった場合の既定値、max-lease-timeはクライアントが要求できるリース期間の上限を定める設定です。

Q13. dhcpd.confでshared-networkブロックを使う目的として適切なものはどれですか?

解説: shared-networkは、同じ物理セグメント上に複数のIPアドレス帯(サブネット)がある場合に、それらをまとめて1つのDHCPサーバーで扱うための設定です。

Q14. dhclient.confのrequireディレクティブの動作として正しいものはどれですか?

解説: requireは、指定したオプションがDHCPサーバーから提示されない場合、そのリースの利用自体を拒否する厳格な指定です。ホスト名の送信はsendディレクティブの役割です。

Q15. IPv6環境のアドレス自動設定において、ルーターのRA(Router Advertisement)でManaged(Mフラグ)が立っている場合の挙動として正しいものはどれですか?

解説: Mフラグが立っている場合、クライアントはSLAACではなくDHCPv6のステートフルモードでアドレスの割り当てを受けようとします。