UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS6.3 + 2008 ドメインコントローラ




●Active Directory連携


winbind機能を利用Linux側にSamba用のアカウントを作成することなくWindowsのユーザアカウントをLinux上で利用することが可能となります。ActiveDirectoryと連携してドメインメンバーサーバとする手順について以下に説明します。

Sambaドメイン構成のうちActive Directoryとしてドメイン参加することが可能です。この場合、ユーザ認証にはKerberosが利用されます。Linuxでは一般的にMIT Kerberosが実装として利用されています。

ここではWindows Server2008 R2で運用中のActive DirectoryドメインにSambaサーバを参加させるための設定方法に関して説明いたします。各サーバのパラメータは下記のようになっています。注意すべきはWindows2008のDNSにtestおよびsambaは予め登録しておいてください。これをしておかないとドメイン参加時にエラーになることがあります。

Windows Server 2008 R2
Active Directoryドメイン unix-power.local
コンピュータ名 test
IPアドレス 192.168.12.201
Sambaサーバ ( CentOS 6.3 )
コンピュータ名 SAMBA
IPアドレス 192.168.12.20


ActiveDirectoryとの連携に必要なwinbindおよびkerberosがインストールされているか確認しなければインストールを行います。

# rpm -qa | grep winbind
samba-winbind-3.5.10-125.el6.i686
samba-winbind-clients-3.5.10-125.el6.i686

# rpm -qa | grep krb5
krb5-devel-1.9-33.el6_3.3.i686
krb5-workstation-1.9-33.el6_3.3.i686
krb5-libs-1.9-33.el6_3.3.i686


SambaがActiveDirectoryに対応としてビルドされていることを確認します。OpenLDAPとKerberosのライブラリが必要ですがこれらのライブラリが存在していれば自動的にActiveDrirectory機能が利用可能となります。lddでsmbdにリンクされるライブラリを確認することでActiveDirectory連携が利用可能かどうか判別することができます。

# ldd /usr/sbin/smbd
        linux-gate.so.1 =>  (0x008e3000)
        libldap-2.4.so.2 => /lib/libldap-2.4.so.2 (0x002c3000)
        liblber-2.4.so.2 => /lib/liblber-2.4.so.2 (0x00207000)
        libgssapi_krb5.so.2 => /lib/libgssapi_krb5.so.2 (0x00216000)
        libkrb5.so.3 => /lib/libkrb5.so.3 (0x0052f000)
<省略>                 


事前準備としてDNSサーバをADに向けておく必要があります。

# vi /etc/resolv.conf
search unix-power.local
nameserver 192.168.12.201


ADではKerberos認証が機能するため、時刻を正確に合しておく必要があります。AD環境ではクライアントは原則としてドメインコントローラと時刻同期をするらしい。Windows2008 R2において以下のコマンドをDOS窓からたたいて時刻を同期しておきます。

> w32tm /config /manualpeerlist:133.100.9.2 /syncfromflags:manual
> net stop w32time
> net start w32time
> w32time /resync

> w32tm /query /peers
ピア数: 1

ピア: 133.100.9.2
状態: アクティブ
残り時間: 35.7795505s
モード: 1 (対称アクティブ)
階層: 0 (未指定)
ピアポーリング間隔: 0 (未指定)
ホストポーリング間隔: 6 (64s)


AD連携のためkrb.conf / smb.conf / nsswitch.conf / system-authをそれぞれ編集する必要がありますが個別に手動でやるのは手間なので次のコマンドで対話形式に設定を行う事が可能です。

# setup

setupコマンドで認証の設定を選択します。
Winbindで認証するよう下記を選択します。
Winbindの詳細設定で下記を選択します。


これでOKを押すとそれぞれのファイルに保存されます。以下にそれぞれのファイルの内容を記載します。

●/etc/samba/smb.conf

[global]
#--authconfig--start-line--

# Generated by authconfig on 2013/02/03 12:32:05
# DO NOT EDIT THIS SECTION (delimited by --start-line--/--end-line--)
# Any modification may be deleted or altered by authconfig in future

   workgroup = UNIX-POWER
   password server = test.unix-power.local
   realm = UNIX-POWER.LOCAL
   security = ads
   idmap uid = 16777216-33554431
   idmap gid = 16777216-33554431
   template shell = /bin/bash
   winbind use default domain = false
   winbind offline logon = false

#--authconfig--end-line--
        dos charset = CP932
        display charset = UTF-8
;       workgroup = WORKGROUP
        netbios name = SAMBA
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        cups options = raw
        load printers = no
        disable spoolss = yes
        printing = bsd
        socket address = 192.168.12.20

