Samba 4.0.1でActive Directoryを立てる試み - torutkの日記の続きです。CentOS 6にSamba 4.0.0をインストールした後の設定編となります。
Windowsドメイン定義
samba4のsambaプロセスは、/etc/samba4/smb.confがないと起動しないので、まずsmb.confを作成します。
Active Directory の Domain ControllerとしてSamba4を起動するときは、ドメイン設定をsmb.confに記述します。通常はsamba-toolコマンドを実行し、対話的に設定情報を入力するとドメイン設定をsmb.confに出力されます。
# samba-tool domain provision
すると、レルム(Kerberosの管理範囲)を聞いてきます。レルムは組織のDNS名を大文字にしたもの(例えば、SALES.EXAMPLE.COM)を使うのが慣例ですが、DNSと紐づかない閉じた環境では名前 + ".LOCAL"とすることが多いようです*1。ここでは閉じた環境用として名前にCOFFEE.LOCALとしてみました。
Realm: COFFEE.LOCAL
次はドメインを聞いてきます。今入力したレルム名の最初の単語がデフォルトで設定されています。デフォルトで構わなければ[Enter]キーを押します。
Domain [COFFEE]:
次は、サーバーの役割を選択します。今回はActive Directory の Domain ControllerとしてSamba4を動かすので、デフォルトのまま([Enter]キーだけ押す)とします。
Server Role (dc, member, standalone) [dc]:
次はActive Directoryが使用するDNSサーバーをSamba内蔵のものか外部のdnsサーバー(bind)か、またはDNS未使用かを指定します。今回はSamba4内蔵のものを使うので、デフォルトのまま([Enter]キーだけ押す)とします。
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
ドメイン参加PCはDNSサーバーにActive Directory Domain Controllerを指定するため、AD DC管理外のホスト名を解決するために、問い合わせを転送する上位のDNSサーバーのIPアドレスを指定します。
/etc/resolv.confにnameserverが記載されていれば、それをデフォルトとして入力を聞いてきます。完全に閉じた環境では"none"を指定して外部のDNSサーバーへの転送をしないということも可能です。ここでは、デフォルトのDNSサーバーのIPアドレスを使うので、[Enter]キーだけ押します。
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.1.254]:
ドメイン全体の管理権限を持つAdministratorアカウント(ビルドインユーザーアカウント)のパスワードを設定します。強度の低いパスワードを入力すると受け付けてくれないので、大文字、小文字、数字、記号の種類のうち3種類以上の文字を組み合わせてパスワードとする必要があります。
Administrator password: XXXxxx999 Retype password: *********
パスワードを設定すると、コマンド処理が実行しされます。途中略して最後の部分のメッセージを次に示します。
:(中略) A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba4/private/krb5.conf Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: columbia NetBIOS Domain: COFFEE DNS Domain: coffee.local DOMAIN SID: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX
/var/lib/samba4/private/krb5.confにこの設定に基づく内容が書かれています。
[libdefaults] default_realm = COFFEE.LOCAL dns_lookup_realm = false dns_lookup_kdc = true
これを/etc/krb5.confに上書きコピーします。
# cp /var/lib/samba4/private/krb5.conf /etc
samba起動
これでsambaが起動するはずです。
# service samba4 start Starting Samba services: [ OK ] # service samba4 status samba (pid 10454 10453 10452 10451 10450 10449 10448 10447 10446 10445 10443 10442 10441 10439) を実行中...
serviceコマンドのstatusで実行中になれば、Sambaが稼働しています。
psコマンドで見ると
$ ps aux|grep [s]amba root 10439 0.0 5.3 541868 40748 ? Ss 12:53 0:00 samba root 10441 0.0 3.6 541868 28080 ? S 12:53 0:00 samba root 10442 0.0 3.7 541868 28536 ? S 12:53 0:00 samba root 10443 0.0 4.0 546020 30500 ? S 12:53 0:00 samba root 10445 0.0 3.6 541868 28060 ? S 12:53 0:00 samba root 10446 0.0 3.8 541868 29524 ? S 12:53 0:00 samba root 10447 0.0 3.7 541868 28372 ? S 12:53 0:00 samba root 10448 0.0 4.0 543972 30744 ? S 12:53 0:00 samba root 10449 0.0 3.8 541868 29280 ? S 12:53 0:08 samba root 10450 0.0 3.8 544696 29028 ? S 12:53 0:00 samba root 10451 0.0 3.6 541868 28092 ? S 12:53 0:00 samba root 10452 0.0 4.9 542016 37720 ? S 12:53 0:02 samba root 10453 0.0 3.8 541868 28908 ? S 12:53 0:00 samba root 10454 0.0 4.0 544392 31104 ? S 12:53 0:00 samba
と多数のsambaプロセスが稼働しているのがわかります。
samba動作確認
sambaプロセスが起動したら、ドメイン定義ができているか確認します。
$ smbclient -L localhost -U% Domain=[COFFEE] OS=[Unix] Server=[Samba 4.0.3-1.el6] Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.0.3-1.el6) Domain=[COFFEE] OS=[Unix] Server=[Samba 4.0.3-1.el6] Server Comment --------- ------- Workgroup Master --------- ------- $
次にドメイン管理者Administratorでログインできるか確認します。
$ smbclient //localhost/netlogon -UAdministrator%'XXXxxx999' -c 'ls' Domain=[COFFEE] OS=[Unix] Server=[Samba 4.0.3-1.el6] . D 0 Fri Jan 25 00:10:36 2013 .. D 0 Fri Jan 25 00:24:54 2013 39076 blocks of size 2097152. 30770 blocks available
次に内蔵DNSの確認をします。
$ host -t SRV _ldap._tcp.coffee.local _ldap._tcp.coffee.local has SRV record 0 100 389 columbia.coffee.local. $ host -t SRV _kerberos._udp.coffee.local _kerberos._udp.coffee.local has SRV record 0 100 88 columbia.coffee.local. $ host -t A coffee.local coffee.local has address 192.168.1.10 $
hostコマンドがない場合、yumでbind-utilsパッケージをインストールします。
次にKerberosの確認をします。
$ kinit Administrator@COFFEE.LOCAL Password for Administrator@COFFEE.LOCAL: Warning: Your password will expire in 40 days on Fri Apr 12 00:18:43 2013
Active Directoryのユーザーアカウントはパスワードに有効期限を持たせることができます。
上述のWarningは、パスワード有効期限まで何日かを出しているだけで、当面気にしないでおきます。
$ klist Ticket cache: FILE:/tmp/krb5cc_1001 Default principal: Administrator@COFFEE.LOCAL Valid starting Expires Service principal 03/02/13 16:47:38 03/03/13 02:47:38 krbtgt/COFFEE.LOCAL@COFFEE.LOCAL renew until 03/03/13 16:47:29 $
Windowsのドメイン設定
Active Directoryアカウントと初回参加の落とし穴
Unix/Linux系の管理をしていると、Windows Server/Active Directoryの管理には戸惑うことが多いです。
落とし穴がいくつかあるので要注意です。といっても、Active Directoryの説明もわかりにくい(骨格情報が少なくツール操作方法が多い気がする)のですが。
Active Directoryにはユーザーアカウントとコンピュータアカウントがあり、Windowsドメインに参加するためには、ユーザーとコンピュータとともに認証する必要があります。つまり、あらかじめコンピュータがActive Directoryに登録されていることが前提となります。
ここで、初めてWindowsドメインに参加するコンピュータについては、参加にあたってそのコンピュータが登録されている必要があるが、初めて参加するのでActive Directoryにはまだそのコンピュータが登録されていないというジレンマに陥ります。先にSamba4でユーザーアカウント(一般権限)を作成し、そのアカウントでWindowsコンピュータをドメインに参加しようと設定するとエラーとなってしまいます。(ここで相当はまりました)
このジレンマを解決するためか、Active Directoryについては特殊なルールがあります。調べた限り次のとおりです。
- ドメイン管理者権限を持つアカウントでWindowsドメインに参加するとコンピュータアカウントを作成する権限があるので、Active Directoryに登録がないコンピュータをドメインに参加させることができる。
- ユーザーアカウントがAuthenticatedUsersグループに含まれているなら、そのアカウントで10個までActive Directoryにコンピュータを登録することができる。
そこで、最初はドメイン定義で作成したAdministratorアカウントでWindowsコンピュータをドメインに参加させます。
その後は別途作成したユーザーでWindowsにログオンします。この手順であれば問題ないようです。
Windowsコンピュータをドメインに参加させる手順
まず、DNSサーバーの設定にActive DirectoryのDomain Controller(つまりSamba4稼働マシン)を追加します。
次に、ドメインに参加する設定をします。
Windowsドメインログオン
ドメインに参加しているコンピュータでログオンするときは、ログオン画面にユーザー名/パスワード欄に加えて、ログオン先欄があるので、ここでドメインを選択するとドメインユーザーアカウントでログオンできます。
ドメインではなくコンピュータのローカルに作成したユーザーアカウントで引き続きログオンする場合は、ログオン先にそのコンピュータ名を選択します。
Active Directory上にユーザーを作成(samba-tool)
Sambaの管理コマンドsamba-toolでActive Directory上にユーザーアカウントを作成することができます。
# samba-tool user create foobar --surname=Barmot --given-name=Foomat --mail-address=foobar@coffee.local New Password: Retype Password:
samba-toolコマンドの実行には、gnutls-devel、cups-develのパッケージがインストールされていないとエラー(共有ライブラリファイルを利用しているため)となります。
デフォルトでは、CN=Users,DC=coffee,DC=localの下にユーザーが作成されます。
Active Directory上に生成されたユーザー情報(抜粋)
- CN=Foomat Barmot,CN=Users,DC=coffee,DC=local
属性名 | 値 | 備考 |
---|---|---|
accountExpires | 0x7FFFFFFFFFFFFFFF | パスワード有効期限(42日) |
cn | Foomat Barmot | |
displayName | Foomat Barmot | |
distinguishedName | CN=Foomat Barmot,CN=Users,DC=coffee,DC-local | |
givenName | Foomat | |
foobar@coffee.local | ||
name | Foomat Barmot | |
sAMAccountName | foobar | |
sn | Barmot |
Active Directory上にユーザーを作成(Windows用の管理ツール)
samba-toolを初回ユーザー作成程度に使うのはよいですが、日常管理作業として使うには面倒なので、日常の管理作業にはWindows上で専用の管理ツールを使うのがよさそうです。
Windows 7が環境にあれば、「Windows 7 Service Pack1 (SP1)用のリモートサーバー管理ツール」をMicrosoftから別途ダウンロードしインストールします。ドメインに参加したコンピュータ上でこのツールを使ってユーザー管理ほかをすることができます。
インストールメモ
- インストーラでインストール後、[コントロールパネル]>[プログラム]>[Windowsの機能の有効化または無効化]で、ツリーから[リモートサーバー管理ツール]>[役割管理ツール]>[AD DSおよびAD LDSツール]>[Active Directory管理センタ]をチェックし[OK]を押す。
- [スタート]>[すべてのプログラム]>[管理ツール]の下にActive Directory関係ショートカットが4つほどできている
Active Directory Domain Controllerが動いてないとき
ネットワークがつながらい、Samba4マシンが落ちている、等でWindowsにログオンできないと困ると思って小規模なネットワークではあまりドメインを使おうと思っていませんでした。しかし、今回調べてみると、Windowsではログオン情報を過去規定数分保持しているので、まったくログオンできないという事態はなさそうです。
ただし、そのコンピュータで一度もログオン実績のないユーザーアカウントの場合、ログオン情報がないのでオフラインではログオンできません。また、多数のユーザーアカウントでログオンしている場合、10アカウント(デフォルト)分のログオン情報をキャッシュするようです。
資料
Samba4のActive Directory設定に関する資料はまだ少ない