- はじめに
MIRACLE LINUX Standard Edition V2.1 および Red Hat Linux Advanced Server 2.1 powered by MIRACLE では Samba 2.2.4 日本語版が採用されています。
Samba 2.2.4 日本語版でのさまざまな新機能の中で、Winbind 機能は従来のドメインメンバ (Security=DOMAIN) 機能を置き換える重要でかつ大変便利な機能です。
ここではこの Winbind 機能の利用方法を紹介します。
- Winbind 機能概要
Winbind は以下の機能を提供します。
- Linux と Windows の間の統一ログオン
Windows ドメイン内の(ドメインに参加した)すべてのマシンに対し、同じユーザアカウントとパスワードを使って Linux、Windows のログオンを統一可能にします。
Fig1. Winbind 機能
|
従来の Samba 2.0系でも Samba マシンを Windows ドメインに参加させることが可能でしたが、その場合はパスワードだけが Windows ドメインに認証されるだけで、各 Linux マシン上にユーザやグループの登録が別途必要でした。
そのため、Linux + Sambaのマシンが多くなるとユーザやグループの管理が面倒でした。
Winbind はこうした問題を解決しますが、以下の制限事項も残っています。
- winbind の制限事項
- ドメインコントローラを Windows NT4.0/2000にしないとドメインを構築することができない。
Sambaをドメインコントローラにすると winbind は利用できません。
- Windows の RID から UNIX の ID(uid、gid)へのマップは演算的に作られたものではなく、winbind が未登録とみなしたユーザーやグループから割り当てられます。
従って、ドメイン内のすべての Linux で uid、gid は同じになるとは限らないし、マップ情報を保持しているファイルが改ざんされたり,破壊されると RID から UNIX の ID へのマップを復旧することは困難です。
(NFSを使用する時、uid と gid が統一されないので問題となります)
- Linux の passwd コマンドでの Windows ドメインパスワードの変更はできません。
で可能なので
alias passwd = smbpasswd -r ドメインサーバ名 |
を一般ユーザの bash_profile に入れたり、SWAT によるパスワード変更をルール付けるといいでしょう。
- 現状の winbind の PAM モジュールは、ユーザ毎にログインできるワークステーションを制限することやログオン時間を制限する機能などを実現していません。
- 設定手順
Winbind の設定は以下の手順で行います。
- Samba インストール確認
- Winbind (smb.conf) の設定
- Windows ドメインに Samba マシンを登録
- マシン・アカウントの作成
- Winbind デーモンの起動と動作確認
- NSSWITCH (/etc/nsswitch.conf) の設定
- PAM (/etc/pam.d/system-auth) の設定
以下に順を追って説明します。
- Samba インストール確認
Winbind を利用するには、Samba 2.2.4 日本語版(もしくはこれより新しい版のもの)が必要です。
Samba がインストールされているかは以下のコマンドで確認します。
Samba のパッケージとバージョンが表示されればインストールされていることになります。
もし、インストールされていなければ、MIRACLE LINUX のインストール CD をマシンに挿入し、以下のコマンドでインストールします。
# mount /mnt/cdrom
# rpm -Uvh /mnt/cdrom/Miracle/RPMS/samba*.rpm
|
すでにインストールされている場合でも、以下の作業を行う前にSambaデーモンを停止させておく必要がありますので、以下のようにして停止しておいてください。
- Winbind (smb.conf) の設定
Winbind は従来の Samba の smbd や nmbd と異なるデーモンですが、設定ファイルは同じ /etc/samba/smb.conf を使用し、以下の項目を設定します。(下記以外のものは SWAT のドキュメント参照してください)
smb.conf パラメータ |
パラメータの意味 |
security |
Winbind を使用する時は必ず security=DOMAIN を指定します。 |
workgroup |
Windows PDC (Primary Domain Controler) *注1が持つドメイン名と同じ Windows ドメイン名を指定します。 |
password server |
Winodws PDC のホスト名を指定します。 DNS や /etc/hosts、WINS 等で名前解決できるようにしておきましょう。 同一セグメントに PDC が存在するか、WINS サーバが存在する場合は、*を指定することも可能です。 |
wins server |
WINS サーバの IP アドレスを指定します。 Windows PDC を WINS サーバとし、その IP アドレスを指定するのが望ましいです。 wins support=yes とするのは望ましくありません。 |
encrypt passwords |
Windows PDC は暗号化パスワードを使用するので、必ず Yes を指定します。 |
winbind separator |
Windows
ドメインとユーザ名のセパレータを指定します。 通常 Windows
ドメイン・ユーザは「ドメイン名¥ユーザ名」で表現され、デフォルトのセパレータは「¥」記号です。 しかし、UNIX のシェルの中で「¥」は特殊な意味を持つため、このセパレータを変更したいときに指定します。 代替としては、「/」などでも良いですがディレクトリのセパレータとなっているので不都合がでる場合もあります。「+」記号や「_(アンダーバー)」記号などが良いでしょう。
デフォルト) | winbind separator = \ | 使用例) | winbind separator = + |
|
winbind uid |
winbind が UNIX/Linux ユーザに割り当てる uid (ユーザID) の範囲を指定します。 /etc/passwd や NIS の中で使用されていない範囲を指定しなければなりません。
デフォルト) | winbind uid = なし | 使用例) | winbind uid = 10000-20000 |
|
winbind gid |
winbind が UNIX/Linux ユーザに割り当てる gid (グループID) の範囲を指定します。
/etc/groupや NIS の中で使用されていない範囲を指定しなければならなりません。
デフォルト) | winbind gid = なし | 使用例) | winbind gid = 10000-20000 |
|
winbind cache time |
winbind
デーモンがユーザ情報、グループ情報をキャッシュする時間を秒単位で指定します。
デフォルト) | winbind cache time = 15 |
|
winbind enum users |
大規模システムでのユーザ一覧取得を抑制するためのオプションです。
デフォルトは yes ですが、no にすると setpwent()、getpwent()、endpwent() のシステム関数で一覧が取得できなくなり、finger などの一部のプログラムが動作しなくなることがあります。
デフォルト) | winbind enum users = yes |
|
winbind enum groups |
大規模システムでのグループ一覧取得を抑制するためのオプションです。
デフォルトは yes ですが、no にすると setgrent()、getgrent()、 endgrent()
のシステム関数で一覧が取得できなくなり、一部のプログラムが動作しなくなる可能性があります。
デフォルト) | winbind enum groups = yes |
|
template homedir |
ユーザホームディレクトリを指定します。
デフォルト) | template homedir = /home/%D/%U |
これは、/home/ドメイン名/ユーザ名 を意味します。 |
template shell |
ユーザのデフォルト・シェルを指定します。
デフォルト) | template shell = /bin/false |
デフォルトでは、Linux にログインできないので、telnet や ssh を使用する場合は、template shell = /bin/bash
等を指定します。 |
*注1)Windows NT による NT ドメインには、PDC (Primary Domain Controler) と BDC (Backup Domain Controler) が存在しますが、Windows 2000 の Active Directory には PDC、BDC は存在せず DC (Domain Controler) のみとなります。
Fig.2 に smb.conf の設定を載せます。
なお Winbind を使用する場合、以下のパラメータは決して指定してはいけません。
domain logon = yes domain master = yes |
[global]
coding system = euc
client code page = 932
workgroup = MIRACLE
server string = Samba %v on %h
security = DOMAIN
encrypt passwords = Yes
password server = win2kdc
deadtime = 15
read size = 65536
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
lm announce = False
preferred master = False
local master = No
domain master = False
dns proxy = No
wins server = 192.168.0.1
winbind uid = 1000-1500
winbind gid = 2000-2500
template shell = /bin/bash
winbind separator = _
|
Fig2 smb.conf 設定例(重要な部分だけを抜粋しています)
|
- Windows NT4.0/2000 Serverでの設定
Windows NT4.0/2000 Server をドメインコントローラとして、ドメインを構築する必要があります。
(必要に応じてこのマシンをWINSサーバやDNSサーバとすると良いでしょう)
次に Windows ドメインのドメイン・コントローラである Windows NT4.0 /2000 Server上の "サーバマネージャ"(SRVMGR.EXE) を使って Samba マシンを Windows NT Workstaton として Windows ドメインに追加します。
(Windows2000ではスタート・メニューにないので「ファイル名を指定して実行」を使って起動します)
Fig3. サーバマネージャ
|
この時、Sambaマシンでなく、ドメインに参加するWindows NT/2000/XPマシンすべてを登録すると良いでしょう。
(Windows 95/98/Meは必要ない)
- Sambaマシンのトラスト・アカウントを作成
今度はドメインのメンバになるすべての Samba マシンの上で root ユーザになってドメイン参加のためのトラスト・アカウントを作成します。
参加する Windows ドメインの名前が DOMNAME , PDC(プライマリ・ドメイン・コントローラ) のコンピュータ名が DOMPDC の場合の方法は以下の通りです。
# smbpasswd -j DOMNAME -r DOMPDC
smbpasswd: Joined domain DOMAIN. |
事前に Samba サーバを停止させ、PDC の名前解決と ping ができるように確認しておきましょう。
(上記の例では ping DOMPDC がうまくいくことを確認)
ping がうまくいかない時は、PDC のコンピュータ名と IP アドレスを /etc/hosts
に記述するか、もしくは後述する LIBNSS_WINS を設定するのが良いでしょう。
- ネーム サービス スイッチの設定(/etc/nsswitch.conf)
該当マシンを Samba でしか利用しない場合(telnet や ftp で使用しない場合)は、NSSWITCH の設定だけ(PAM の設定無し)で Winbind は利用可能になります。
/etc/nsswitch.conf の中で以下の行を探し、変更します。
[変更前の例]
passwd: files nisplus nis
group: files nisplus nis
|
[変更後の例]
passwd: files winbind
group: files winbind
|
ネットワークが複数セグメントにまたがっている場合やマシン台数がある程度ある場合は、PDC(Primary Domain Controler)の Windows サーバを WINS サーバとして、すべての Linux/Windows マシンで LIBNSS_WINS を利用することを推奨します。
- 認証機構の設定(/etc/pam.d/system-auth)
該当マシンを Samba でだけでなく ssh や telnet、ftp でも使用する場合は、ローカルマシンの認証方法を指定するため、PAM の設定も必要です。
/etc/pam.d/system-auth を以下のように
auth
sufficient /lib/security/pam_winbind.so
と
account
sufficient /lib/security/pam_winbind.so
を追加して修正します。
ユーザホームを自動で作成したい場合は
session
required /lib/security/pam_mkhomedir.so
skel=/etc/skel umask=0022
も追加するといいでしょう。
#%PAM-1.0
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_winbind.so
auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so
account sufficient /lib/security/pam_winbind.so
password required /lib/security/pam_cracklib.so retry=3
password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow
password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
session required /lib/security/pam_mkhomedir.so skel=/etc/skel umask=0022
|
Fig4. /etc/pam.d/system-auth の設定例
|
- Winbind と Samba の起動
以上で設定は完了で各マシンで winbind デーモンと Samba プロセス(nmbd、smbd デーモン)を設定すれば完了です。
# service smb start
# service winbind start |
OS 起動時にデーモンが自動起動するように以下も設定しておきましょう。
# chkconfig smb on
# chkconfig winbind on |
もし、うまく起動できなければ、/var/log/samba/ にあるエラーログの内容を確認し、設定を修正しましょう。
- ユーザとグループの管理
Winbind を利用する場合は PDC となる Windows NT/2000 サーバにユーザを追加するだけで、Linux への telnet、ftp、ssh ログインも Samba へのファイル共有も同じパスワードでアクセス可能になります。
Windows NT4.0 サーバでのユーザ管理は「ドメインユーザマネージャ」(usrmgr.exe)で、Windows 2000 サーバでのユーザ管理は「Active Directory ユーザーとコンピュータ」で行います。
Fig5. Windows 2000 サーバの「Active Directory ユーザーとコンピュータ」
|
- Winbindの動作確認
wbinfo コマンドを使うと winbind から情報を取り出すことができ、winbind の設定がうまくいっているか確認できます。使用方法は以下の通りです。
[コマンドの文法]
wbinfo [-t] [-u] [-g] [-m]
[-h NETBIOS名]
[-i IPアドレス]
[-n ユーザ名/グループ名]
[-s セキュリティ識別子]
[-U ユーザID]
[-G グループID]
[-S セキュリティ識別子]
[-Y セキュリティ識別子]
[-r ユーザ名]
[-a ユーザ名%パスワード]
[-A ユーザ名%パスワード]
|
[引数の意味]
引数 |
引数の意味 |
-t |
Samba サーバが smbpasswd コマンドによって Windows NT ドメインに参加したときに作成されたマシン・アカウントが機能しているかテストする。 |
-u |
Windows NT ドメイン内で利用できる全ユーザをリストする。すべての信頼できるドメインのユーザもまた、リストされる。この操作では winbindd に見えないユーザの ID は取得できない。 |
-g |
Windows NT ドメイン内で利用できる全グループをリストする。すべての信頼できるドメインのグループもまた、リストされる。この操作では winbindd に見えないグループの ID は取得できない。 |
-m |
信頼されたドメインの一覧を表示する。
このリストには、サーバがプライマリドメインコントローラとなっている Windows NT ドメインは含まれない。 |
-n ユーザ名/グループ名 |
指定された名前に対応する SID (セキュリティ識別子)を問い合わせる。ドメイン名を winbindd の区切り文字を使ってユーザ名の前に付加することもできる。
例えば、CWDOM1/Administrator は ドメイン CWDOM1 の Administrator ユーザを問い合わせる。
ドメインに何も指定しなかったときには smb.conf の workgroup パラメータの値が使用される。 |
-s セキュリティ識別子 |
SID の名前解決に使用する。これは、 前に述べた -n オプションの逆の働きをする。
SID には Microsoft 形式での ASCII 文字列を指定しなければいけない。
例えば S-1-5-21-1455342024-3071081365-2475485837-500 である。 |
-U ユーザID |
UNIX/Linux のユーザ ID を Windows の SID への変換を試みる。
指定された uid が winbind での uid の範囲内でなければ、エラーとなる。 |
-G グループID |
UNIX/Linux のグループ ID を Windows の SID への変換を試みる。指定されたグループ ID が winbind での gid の範囲内でなければ、エラーとなる。 |
-S sid |
SID を UNIX/Linux のユーザ ID に変換する。
SID が winbindd のマップする UNIX/Linux のユーザに該当しない場合は、エラーとなる。 |
-Y sid |
SID を UNIX/Linux のグループ ID に変換する。
SID が winbindd のマップする UNIX/Linux のグループに該当しない場合は、エラーとなる。 |
-r ユーザ名 |
ドメインコントローラに定義されたユーザが所属するグループ ID 一覧を表示する。 |
-a ユーザ名%パスワード |
winbind 経由でユーザ名とパスワードの認証を試みて、そのプロトコルと結果を表示する。 |
-A ユーザ名%パスワード |
winbind 経由でユーザ名とパスワードをドメインコントローラに格納する。 |
Fig6. Wbinfo 実行例
|
- Windowsクライアントからの使用方法
ドメインに参加している Windows サーバを利用する方法と同じ方法で Samba マシンが利用できます。
- クライアントが Windows NT/2000/XP の場合は、Samba と同様にクライアントをドメインに参加させる設定をすること。
- ドメインサーバにドメインユーザを登録する。
- ドメインユーザが登録されていれば、Windows クライアントおよび Samba マシンにはユーザ登録は必要ない。
- ユーザホーム機能を使用する場合は、予めホームディレクトリを以下のように作成する必要がある。
ただし、Fig4 で説明した pam_mkhomedir.so を設定した場合は、Linux にログインした時に自動的にユーザホームが作成される。
ホームディレクトリ作成例)
ドメイン名が MIRACLE、ユーザ名が odagiri、smb.conf の設定が Fig2 の場合
# mkdir -p /home/MIRACLE/odagiri
# chown MIRACLE_odagiri /home/MIRACLE/odagiri |
Fig7 に Winbind を使って MIRACLE ドメインの odagiri がログインした場合の SWAT STATUS ページの表示例を示します。
Fig7 SWAT STATUS ページの表示例
|
これを見てわかる通り UNIX/Linux 上でのユーザ名は、「ドメイン名+ユーザ名」となります。
例えば、ドメイン名が MIRACLE (必ず英大文字)でユーザ名が odagiri、セパレータが _ の場合は、Linux 上のユーザ名は MIRACLE_odagiri となります。
ssh や ftp を使用するときは注意してください。
以上が winbind の機能であり、従来の Samba 2.0系の security=domain 機能よりも格段に Windows NT ドメインとの親和性が向上していることがわかると思います。
補足1.LIBNSS_WINS使用方法
既存のネットワークが Windows NT/2000 サーバのドメインによって構築されている場合、Windows マシンの名前解決が WINS (Windows Internet Name Service) によって管理されている場合があります。
こうしたネットワークに後から Samba サーバをドメインメンバとして追加する場合、Samba マシン自体は WINS クライアントにもなれるので、Samba マシンの名前解決は容易に実現できます。
ところが Samba マシンを Windows クライアントから利用する場合、Samba(Linux) マシンから Windows クライアントの名前解決ができないと telnet や ftp などがうまくできなかったり、ログオンに時間がかかるなどの問題が発生することがあります。
こうした問題を解決するために libnss_wins を利用すれば、UNIX/Linux でのホスト名の名前解決で DNS やhosts ファイルに加え、WINS を使用して名前解決ができるようになります。
(WINS サーバには Samba マシンと Windows NT/2000 サーバだけがなることができ、WINS クライアントはWindows 95 以降のすべての Windows マシンと Samba マシンがなることができます)
通常 UNIX/Linux でのホスト名の名前解決は DNS や hosts ファイルや NIS が用いられ、WINS を参照しません。
そのため、Windows の ping コマンドでは WINS を参照して名前解決できるマシンも Linux の ping では WINS を参照しないため、名前解決できないことがあります。
Linux や Windows サーバだけを DNS で管理すれば問題はないように見えますが、Windows クライアントを WINS や DHCP のみで管理している場合、Linux マシンから Windows クライアントの名前解決できなかったり、古い Windows マシンでは DNS による NBT 名前解決できなかったり、動的 DNS が利用ができなかったりして、制限事項がありました。
(Windows クライアントから Samba サーバの名前解決ができても、Samba サーバ側から Windows クライアントの名前解決ができないとエラーとなったり、接続が遅くなったりすることがあります)
LIBNSS_WINS の設定方法は、/etc/nsswitch.conf の中で以下の hosts 行を探し、変更します。
<変更前の例>
hosts: files nisplus nis dns |
<変更後>
これでホスト名の解決時に/etc/hostsの検索後、DNSに問い合わせる前にWINSを検索するようになります。
(winsとdnsのどちらを先にするかは、ネットワーク環境により決定ください。)
リモートのWINSサーバのアドレスは、smb.conf
の中に以下のように指定します。
wins server = 123.45.56.78 |
もし、そのマシン自身のSambaがWINSサーバとする場合は、smb.conf の中に以下のように指定すれば、ローカル(127.0.0.1)を参照します。
もちろん、このWINSの設定はSambaマシンやWindowsクライアントすべてで統一しないと意味がないし、これができていないトラブルの元になるので注意してください。
しかし、WINSサーバがなくてもWindowsと同じようにポート137へのブロードキャストでも名前解決ができるので、ネットワーク・セグメントが1つしかない場合なら便利な機能です。
なお、Windows NT/2000サーバをWINSサーバにするときはコンポーネントの追加で「Windows Internet Service」を追加します。
(ワークステーションやWindows 9xはWINSサーバになれません)
システム管理者が認証プログラムを再コンパイルせずに認証ポリシーを設定できるようにする方法です。
PAMを使用する場合、/etc/pam.dにあるPAM設定ファイルを編集することによって、プログラムに認証モジュールをプラグインする方法を制御できます。
PAMには次の4つのタイプのモジュールがあり、特定のサービスへのアクセスを制御します。
- auth
実際の認証を提供(パスワードの要求およびチェック)し、所属グループなどを設定する。
- account
認証が許可されることをチェックする。
(アカウントが期限切れでないか、ユーザーがその時刻のログインを認められているか、など)。
- password
パスワードの設定に使用される。
- session
ユーザーが認証された後で使用され、sessionモジュールによって、ユーザーが自分のアカウントを使用できるようになる。
(例えば、ユーザーのホームディレクトリをマウントしたり、メールボックスを利用できるようにする)
PAM制御フラグは、チェック結果に対する処理方法をPAMに提供します。
モジュールは特定の順序でスタックされるので、制御フラグによって、ユーザーが後に続くモジュールの重要度を設定することができます。
PAMの規格によって、以下の4つのタイプの制御フラグが定義されています。
- required (必要)フラグモジュール
許可される認証の順序で完全にチェックされなければならないもの。
requiredモジュールのチェックが失敗すると、(スタックされた)同じタイプのほかのモジュールがチェックされるまでユーザーには何も通知されない。
- requisite (必須)フラグモジュール
これも、許可される認証の順序で完全にチェックされなければならない。
ただし、 requisite モジュールのチェックが失敗した場合は、RequiredまたはRequisitモジュールが最初に失敗したことを知らせるメッセージがユーザーに直ちに通知される。
- sufficient (十分)フラグモジュール
このチェックが失敗しても無視される。
ただし、 sufficient フラグモジュールのチェックが成功し、その上のrequired フラグモジュールがすべて成功した場合、このタイプのほかのモジュールはチェックされず、このモジュールタイプ全体のチェックが成功したと見なされる。
- optional (任意)フラグモジュール
このタイプのモジュール以外がすべて成功または失敗した時、成功または失敗した optional フラグモジュールによって、そのモジュールタイプ全体のPAM認証が決定される。