前回はSambaのWinbind 機構による認証統合の前段として,まずはSamba自身の認証をADに統合する方法を説明しました。今回は,PAM機構経由でSamba以外の各種プロダクトも含めた,本来の意味での認証統合を実施する方法について説明します。
pam_winbindモジュールのインストールと最低限の設定
pam_winbindモジュールを用いることで,ssh/telnet/ftpといったPAMに対応した一般的なプロダクトの認証や認可をWinbind機構が提供するWindowsドメインの認証情報を使って行うことが可能となり,Sambaサーバに対する認証が完全にWindowsドメインに統合されます。
CentOS 5.3の場合,pam_winbindモジュールは,samba-commonパッケージの中に含まれています。sambaパッケージをインストールしていればその過程でsamba-commonパッケージもインストールされているはずです。
引き続き,以下のコマンドを実行してPAMの設定ファイル(/etc/pam.d/system-auth)を更新します。
# authconfig --enablewinbindauth --update
これにより,Winbind機構により,Samba以外のプロダクトでユーザ認証を行うことが可能となります。また,前回説明したようにWinbind機構では各ユーザのホームディレクトリの自動作成は行われませんので,ホームディレクトリの自動作成の設定を行っておくことを強くお薦めします。以下,ホームディレクトリの自動作成の設定を行っている前提で説明します。
ここまでの設定を行った段階で,sshなどでログインしようとしても,以下のように認証に成功した直後に切断されてしまいます。
$ ssh centos53 -l 'W2K8AD1\samba01' W2K8AD1\samba01@centos53's password: Last login: Wed May 20 21:45:51 2009 from centos53 Connection to centos53 closed.
これは前回の動作確認の際に示したように,セキュリティ上デフォルトではWinbind機構で生成したユーザのシェルとして/bin/falseという無効なシェルが指定されているためです。またデフォルトのホームディレクトリは「/home/ドメイン名/ユーザ名」というLinuxでは一般的ではない構成となっていますので,こちらも変更したいケースが多いと思います。
# getent passwd 'W2K8AD1\samba01' W2K8AD1\samba01:*:10000:10002:samba 01:/home/W2K8AD1/samba01:/bin/false
Sambaではtemplate shellおよびtemplate homedirパラメータにより,各ユーザのシェルとホームディレクトリを設定することが可能です。たとえばホームディレクトリを「/home/ユーザ名」形式とし,シェルを/bin/bashとする場合の設定例を以下に示します。
リスト1 シェルとホームディレクトリをデフォルトから変更する
[global]
...
template shell = /bin/bash
template homedir = /home/%U
%Uはユーザ名を意味する変数になります。template homedirパラメータのデフォルト値は「/home/%D/%U」となっています。%Dはユーザの所属ドメインに展開される変数です。上記の設定を行うことで,以下のようにSambaサーバへのログインが可能となります。
$ ssh centos53 -l 'W2K8AD1\samba01' W2K8AD1\samba01@centos53's password: ←パスワードを入力 Creating directory '/home/samba01'. ←ホームディレクトリの自動作成が行われている Last login: Thu Jun 25 23:21:11 2009 from 192.168.135.31 [W2K8AD1\samba01@centos53 $
このように,すでにWinbind機構が動作している環境であれば,サーバへのログイン時の認証をWinbind機構に統合するのはそれほど難しくありません。以下,ここまでの設定をベースに応用設定を幾つか紹介します。
ユーザ名のカスタマイズ
デフォルトでは,上記のようにUNIXユーザ名を「ドメイン名\Sambaユーザ名」形式で指定する必要があります。このためユーザ名を指定する際にクォーテーションを行う等配慮が必要です。
この点が問題となる場合は,winbind separatorパラメータを用いてWindowsドメイン名とユーザ名との間の区切り文字をデフォルトの「\」から,「_」などの無難な文字に変更することをお薦めします。例えば以下のように設定した場合,生成されるUNIXユーザ名は「W2K8AD1_samba01」といった形式になります。
リスト2
[global]
...
winbind separator = _
また,ドメイン名情報自体が不要であるという場合は,以下のようにwinbind use default domainパラメータを設定することでWinbind機構が生成するユーザ名からWindowsドメイン名の情報を削除することが可能です。
リスト2
[global]
...
winbind use default domain = yes
この指定を行った状態で,idコマンドを実行した際の表示を以下に示します。
$ id 'W2K8AD1\samba01' uid=10001(samba01) gid=10000(domain users) groups=10000(domain users) $ id samba01 uid=10001(samba01) gid=10000(domain users) groups=10000(domain users)
この設定を行う場合は,Winbind 機構によって生成されたUNIXユーザと既存のUNIXユーザの名前が重複しないように注意してください。
この他,空白の入ったユーザ名などを扱いやすくするために,winbind normalize namesパラメータが用意されています。このパラメータをyesに設定することで,以下のように,たとえば「domain users」というWindowsのグループ名に対応するUNIX側のグループ名が「domain_users」というUNIX側で扱いやすいユーザ名になります。
これにより,Winbind機構利用時にUNIX側の利便性が若干ですが向上します。
$ id 'W2K8AD1\samba01' uid=10001(W2K8AD1\samba01) gid=10000(W2K8AD1\domain_users) groups=10000(W2K8AD1\domain_users)

