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

 
 Top - Linux - CentOS5 Samba + ドメインコントローラ




●Active Directory連携

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


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


ここではWindows Server2003で運用中のActive DirectoryドメインにSambaサーバを参加させるための設定方法に関して説明いたします。

Windows Server 2003
Active Directoryドメイン ad-domain.local
コンピュータ名 test
IPアドレス 192.168.1.200
Sambaサーバ
コンピュータ名 SAMBA
IPアドレス 192.168.1.151


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

# ldd /usr/sbin/smbd
        linux-gate.so.1 =>  (0xffffe000)
        libldap_r.so.2 => /usr/lib/libldap_r.so.2 (0xb7efe000)
        liblber.so.2 => /usr/lib/liblber.so.2 (0xb7ef2000)
        libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7ed6000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7e5a000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7e35000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7e31000)
        libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb7e2c000)
        libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7e19000)
        libcups.so.2 => /usr/lib/libcups.so.2 (0xb7dea000)
        libgnutls.so.13 => /usr/lib/libgnutls.so.13 (0xb7d7c000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb7d68000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7d55000)
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7d30000)
        libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb7d02000)
        libpam.so.0 => /lib/libpam.so.0 (0xb7cfa000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7cf6000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7cf0000)
        libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7cd9000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7cd5000)
        libpopt.so.0 => /lib/libpopt.so.0 (0xb7ccd000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7b9c000)
        libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb7b86000)
        libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb7b72000)
        libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0xb7b21000)
        libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0xb7b1d000)
        /lib/ld-linux.so.2 (0xb7f3b000)


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

# vi /etc/resolv.conf
search ad-domain.local
nameserver 192.168.1.200


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

net time /setsntp:[ntpサーバのIPアドレス],0x1
net stop w32time
net start w32time
w32tm /resync


AD連携機能を利用するための基本的な設定例を示します。

[global]
    dos charset = CP932
        display charset = UTF-8
        netbios name = SAMBA
        server string = %h server
        obey pam restrictions = Yes

        workgroup = AD-DOMAIN
        realm = AD-DOMAIN.LOCAL
    security = ads
        password server = TEST.AD-DOMAIN.LOCAL
        idmap uid = 30000-40000
        idmap gid = 30000-40000
        winbind enum groups = yes
        template homedir = /home/%U
        template shell = /bin/bash
        winbind enable local accounts = yes
        winbind use default domain = no
        winbind separator = +
        winbind cache time = 120
        obey pam restrictions = yes


以下にwinbindに関連するsmb.confのパラメータとその意味を示します。

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は性能向上のためにユーザ情報やグループ情報をキャッシュとして保持しています。このパラメータはキャッシュを保持する時間であり、指定した時間を過ぎて問い合わせがあると再度ドメインコントローラから情報を取得します。


続いてKerberos認証を利用するためにMIT Kerberosの設定を行います。Kerberosの設定は/etc/krb5.confにて行います。パラメータを以下に示します。

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


AD連携に必要なkrb5.confの設定は次のようになります。

# more /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 = AD-DOMAIN.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
# EXAMPLE.COM = {
#  kdc = kerberos.example.com:88
#  admin_server = kerberos.example.com:749
#  default_domain = example.com
# }

 AD-DOMAIN.LOCAL = {
  kdc = test.ad-domain.local
 }

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM

 ad-domain.local = AD-DOMAIN.LOCAL
 .ad-domain.local = AD-DOMAIN.LOCAL
[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }


/etc/nsswitch.confを編集します。

# more /etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#       nisplus or nis+         Use NIS+ (NIS version 3)
#       nis or yp               Use NIS (NIS version 2), also called YP
#       dns                     Use DNS (Domain Name Service)
#       files                   Use the local files
#       db                      Use the local database (.db) files
#       compat                  Use NIS on compat mode
#       hesiod                  Use Hesiod for user lookups
#       [NOTFOUND=return]       Stop searching if not found so far
#

# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd:    db files nisplus nis
#shadow:    db files nisplus nis
#group:     db files nisplus nis

passwd:     files winbind
shadow:     files winbind
group:      files winbind

#hosts:     db files nisplus nis dns
hosts:      files dns

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files

netgroup:   files

publickey:  nisplus

automount:  files
aliases:    files nisplus


PAMの設定を行います。

# more /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
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_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_winbind.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_winbind.so use_authtok password required pam_deny.so 

session optional pam_keyinit.so revoke 
session required pam_limits.so 
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid 
session required pam_unix.so 
session required pam_mkhomedir.so skel=/etc/skel umask=0022
アクセス時に/home下にディレクトリが存在しない場合に自動で作成する設定



上記のkrb.conf / smb.conf / nsswitch.conf / system-authは次のコマンドで対話形式に設定を行う事も可能です。ただし、細かい部分まで設定できませんの直接編集する必要性はあります。

# setup





