SambaはLinuxをWindowsサーバとして機能させるオープンソースのプロダクトです。Sambaを用いることで、LinuxマシンをWindowsマシンと同様の機構でADに参加させ、メンバサーバとして稼働させることが可能となります。さらにWinbind機構を導入することで、ADの認証情報をSambaやPAM/NSS(ネームサービススイッチ機能)経由で動作する一般のプログラムから利用することが可能となります。これにより認証の統合が実現します。
図1 Winbind機構による認証統合
この方法では、AD側に追加コンポーネントのインストールやLinuxを意識した設定などを行う必要がありません。以下、Red Hat Enterprise Linux(以下RHEL)のクローンとしてユーザが多いCentOS 5.3を中心に、Winbind機構のインストールと基本的な設定について、まずはSamba単体の認証統合を実現する手順を紹介します。
なお、インストール作業の大半はGUIでは行えませんので、以下コマンドラインでの作業方法を中心に説明します。
Sambaのインストール
通常のLinuxディストリビューションであれば、SambaやWinbind機構はパッケージ化されているはずです。Sambaを動作させる上では、最低限「samba」パッケージおよびその依存パッケージをインストールする必要があります。
可能な限り、インターネットから最新版のパッケージを入手、インストールすることをお勧めします。CentOS5.3の場合は以下のコマンドを実行することにより、Samba 3.0.33ベースの3.0.33-3.7.el5といったバージョンがインストールされます。
# yum install samba
また、CentOS 5.3のデフォルトではファイアウォールが有効になっているため、このままではCentOS 5.3上のSambaに別マシンからアクセスすることができません。
system-config-securitylevel-tuiコマンドやGUIを用いて、Sambaサービスへのアクセスを許可する設定を行っておいてください。
図2 system-config-securitylevel-tuiの画面
以下、centos52というホスト名のCentOS 5.3で構築したSambaサーバを、IPアドレスが192.168.135.111、w2k8srv1.w2k8ad1.localというFQDN名のWindows Server 2008で構築したW2K8AD1.LOCALというADドメインに参加させる場合を例に、設定を行っていきます。
ADへの参加
インストールが完了したら、引き続きSambaをADに参加させるための設定を行います。以下順を追って説明します。
【1】AD参加の事前設定
ADに参加するためには、DNSサーバとして通常ADのDCを指定する必要があります。DHCPでIPアドレスやDNSサーバの設定を取得している場合は、DHCPサーバ側でDNSサーバの設定を変更する必要があります。各マシンで静的に設定している場合は、/etc/resolv.confを修正します。
リスト1 /etc/resolv.confの設定
search w2k8ad1.local
nameserver 192.168.135.111
また、自身のホスト名の名前解決ができない場合は、後述するドメイン参加の際にDNSの動的更新に失敗します。これ自体は致命的な問題ではありませんが、可能な限りDNSもしくは/etc/hostsファイルで名前解決の設定を行っておくことをお薦めします。
さらに、ADの認証方式であるKerberos認証が機能する上では、DCとの時刻のずれが常時5分以内である必要があります。そのため、DCと常時時刻同期を行うように設定しておきましょう。NTPを用いてNTPサーバでもあるDCと時刻同期するのが一般的ですが、Sambaの一部であるnetコマンドを用いることも可能です。
# net time set -I w2k8srv1.w2k8ad1.local
~~~~~~~~~~~~~~~~~~~~~~
Wed May 20 02:07:00 JST 2009
【2】Sambaデーモンの停止
ADへの参加を行う際にはSambaサーバが停止している必要があります。現在起動していたら、以下のようにして一度停止させましょう。
# /etc/init.d/smb stop
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
【3】smb.confの設定
smb.confにリスト2のような設定を行います。最低限必要なのはworkgroup/realm/securityの3つのパラメータの設定です。なおrealmパラメータの値は、必ず大文字で指定します。
リスト2 smb.confの設定
[global]
...
# ----------------------- Network Related Options -------------------------
#
workgroup = W2K8AD1 ()
...
# ----------------------- Domain Members Options ------------------------
...
security = ads
passdb backend = tdbsam
realm = W2K8AD1.LOCAL ()
; password server = <NT-Server-Name>
idmap uid = 10000-11000
idmap gid = 10000-11000
...
[tmp] ←動作確認用の共有
path = /tmp
writeable = yes
workgroupパラメータには、デフォルトでMYGROUPという値が設定されていますので変更してください。それ以外の2つのパラメータは「Domain Members Options」という行の近辺にコメントされて記載されていますので、コメントを外します。また、動作確認用として、ホームディレクトリを自動共有するhomesセクション以外で、何かファイル共有を作成しておいてください。よくわからない場合は、リスト2の最後にある[tmp]以下の3行をsmb.confファイルの末尾に加えてください。
【4】ADへの参加
ここまでの準備が整ったら、以下のようにnet ads joinコマンドを実行してADドメインへの参加を行います。
# net ads join -U Administrator
~~~~~~~~~~~~~
Enter Administrator's password:
Using short domain name -- W2K8AD1
DNS update failed!
Joined 'CENTOS53' to realm 'w2k8ad1.local'
上記のように「Joined...」から始まる行が出力されたら、ドメインへの参加は成功です。
[2] CentOS 5.3ではSambaのDNSの動的更新機能が有効になっているため、自身のFQDNが名前解決できないと、上記のように「成功」メッセージに引き続き、「 DNS update failed!」というエラーが出力されます。
これにより、図3 のようにComputersコンテナにコンピュータアカウントが生成されます[3] 。
図3 Active Directoryユーザとコンピュータ上からの確認
【5】/etc/nsswitch.confおよび/etc/pam.d/system-authの修正
以下のコマンドを実行して、各種設定ファイルを修正します。
# authconfig --enablewinbind --update
# authconfig --krb5kdc=192.168.135.111 --krb5realm=W2K8AD1.LOCAL --update
これにより、以下のように設定が変更されます。
/etc/krb5.conf
--krb5kdc/--krb5realmオプションにより、W2K8AD1.LOCALというレルムに関する設定が追加されます。
/etc/nsswitch.conf
--enablewinbindオプションにより、Winbind機構からユーザ、グループ情報を取得するための設定が行われます。
【6】smb.confの設定確認
先ほどのリスト2 で、globalセクションに以下の設定を追加しているはずです。
idmap uid = 10000-11000
idmap gid = 10000-11000
idmap uidおよびidmap gidパラメータは、Winbind機構が生成したUNIXユーザに割り当てるuidとgidの範囲を指定するパラメータですので、必要に応じて適宜設定/変更してください[4] 。
【7】Winbind機構の起動と動作確認
ここまで設定を行ったら、SambaおよびWinbind機構を起動します(※5) 。Winbind機構についてはwinbindという別のサービス名になっているため、smbdサービスとは別に起動する必要があります。
# service smb start
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
# service winbind start
Starting Winbind services: [ OK ]
再起動時にもSambaやWinbind機構を自動起動させたい場合はchkconfigコマンドにより設定します[5] 。
# chkconfig smb on
# chkconfig winbind on
起動したら、図4 のようにして動作を確認します。
図4 Winbind機構の動作確認
# wbinfo -t
checking the trust secret via RPC calls succeeded
# wbinfo -u
W2K8AD1\administrator
W2K8AD1\guest
《中略》
W2K8AD1\samba01
W2K8AD1\samba02
# id 'W2K8AD1\samba01'
uid=10001(W2K8AD1\samba01) gid=10002(W2K8AD1\domain users) groups=10002(W2K8AD1\domain users) context=root:system_r:unconfined_t:SystemLow-SystemHigh
~~~~~
# getent passwd 'W2K8AD1\samba01'
W2K8AD1\samba01:*:10000:10002:samba 01:/home/W2K8AD1/samba01:/bin/false
Winbind機構がADのユーザ情報から生成したユーザに割り当てられるuidやgidの値としては、idmap uidやidmap gidパラメータで設定した範囲の値が先頭から順に払い出されます。今回の例では10000から順に払い出されます。
【8】Windowsからの動作確認
最後に、Windowsマシンからアクセスしてみましょう。
この状態で、W2K8AD1ドメインに参加しているWindowsマシンにsamba01ユーザとしてログオンした状態で「\\centos53」と入力して、Sambaサーバに接続してみると、サーバの/etc/passwdにはsamba01ユーザの定義がないにも関わらずアクセスが成功して、図5 のように自身のホームディレクトリと先ほど作成した動作検証用のtmp共有が参照できます。tmp共有の中に入ると[6] 、Sambaサーバ上のディレクトリが参照できていることが確認できます。動作検証用に、ここでは「SAMBA.txt」ファイルを作成してみました。
図5 Windowsマシンからのアクセス
ここで、Sambaサーバ上から/tmpを参照すると、図6 のようにWinbind機構が生成したユーザが「SAMBA.txt」ファイルを書き込んでいることが確認できます。
図6 Sambaサーバ上で/tmpを参照したところ
# ls -l /tmp
total 20
-rwxr--r-- 1 W2K8AD1\samba01 W2K8AD1\domain users 0 May 20 21:20 SAMBA.txt
drwx------ 2 root root 4096 May 20 20:49 ssh-ffzKJc4422
drwx------ 2 root root 4096 May 20 02:12 ssh-ZRxPaX2422
コラム ホームディレクトリの自動作成
認証統合とは直接の関係はありませんが、以下WindowsマシンからSambaのホームディレクトリ共有にアクセスした際に、ユーザのホームディレクトリを自動作成する方法について説明します。
ホームディレクトリの自動作成を実施する際には、第2回でも説明したmkhomedirモジュールを設定する必要がありますが、Sambaでは幾つか準備が必要です。
まずはSELinuxの設定を変更します。以下のようにsetseboolコマンドでsmbdをSELinux の制御下から外すか、SELinux自体を無効にしてください。
# setsebool -P smbd_disable_trans on
次いで、smb.confのglobalセクションにobey pam restrictionsパラメータを設定します。globalセクションの中であれば、どこでも構いませんが、よくわからない場合は、先ほど追加したidmap gidパラメータの下に追加しておけばよいでしょう。
idmap uid = 10000-11000
idmap gid = 10000-11000
obey pam restrictions = yes
これにより、Sambaのアクセス制御がPAMの管理下におかれます。設定後smbサービスを再起動しておいてください。
最後にホームディレクトリを自動作成するpam_mkhomedirモジュールの設定を行います。CentOS 5.3の場合は、
# authconfig --enablemkhomedir --update
を実行してPAMの設定ファイル(/etc/pam.d/system-auth)を更新します。
これにより、ユーザがSambaサーバにアクセスした際、そのユーザのホームディレクトリが存在していないと自動的に作成されます。ただし、ホームディレクトリの作成はユーザの権限で行われますので、ホームディレクトリの親ディレクトリのパーミッションを1777のようにだれでも書き込み可能に設定する必要があります。
winbind機構のデフォルトでは、各ユーザのホームディレクトリは、「 /home/ドメイン名/ユーザ名」という箇所に作成されますので、あらかじめ以下のように/home/ドメイン名」ディレクトリを作成の上、パーミッションを1777に設定しておく必要があります。
mkdir /home/W2K8AD1
chmod 1777 /home/W2K8AD1/
これにより、Samba経由でホームディレクトリの共有にアクセスした際に、Sambaサーバ側で各ユーザのホームディレクトリが自動作成されるようになります。
まとめ
ここまで説明した通り、Winbind機構を用いることでADのユーザ情報からUNIXのユーザ情報を自動生成することで、認証統合を実現することが可能です。
Linux側の設定については、かなり繁雑ではありますが、1つずつ順番に行っていけば個々のステップ自体はそれほど難しくないのではないかと考えます。またAD側に特殊な設定を行う必要がないことも魅力です。
ただし、ここまでの設定は本連載の目的である認証統合についてSamba以外については未完のままです。次回はもう少しWinbind機構の設定を行い、Samba以外のサービスについての認証統合を実現する設定と、Winbind機構によるUNIXユーザの作成方法に関するカスタマイズについて説明します。
Active Directoryに関する技術情報:
Microsoft TechNet Active Directory TechCenter
URL:http://technet.microsoft.com/ja-jp/activedirectory/default.aspx
Microsoft Active Directory 機能概要ページ
URL:http://www.microsoft.com/japan/ad/