Active DirectoryとLinuxの認証を統合しよう

第5回SambaのWinbind機構による認証統合[1]

SambaはLinuxをWindowsサーバとして機能させるオープンソースのプロダクトです。Sambaを用いることで、LinuxマシンをWindowsマシンと同様の機構でADに参加させ、メンバサーバとして稼働させることが可能となります。さらにWinbind機構を導入することで、ADの認証情報をSambaやPAM/NSS(ネームサービススイッチ機能)経由で動作する一般のプログラムから利用することが可能となります。これにより認証の統合が実現します。

図1 Winbind機構による認証統合
図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の画面
図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
                  ~~~~~~~~~~~~~~~~~~~~~~ ←DCのIPアドレスやホスト名を指定
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  (ADのNetBIOS名)
  ...

# ----------------------- Domain Members Options ------------------------
  ...

        security = ads
        passdb backend = tdbsam
        realm = W2K8AD1.LOCAL (ADのFQDN(大文字))

;       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
                  ~~~~~~~~~~~~~ ← ADにコンピュータを追加する権限を持ったユーザを指定
Enter Administrator's password: ← ユーザのパスワードを入力
Using short domain name -- W2K8AD1
DNS update failed!
Joined 'CENTOS53' to realm 'w2k8ad1.local'

上記のように「Joined...」から始まる行が出力されたら、ドメインへの参加は成功です。

これにより、図3のようにComputersコンテナにコンピュータアカウントが生成されます[3]⁠。

図3 Active Directoryユーザとコンピュータ上からの確認
図3 Active Directoryユーザとコンピュータ上からの確認 図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 ← Winbind機構とADとの通信が行われているか
checking the trust secret via RPC calls succeeded
# wbinfo -u ←アカウントの一覧を列挙する
W2K8AD1\administrator
W2K8AD1\guest
《中略》
W2K8AD1\samba01 ← あらかじめ作成済みの一般ユーザ
W2K8AD1\samba02 ← あらかじめ作成済みの一般ユーザ
# id 'W2K8AD1\samba01' ← 指定したアカウントのuidとgidを参照
uid=10001(W2K8AD1\samba01) gid=10002(W2K8AD1\domain users) groups=10002(W2K8AD1\domain users) context=root:system_r:unconfined_t:SystemLow-SystemHigh
    ~~~~~ ← idmap uidパラメータで指定した先頭のuidが払い出されている
# 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マシンからのアクセス
図5 Windowsマシンからのアクセス 図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

まとめ

ここまで説明した通り、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/

おすすめ記事

記事・ニュース一覧