最後にKerberos認証に必要なチケットを取得するためにkinitを実行します。チケットの発行はDCで行われるためkinitの引数にWindowsサーバのドメイン管理者を指定します。

# kinit administrator
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@AD-DOMAIN.LOCAL

Valid starting     Expires            Service principal
11/05/11 16:29:00  11/06/11 02:29:15  krbtgt/AD-DOMAIN.LOCAL@AD-DOMAIN.LOCAL
        renew until 11/06/11 16:29:00
11/05/11 16:29:40  11/06/11 02:29:15  test$@AD-DOMAIN.LOCAL
        renew until 11/06/11 16:29:00


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached


チケットの取得に成功したらnetでADドメインに参加します。ADドメインに参加するときは利用するプロトコルとしてadsを指定します。

# net ads join -U administrator
administrator's password:
Using short domain name -- AD-DOMAIN
Joined 'CENTOS2' to realm 'AD-DOMAIN.LOCAL'


以下のコマンドでwinbindを起動し、ユーザ情報の取得等を行なってみます。

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

# wbinfo -u
AD-DOMAIN+administrator
AD-DOMAIN+guest
AD-DOMAIN+support_388945a0
AD-DOMAIN+krbtgt
AD-DOMAIN+test

# wbinfo -g
AD-DOMAIN+helpservicesgroup
AD-DOMAIN+telnetclients
AD-DOMAIN+domain computers
AD-DOMAIN+domain controllers
AD-DOMAIN+schema admins
AD-DOMAIN+enterprise admins
AD-DOMAIN+cert publishers
AD-DOMAIN+domain admins
AD-DOMAIN+domain users
AD-DOMAIN+domain guests
AD-DOMAIN+group policy creator owners
AD-DOMAIN+ras and ias servers
AD-DOMAIN+dnsadmins
AD-DOMAIN+dnsupdateproxy
AD-DOMAIN+passwordpropdeny
AD-DOMAIN+unixgroup


またNSSの機能も含めてwinbindの動作を確認するにはgetentなどのコマンドを利用します。getentはシステムで利用可能なユーザ一覧をライブラリ経由で取得し端末上に表示します。ユーザ情報を取得するためにはpasswdオプションを指定します。またグループ情報を取得する場合にはgroupオプションを使用します。

# getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
avahi-autoipd:x:100:101:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
user1:x:500:500::/home/user1:/bin/bash
AD-DOMAIN+administrator:*:30000:30000:Administrator:/home/administrator:/bin/bash
AD-DOMAIN+guest:*:30001:30001:Guest:/home/guest:/bin/bash
AD-DOMAIN+support_388945a0:*:30002:30000:SUPPORT_388945a0:/home/support_388945a0:/bin/bash
AD-DOMAIN+krbtgt:*:30003:30000:krbtgt:/home/krbtgt:/bin/bash
AD-DOMAIN+test:*:30005:30000:test test:/home/test:/bin/bash

# getent group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:
games:x:20:
gopher:x:30:
dip:x:40:
ftp:x:50:
lock:x:54:
nobody:x:99:
users:x:100:
utmp:x:22:
rpc:x:32:
mailnull:x:47:
smmsp:x:51:
nscd:x:28:
floppy:x:19:
vcsa:x:69:
sshd:x:74:
rpcuser:x:29:
nfsnobody:x:65534:
pcap:x:77:
utempter:x:35:
slocate:x:21:
ntp:x:38:
dbus:x:81:
haldaemon:x:68:
avahi:x:70:
avahi-autoipd:x:101:
apache:x:48:
xfs:x:43:
sabayon:x:86:
stapdev:x:102:
stapusr:x:103:
screen:x:84:
oprofile:x:16:
audio:x:63:
ecryptfs:x:104:
stap-server:x:155:
user1:x:500:
AD-DOMAIN+helpservicesgroup:*:30002:AD-DOMAIN+support_388945a0
AD-DOMAIN+telnetclients:*:30003:
AD-DOMAIN+domain computers:*:30004:
AD-DOMAIN+domain controllers:*:30005:
AD-DOMAIN+schema admins:*:30006:AD-DOMAIN+administrator
AD-DOMAIN+enterprise admins:*:30007:AD-DOMAIN+administrator
AD-DOMAIN+cert publishers:*:30008:
AD-DOMAIN+domain admins:*:30009:AD-DOMAIN+administrator
AD-DOMAIN+domain users:*:30000:
AD-DOMAIN+domain guests:*:30001:
AD-DOMAIN+group policy creator owners:*:30010:AD-DOMAIN+administrator
AD-DOMAIN+ras and ias servers:*:30011:
AD-DOMAIN+dnsadmins:*:30012:
AD-DOMAIN+dnsupdateproxy:*:30013:
AD-DOMAIN+passwordpropdeny:*:30014:AD-DOMAIN+administrator
AD-DOMAIN+unixgroup:*:30015:AD-DOMAIN



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