torutkのブログ

ソフトウェア・エンジニアのブログ

Samba 4.0でActive DirectoryとWindowsドメインログオン

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からのドメインログオンに移ります。

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稼働マシン)を追加します。

次に、ドメインに参加する設定をします。

  • [コントロールパネル]>[システム]>[システムの詳細設定]>[コンピュータ名]タブをクリックし、ドメイン設定の[変更]ボタンを押す。
  • [ドメイン]ラジオボタンをチェックし、ドメイン名に"COFFEE"を入力する。
    • ここで、ドメイン名にNetBIOSドメイン名である"COFFEE"を指定する場合と、FQDN(?)の"COFFEE.LOCAL"を指定する場合があるようです。環境によってはエラーになることがあるかもしれません(NetBIOSはルーター越えの場合あやしいかも)。
  • [ユーザー名]に"Administrator"、[パスワード]に"XXXxxx999"を入れる。コンピュータがドメインに登録されて問題が生じなければ、「COFFEEドメインにようこそ」ダイアログが表示されます。
  • 再起動します。再起動後、ログオン画面にログオン先欄が増えているので、ドメインログオンするときはログオン先にドメイン名を選択します。

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
mail 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設定に関する資料はまだ少ない

Windowsドメインについて

*1:あまり推奨されるやり方ではなく、閉じた環境でもなるべく組織のDNSに基づく命名をするのが望ましい。