[homes]
        comment = Home Directories
        read only = No
        browseable = No

[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No

[public]
        path = /var/samba/public
        read only = No


各パラメータの意味は下記の通りです。

realm ADのドメイン名を指定します。これは全て大文字で設定します
workgroup NTドメイン形式のドメイン名を利用するためにADサーバで設定しているNTドメインのNetBIOS名を設定します
security AD連携機能を利用するときにはadsを指定します
password server ドメインコントローラを指定します。
idmap uid winbindはWIndowsドメインコントローラから取得した情報を元にLinux用のユーザアカウントを自動作成します。自動で作成されるアカウントはwinbindによって管理されており/etc/passwdなどには現れません。またwinbindはユーザ情報を作成するときにidmap uidにパラメータに指定した範囲のUIDを小さい値から順番に割り当てます。従って既存のユーザアカウントに割り当てられていないUIDの範囲で指定しなければなりません。
idmap gid idmap uidと同様で自動的に作成されるグループに関する値の範囲を指定します。
winbind enum users ドメインコントローラに非常に多くのユーザが登録されている場合、エントリの取得に時間がかかることがありますwinbindはネットワークごしにユーザエントリを取得するためネットワーク帯域幅がせまくユーザ数が多数に渡る場合など、ユーザ一覧取得処理にかかる時間が無視できないものになることもあります。このような環境でユーザ一覧の取得時に一覧の取得を抑制するためのパラメータです。noを設定するとユーザ一覧の取得を抑制します。
winbind enum groups winbind enum groupsと同様のパラメータでnoを指定した場合、グループ一覧の取得を抑制します。
template homedir winbindによって自動的に作成されたユーザのホームディレクトリの初期パラメータとして割り当てられます。規定値は/home/%D/%Uと設定されているため/home/ドメイン名/ユーザ名がホームディレクトリとして割り当てられます。
template shell winbindによって自動的に作成されたユーザのログインシェルの初期パラメータとして割り当てられます。規定値は/bin/falseが設定されているためwinbindによって自動的に作成されたユーザはシステムにログインすることができません。
winbind enable local accounts このパラメータをyesに設定するとwinbindはユーザ作成要求が発生したときにwinbind独自のデータベース内にユーザアカウントを自動的に作成します。これと同時にadd user scriptなど、ユーザ作成などに関する一部のパラメータは無視されます。
winbind separator winbind機能を用いいるとWindowsドメインコントローラから取得したユーザ情報はデフォルトでドメイン名\ユーザ名の形式で表現されます。しかしLinuxではバックスラッシュは特別な意味をもつことが多いので運用上あまり好ましくありません。そこでバックスラッシュを他の文字に置き換えたい場合にこのパラメータに置き換える文字を指定します。
winbind use default domain このパラメータをyesにするとwinbindによって作成されたユーザ名からドメイン名が取り除かれます。その結果、sshなどsamba以外のアプリケーションでwinbind経由で取得したユーザ名を利用する場合にもドメイン名が含まれないため一般的なユーザ名でログインすることが可能となり、ユーザの利便性が向上します。
winbind cache time winbindは性能向上のためにユーザ情報やグループ情報をキャッシュとして保持しています。このパラメータはキャッシュを保持する時間であり、指定した時間を過ぎて問い合わせがあると再度ドメインコントローラから情報を取得します。


●/etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = UNIX-POWER.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true 

[realms]
 EXAMPLE.COM = {
 kdc = kerberos.example.com
 admin_server = kerberos.example.com
 }

 UNIX-POWER.LOCAL = {
 kdc = test.unix-power.local
 } 

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM<br>


Kerberosの設定は/etc/krb5.confにて行っています。パラメータの意味を以下に示します。

default_realm ADのドメイン名を設定します。smb.confのrealmのと同じ値を全て大文字で記載します
[realms] Kerberosに関する情報を格納するセクションです。どのれるむに関する設定か指定します
kdc レルムでチケットの発行を行うサーバを指定します。チケットはKerberosのユーザ認証に利用されます。ADのDCに該当しFQDNの形式で利用されます
[domain_realms] DNS名とレルムのマッピングを設定します


●/etc/nsswitch.conf

<省略>
passwd:     files winbind
shadow:     files winbind
group:      files winbind
<省略>


●/etc/pam.d/system-auth

auth required pam_env.so 
auth sufficient pam_unix.so nullok try_first_pass 
auth requisite pam_succeed_if.so uid >= 500 quiet 
auth sufficient pam_winbind.so use_first_pass 
auth required pam_deny.so 

account required pam_unix.so broken_shadow 
account sufficient pam_localuser.so 
account sufficient pam_succeed_if.so uid < 500 quiet 

session optional pam_keyinit.so revoke 
session required pam_limits.so 
session optional pam_mkhomedir.so 
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid 
session required pam_unix.so


最後にKerberos認証に必要なチケットを取得するためにkinitを実行します。チケットの発行はDCで行われるためkinitの引数にWindowsサーバのドメイン管理者を指定します。これを実行する際にはpassword serverで指定している名前とドメインコントローラに設定されている名前が一致していないと失敗するのであっていない場合は合わせてから実行してください。

# kinit administrator
Password for administrator@UNIX-POWER.LOCAL:*********
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@UNIX-POWER.LOCAL

Valid starting     Expires            Service principal
02/03/13 12:50:06  02/03/13 22:50:10  krbtgt/UNIX-POWER.LOCAL@UNIX-POWER.LOCAL
        renew until 02/10/13 12:50:06

# net ads join -U administrator
Enter administrator's password:*********
Using short domain name -- UNIX-POWER
Joined 'SAMBA' to realm 'unix-power.local'
No DNS domain configured for samba. Unable to perform DNS Update.
DNS update failed!


チケットの取得に成功したらnetでADドメインに参加します。ADドメインに参加するときは利用するプロトコルとしてadsを指定します。
このコマンドを実行するときはLinuxサーバがDNSに登録されている必要があります。


DNS登録を行わずにjoinしようとすると

# net ads join -U administrator 
Enter administrator's password:*********
Using short domain name -- UNIX-POWER
Joined 'SAMBA' to realm 'unix-power.local'
No DNS domain configured for samba. Unable to perform DNS Update.
DNS update failed!


となってしまいます。DNS登録を行なってからjoinを試みると

# net ads join -U administrator
Enter administrator's password:*********
Using short domain name -- UNIX-POWER
Joined 'SAMBA' to realm 'unix-power.local'


成功しました。
以下のコマンドでwinbindを起動します。

# /etc/rc.d/init.d/winbind start


以下のコマンドでユーザ情報を取得してます。-uでユーザ名、-gでグループ名を取得できます。ドメインユーザであればユーザ名の前にWindows風にドメイン名がつきます。

# wbinfo -u
SAMBA\user01
UNIX-POWER\administrator
UNIX-POWER\guest
UNIX-POWER\krbtgt

# wbinfo -g
UNIX-POWER\domain computers
UNIX-POWER\domain controllers
UNIX-POWER\schema admins
UNIX-POWER\enterprise admins
UNIX-POWER\cert publishers
UNIX-POWER\domain admins
UNIX-POWER\domain users
UNIX-POWER\domain guests
UNIX-POWER\group policy creator owners
UNIX-POWER\ras and ias servers
UNIX-POWER\allowed rodc password replication group
UNIX-POWER\denied rodc password replication group
UNIX-POWER\read-only domain controllers
UNIX-POWER\enterprise read-only domain controllers
UNIX-POWER\dnsadmins
UNIX-POWER\dnsupdateproxy


これでADアカウントを用いて既にログイン可能な状態ではあるのですがログインのタイミングでホームディレクトリが自動作成されるよう以下のコマンドでそれを有効にします。

# authconfig --enablemkhomedir --update
nslcd を起動中:                                            [  OK  ]
nscd を起動中:                                             [  OK  ]


上のコマンドで有効となります。例えばSSHでログインする場合、アカウント名はUNIX-POWER\アカウント名となります。ホームディレクトリの位置などは以下のようになります。

$ pwd
/home/UNIX-POWER/unixpower


ドメイン名をつけるのが面倒な場合、これを省略することも可能です。/etc/samba/smb.confでwinbind use default domain = trueとすることでユーザ名だけでログインが可能となります。設定を編集し、winbindを再起動して有効化します。

# vi /etc/samba/smb.conf
<省略>
[global]
   winbind use default domain = true
<省略>

# /etc/rc.d/init.d/winbind restart

再度、ユーザ、グループ名を取得してドメイン名がなくなったことを確認します。

# wbinfo -u
SAMBA\user01
administrator
guest
krbtgt
unixpower

# wbinfo -g
domain computers
domain controllers
schema admins
enterprise admins
cert publishers
domain admins
domain users
domain guests
group policy creator owners
ras and ias servers
allowed rodc password replication group
denied rodc password replication group
read-only domain controllers
enterprise read-only domain controllers
dnsadmins
dnsupdateproxy
unix-power



 関連記事
 Sambaのインストール( CentOS 5 )
 Sambaのインストール( CentOS 6 )
 Winbind+Windows2003のKerberos連携( CentOS 5 )
 Samba+ActiveDirectoryで権限わけ
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.