ネットワーククライアント管理
DHCP サーバーの設定
DHCP 概要
DHCP (Dynamic Host Configuration Protocol) は IP アドレスをホストに自動的に割り振るサービスである。 また、ネットマスク値や DNSドメイン名などのネットワーク情報も提供する。 ホストから要求があった際に未使用のアドレスを自動的に割り振る。 割り当てにはリース期間を設けてあり、リース期限を過ぎたものは回収される。
DHCP クライアントはブロードキャストによってサーバーを探す。 そのため、ネットワーク内の DHCP サーバーは通常 1 台だけ用意する。 異なるネットワークのクライアントにサービスを提供するためにはリクエストをサーバーに中継するリレーエージェントを用意する。
ISC (Internet Softweare Consotium) で Ted Lemon 氏が開発した ISC DHCP が広く普及している。 ISC DHCP では設定ファイル dhcpd.conf
にネットワークやアドレスプールなどの情報を記述する。 クライアントに割り当てた IP アドレスの情報は dhcpd.leases
ファイルで管理される。
dhcpd [オプション] [インタフェースのリスト]
引数で指定したインタフェースからのブロードキャストを待機する。 指定しない場合はすべてのインタフェースからのブロードキャストを待機する。 ログはファシリティ LOG_DAEMON で出力する。
割り当て IP アドレスの設定
1234 | subnet <ネットワークアドレス> netmask <ネットマスク値> { range [ dynamic-bootp ] <割り当て開始アドレス> [ 割り当て最終アドレス ]; default-lease-time <貸出期間>; } |
- subnet: 適用するネットワークを指定
- range: 割り当てるアドレス範囲を指定
- dynamic-bootp: DHCP クライアントと BOOTP クライアントの両方に割り当てる
- default-lease-time: IP アドレスの貸出期間を秒単位で指定 (デフォルト: 43200 秒)
固定割り当て
MAC アドレスで割り振る IP アドレスを固定的にする場合は次のように設定する。
host <クライアントホスト名> {
hardware <ハードウェアタイプ> <ハードウェアアドレス>;
fixed-address <IP アドレス>;
}
- hardware
- ハードウェアタイプ: MAC アドレスの場合は
ethernet
- ハードウェアアドレス: クライアントの MAC アドレスを指定
- ハードウェアタイプ: MAC アドレスの場合は
- fixed-address: IP アドレスを指定
hardware ディレクティブで MAC アドレスが指定されたホストは known-clients として認識される。 それ以外のホストは unknown-clients となる。
主なオプション
オプションは subnnet 分内に記述した場合はそのネットワーク内に対する値となり、そうでない場合はすべてのネットワークが対象となる。
- option routers <IP アドレス>
- option subnet-mask <マスク値>
- option domain-name <DNS ドメイン名>
- option domain-name-servers <IP アドレス>
- option nisplus-domain <NIS ドメイン名>
- option nis-servers <IP アドレス>
DHCP クライアント
サーバーと同じく ISC の DHCP クライアントプログラムがある。
dhclient <オプション> <インタフェースのリスト>
引数で指定したインタフェースからブロードキャストで DHCP サーバーを探索する。
IPv6 アドレス自動割り当て
IPv6 アドレスの自動割り当てには次の 2 種類がある。
- Stateless 方式: RA (Router Advertisement) を利用する方法
- ホストはルーター宛にマルチキャストにより RS (Router Solicitation: ルータ要請) を送る
- RS を受け取ったルーター (radvd デーモン) はプレフィックスを含む RA をホストに送る
- RA を受け取ったホストは送られてきたプレフィックスと自身の MAC アドレスをもとに IP アドレスを生成して設定する
- Stateful 方式: DHCPv6 を利用する方法
- IPv4 とほぼ同様の方式でアドレスプールからクライアントに IP アドレスを割り当てる
設定ファイル dhcpd6.conf
- default-lesse-time: リース期間 (デフォルト: 2592000)
- subnet6: IPv6 サブネットの設定を記述
- range6: IPv6 アドレスのリース範囲を記述
固定割り当ての方法は IPv4 の時とほぼ同様である。 hardware ディレクティブの代わりに host-identifier ディレクティブで dhcp6.client-id に DUID (ホスト ID) を指定することも可能。
LDAP クライアントの設定
LDAP (Lightweight Directory Access Protocol) は X.500 Directory Access Protocol を軽量にしたプロトコルである。 LDAP によるディレクトリサービスではネットワーク上のホストやユーザー情報を階層構造により一元管理する。 OpenLDAP が広く使われている。
LDAP が持つ木構造のデータベースを DIT (Directory Information Tree) と呼ぶ。 また、構成要素はエントリーと呼ぶ。
- サーバープログラム
/usr/sbin/slapd
- クライアントプログラム
/usr/bin/ldapsearch
: LDAP データベースの検索/usr/bin/ldappasswd
: LDAP エントリーのパスワードを変更/usr/bin/ldapadd
: LDAP エントリーの追加/usr/bin/ldapmodify
: LDAP エントリーの変更
- 管理コマンド
- slapcat: LDAP データベースの表示
- slapadd: LDAP エントリーの追加
- slapindex: LDAP データベースのインデックスを再生成
エントリーの記載
各エントリーは dn (Distinguished Name) によって一意に識別される。 エントリーはルートエントリーの右端に、各エントリーをカンマで区切って記述する。 エントリーを構成するオブジェクトは LDIF (LDAP Data Interchange Format) のなかで次のような属性と値によって定義される。
- usertPassword の値、日本語の属性値、JPEG 画像は Base64 でエンコードされ、属性と値は「::」で区切る
- それ以外は UTF-8 でエンコードし、属性と値は「:」で区切る
- エントリーは空行で区切る
属性名 | 英語表記 | 説明 |
---|---|---|
cn | commonName | オブジェクトの名前 |
sn | surname | 個人の姓 |
dc | domainComponent | DNS ドメインの要素名 |
ou | organizationalUnitName | 組織単位名 |
uid userId | ログイン名 | |
userPassword | userPassword | ログインパスワード |
ldapsearch コマンド
LDAP サーバーにアクセスして指定した条件によってデータの検索を行う。
ldapsearch [-x] [-h LDAP サーバー名] [-D 認証ユーザー名] [-b 検索開始 dn] [検索条件] [表示属性名]
- -x: SASL 認証ではなく基本認証を使用する
- -h LDAP サーバー名: LDAP サーバーを指定する
- -D 認証ユーザー名: 認証ユーザー名を指定する
- -b 検索開始 dn: 検索開始 dn を指定する
- 検索条件: 検索条件を指定する
- =: 等しい
- *: 任意の文字列
- &: 論理積
- |: 論理和
- !| 否定
- 表示属性名: 検索したエントリーの指定した属性を表示
OpenLDAP サーバーの基本設定
OpenLDAP のサーバープログラムは slapd である。 設定ファイルは v2.2 までは /etc/openldap/slapd.conf
を参照する。 v2.3 以降では /etc/openldap/slapd.d/ldif
ファイルによって行われる。
- include: 引数で指定したファイルから追加の設定情報を読み込む
- database: LDAP データベースのタイプを指定する (bdb, config, dnssrv, hdb, ldap, ldif, mdb, mneta, monitor, null, passwd, perl, relay, shell, sql)
- suffix: LDAP データベース検索のサフィックスを指定する
- rootdn: アクセス制限を受けないデータベース管理者の DN を指定する
- rootpw: rootdn のパスワードを指定
- directory: LDAP データベースをおくディレクトリを指定する
v2.4 以降の場合は次のディレクトリが作成される。
- slapd.d ディレクトリ: LDIF 形式の設定ファイルが置かれる
- schema ディレクトリ: スキーマファイルが置かれる
slapd.d 起動時にコマンドオプション -Y EXTERNAL
を指定し、「ldapi:///」の指定で slapd の Unix ソケットに root 権限で接続すると slapd を稼働したまま各コマンドで重要な設定を変更できる。 その他通常のエントリーなどは ldapadd、ldapdelete、ldapmodify コマンドで稼働中に変更可能である。
設定データベースの属性名とオブジェクトクラスには olc (Open LDAP Configuration) のプレフィックスが付与される。 LDAP データベースはデフォルトでは /var/lib/ldap
配下に置かれる。 LDAP データベースには必要なスキーマを登録する。 olcAccess の dc、hdb のolcSuffix と olcRootDN は構築するシステムに合わせて変更する。
- dn.base (RootDN である Manager の dn) の値を変更
- Suffix の値を変更
- RootDN の値を変更
- RootPW (RootDN のパスワード) を新規に追加
- ldapmodufy コマンドで設定データベースを変更
認証データベースの中では v2.4 においては hdb (Hierarchical variant ob bdb backend) が推奨されている。 bdb を改良して階層型レイアウトにしたバックエンドである。 bdb は v2.3 までの推奨バックエンドである。
その他 config は設定データベースのバックエンド、monitor は slapd の自動的に更新される稼働状態を保持するバックエンドである。
スキーマ
LDAP においてはオブジェクトクラスと属性の定義のことである。 オブジェクトクラスは保持できる属性を定義する。 各エントリーは必ずオブジェクトクラスを 1 つい上含める必要がある。
オブジェクトクラスは継承によって定義することも可能。 継承した場合、親クラスの属性を全て含む。
core.schema は include が必須のスキーマファイルである。
ACL
access ディレクティブによってアクセス制御を定義する。 アクセス元の制御対象は複数指定可能である。 一致しなかった場合はすべてのアクセス対象の読み取りが可能となる。 また、管理者はアクセス制御の対象とはならない。
access to <what> [by <who> <access> <control>]
- what: アクセスの対象 (エントリー)
- who: アクセスの主体 (クライアント、ユーザー)
- access: アクセスの種類 (auth, read, write, none など)
- control: アクセスフロー制御 (stop, continue, break)
OID
OID (Object Identifier: オブジェクト識別子) は属性とオブジェクトクラスに対して割り当てるユニークな番号である。 グローバルで一位な番号であるため、独自の属性やオブジェクトクラスを公開する場合は IANA から OID を取得する必要がある。
OID | 組織 |
---|---|
0 | IU-T |
1 | ISO |
2 | Joint-ISO-ITU-T |
1.3.6.1 | Internet |
1.3.6.1.4.1 | Private Enterprises |
1.3.6.1.4.7165 | Samba Development Team |
1.3.6.1.4.30401 | Fedora Project |
エラー出力
- logfile ディレクティブでログファイルを指定する
- デフォルトでは標準エラー出力のみ
- loglevel ディレクティブでログレベルを指定する
- デフォルトではファシリティ local4、プライオリティ debug、デバッグレベル 256
デバッグレベル
デバッグレベル | 説明 |
---|---|
8 (0x08 conns) | コネクション管理 |
128 (0x80 ACL) | ACL 処理 |
256 (0x100 stats) | ステータス (コネクション、LDAP 操作、実行結果) |
ldappasswd コマンド
OpenLDAP に登録されているユーザーのパスワードを変更する。
ldappasswd [-x] [-h LDAP サーバー名] -D 認証ユーザー名 [-w 認証ユーザーパスワード] -s 新パスワード パスワードを変更するユーザー名
PAM の設定
PAM (Pluggable Authentivation Modules) はアプリケーションでユーザー認証を行う仕組みである。 個々のアプリケーションから独立した認証気候であり、アプリ側からは共有ライブラリの libpam.so
を呼び出すことで PAM の認証を利用できる。
認証方式によって必要なモジュールを読み込むことで選択できる。 設定ファイルは /etc/pam.conf
ファイルあるいは /etc/pam.d
ディレクトリ配下のファイルが参照される。 両方ある場合は /etc/pam.conf
は無視される。 /etc/pam.d
ディレクトリ配下にはここのサービスに対応したファイルが配置され、一致しないサービスは other ファイルが適用される。
PAM モジュール
多くのディストリビューションでは次のいずれかのディレクトリに配置される。
/lib/security
/lib64/security
設定ファイル
タイプ 制御フラグ モジュール 引数
タイプ | 説明 |
---|---|
auth | ユーザー認証を行う |
account | アカウントのチェックを行う |
password | パスワードの設定を行う |
session | ロギングを含む認証の処理を行う |
制御フラグによってモジュールの実行結果をどう処理するかを指定する。
制御フラグ | 説明 |
---|---|
required | 「success」が必須となる。「success」となった場合は同じタイプの次のモジュールを実行する。「fail」の場合も同じタイプのモジュールの実行を継続する |
requisite | 「success」が必須となる。「success」となった場合は同じタイプの次のモジュールを実行する。「fail」の場合は同じタイプのモジュールの実行はしない |
sufficient | それ以前の required モジュールが「success」で、このモジュールが「success」の場合は「success」となる。「fail」の場合は次のモジュールを実行する |
optional | 同じタイプのモジュールが他にないか、同じタイプの他のモジュール結果がすべて「ignore」となっている場合の処理結果を定義する |
include | 第 3 フィールドで指定したファイルをインクルードする |
主なモジュールには次のようなものがある。 モジュールに引数を付加することで処理や動作を指定できる。
モジュール | 説明 |
---|---|
pma_unix.so | /etc/passwd と /etc/shadow による UNIX 認証を行う |
pam_ldap.so | LDAP 認証を行う |
pam_rootok.so | root ユーザーのアクセスを許可する |
pam_securetty.so | /etc/securetty ファイルに登録されたデバイスからのアクセスだけを許可する |
pam_nologin.so | /etc/nologin ファイルが存在する場合は root 以外のユーザーのログインを拒否する |
pam_wheel.so | ユーザーが wheel グループに所属しているかチェックする |
pam_cracklib.so | パスワードの安全性をチェックする |
pam_limits.so | ユーザーセッションのシステムリソースを制限する |
pam_listfile | パスで指定した任意のファイルの内容によって許可あるいは拒否をする |
pam_permit.so | アクセスをすべて許可する |
pam_deny.so | アクセスをすべて拒否する |
pam_access.so | ログインユーザーの制御を行う |
pam_env.so | 環境変数の設定と削除を行う |
コメント