samba + LDAPでPDCを作ろう!(その3)

todaLDAP,ldap.conf,net rpc join,NTドメイン,openldap,PDC,samba,slapd.conf,smbldap-groupadd,smbldap-useradd,smbpasswd,windowsドメイン,スキーマ

夏も終わりにさしかかって、まだ昼間は暑いですけど、そろそろ朝夕は涼しくなってきました。
ずいぶん過ごしやすくなってきた気がします。油断すると風邪をひきそうですが、なんとか元気です。
todaです。こんにちわ。

さて、第3弾です。
繰り返しになりますが、まずは手順をもう一度確認しましょう。

1. PDC、メンバサーバに必要なパッケージをインストールする。
2. PDCのLDAPサーバを設定する。
3. PDC、メンバサーバのUNIXアカウントの解決するために、nss_ldapを設定する。
4. PDC、メンバサーバのsambaを設定する。
5. LDAPサーバににwindowsドメインの情報、アカウント情報を作成する。
6. メンバサーバをwindowsドメインに参加。

今回は後半の4.から6.までの手順を紹介します。

4. PDC、メンバサーバのsambaを設定する。
PDC、メンバサーバのsmb.confを設定します。

最初にPDC、メンバサーバ両方にドメイン名とコンピュータ名を設定しましょう。
ドメイン名はworkgroup, コンピュータ名はnetbios nameパラメータで指定します。

workgroup = MYGROUP
netbios name = <コンピュータ名>

PDC側はドメインコントローラーですので、sambaの動作モードを決めるsecurityパラメータをuserにします。これにより、このPDC自分自身でユーザの管理・認証を行うようになります。

ブラウザマスタ関連の設定を全て有効にして、各サブネットのブラウザ情報がPDC側に集まるようにします。PDCが確実にブラウザマスタになれるようにos levelは最高の99を指定しておきましょう。(os levelはブラウザマスタを選出するときの優先度で、この値が大きいマシンが優先されます)

ドメインログインを受け付けるため、domain logonsパラメータをyesにします。

security: user
os leve: 99
preferred master: yes
local master: yes
domain master: yes
domain logons: yes

ユーザ情報を格納するバックエンドは、自分自身のLDAPサーバを参照するようにします。

passdb backend: ldapsam:ldap://localhost/

ldap xxx suffix系のパラメータは以下の通りします。(ちなみにログインのためのパスワードはsmb.confではなく、smbpasswdで設定します。)

ldap admin dn = cn=root,dc=subdomain,dc=tricorn,dc=co,dc=jp
ldap suffix = dc=subdomain,dc=tricorn,dc=co,dc=jp
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap

複数のサブネットからなるWindowsネットワークを構築するためには、コンピュータ名からIPアドレスを解決するWINSサーバが必須になります。wins supportのパラメータを有効にしてPDCをWINSサーバにします。

wins support: yes

単一のサブネットで運用する場合も、通常ブロードキャストで解決する名前解決をユニキャストにすることができ、無駄なブロードキャストを抑制できますのでWINSサーバを設置することをオススメします。

メンバサーバ側のsecurityパラメータは外部のドメインコントローラを参照するdomainを指定します。

ブラウザマスタ関連のパラメータについては、単一サブネットで運用する場合はすべてnoでもかまいません。複数のサブネットにまたがる場合は、サブネットごとにローカルマスタが存在することを保証するためにlocal masterはyesにしたほうが良いでしょう。os levelはPDCより小さくしておきます。

security: domain
os leve: 80
preferred master: yes
local master: yes
domain master: no
domain logons: no

ユーザ認証はPDCに委譲しますので、password serverには自分のドメインのPDCを意味する"*"を指定します。passdb backend には標準のtdbsamのままにします。(メンバサーバ側はLDAPの設定は必要ありません。)

passdb backend: tdbsam
password server: *

WINSサーバの設定はPDCを参照します。PDCのホスト名(またはIPアドレス)を指定します。

wins support: no
wins server: (PDCのホスト名 または IPアドレス)

WINSサーバの参照設定は各Windowsクライアントにも必要ですので、直接設定するかDHCPで配布するのをお忘れなく。

最後に(PDC上で)LDAPサーバへログインするときのパスワードを、smbpasswdコマンドで設定します。

$ smbpasswd -W
Setting stored password for "cn=root,dc=subdomain,dc=tricorn,dc=co,dc=jp" in secrets.tdb
New SMB password:
Retype new SMB password:

5. LDAPサーバににwindowsドメインの情報、アカウント情報を作成する。

PDC上では、LDAPに格納するドメイン情報、アカウント情報を操作するためのsambaldap-toolsの設定を行います。

設定ファイルは2つにわかれます。/etc/smbldap-tools/smbldap.conf

最初にドメイン毎のSIDの設定とドメイン名の設定が必要です。SIDはPDC上で"net getlocalsid"コマンドで取得できますので、これをsmbldap.confのSID行、ドメイン名をsambaDomain行に記述します。

$ net getlocalsid
SID for domain LOCALHOST is: S-1-5-21-2542285151-1552460774-4074005947

##############################################################################
#
# General Configuration
#
##############################################################################

# Put your own SID. To obtain this number do: "net getlocalsid".
# If not defined, parameter is taking from "net getlocalsid" return
SID="S-1-5-21-2542285151-1552460774-4074005947"

# Domain name the Samba server is in charged.
# If not defined, parameter is taking from smb.conf configuration file
# Ex: sambaDomain="IDEALX-NT"
sambaDomain="MYGROUP"

あとは、参照するLDAPサーバのIPとポート番号と、ベースとなるsuffixを指定します。LDAPサーバが1台しかない場合はmasterとslaveに同じサーバーを指定しておきましょう。

# Slave LDAP server
# Ex: slaveLDAP=127.0.0.1
# If not defined, parameter is set to "127.0.0.1"
slaveLDAP="localhost"

# Slave LDAP port
# If not defined, parameter is set to "389"
slavePort="389"

# Master LDAP server: needed for write operations
# Ex: masterLDAP=127.0.0.1
# If not defined, parameter is set to "127.0.0.1"
masterLDAP="localhost"

# Master LDAP port
# If not defined, parameter is set to "389"
masterPort="389"

(中略)

# LDAP Suffix
# Ex: suffix=dc=IDEALX,dc=ORG
suffix="dc=subdomain,dc=tricorn,dc=co,dc=jp"

LDAPサーバへのログインDNとパスワードは/etc/smbldap-tools/smbldap_bind.confに記述します。
これもLDAPサーバが1台しかない場合はmasterとslaveの記述を同じにしましょう。

############################
# Credential Configuration #
############################
# Notes: you can specify two differents configuration if you use a
# master ldap for writing access and a slave ldap server for reading access
# By default, we will use the same DN (so it will work for standard Samba
# release)
slaveDN="cn=root,dc=subdomain,dc=tricorn,dc=co,dc=jp"
slavePw="password"
masterDN="cn=root,dc=subdomain,dc=tricorn,dc=co,dc=jp"
masterPw="passowrd"

ここまでくれば、smbldap-populateを実行することで初期データがLDAPサーバに作成されます。最後に聞かれるパスワードはsambaのrootユーザのパスワードですので、設定したら忘れないようにしておきましょう。

$ smbldap-populate

Populating LDAP directory for domain MYGROUP (S-1-5-21-2542285151-1552460774-4074005947)
(using builtin directory structure)

entry dc=subdomain,dc=tricorn,dc=co,dc=jp already exist.
adding new entry: ou=Users,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: ou=Computers,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: ou=Idmap,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: uid=root,ou=Users,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: uid=nobody,ou=Users,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Domain Admins,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Domain Users,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Domain Guests,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Domain Computers,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Administrators,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Account Operators,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Print Operators,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Backup Operators,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: cn=Replicators,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
adding new entry: sambaDomainName=MYGROUP,dc=subdomain,dc=tricorn,dc=co,dc=jp

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:

初期データが投入されたら、ユーザとグループを作成します。ユーザはsmbladp-useraddで追加します。基本的にはuseraddと同じです。

$ smbldap-useradd -a toda
$ smbldap-useradd -a ikeda
$ smbldap-useradd -a kame46
$ smbldap-useradd -a suzuki

各ユーザのデフォルトの所属グループは"Domain Users"になります。

$id toda
uid=1000(toda) gid=513(Domain Users) 所属グループ=513(Domain Users)

これらのアカウントはLDAP上に保存されています。ldapsearchで確認が可能です。
$ ldapsearch -h localhost -s sub -b "ou=Users,dc=subdomain,dc=tricorn,dc=co,dc=jp" -D "cn=domainservers,dc=subdomain,dc=tricorn,dc=co,dc=jp" -x -W

# toda, Users, subdomain.tricorn.co.jp
dn: uid=toda,ou=Users,dc=subdomain,dc=tricorn,dc=co,dc=jp
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: toda
sn: toda
givenName: toda
uid: toda
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/toda
loginShell: /bin/bash
gecos: System User
sambaPwdLastSet: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
displayName: toda
sambaAcctFlags: [UX]
sambaSID: S-1-5-21-2542285151-1552460774-4074005947-3000
sambaLMPassword: XXX
sambaPrimaryGroupSID: S-1-5-21-2542285151-1552460774-4074005947-513
sambaNTPassword: XXX
sambaLogonScript: logon.bat
sambaProfilePath: \\PDC-SRV\profiles\toda
sambaHomePath: \\PDC-SRV\toda
sambaHomeDrive: H:

グループはsmbldap-groupaddで作成します。こちらもgroupaddと同じです。

$ smbldap-groupadd "Domain Group1"

こちらもLDAP上エントリが保存されています。ldapsearchで確認が可能です。
$ ldapsearch -h localhost -s sub -b "ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp" -D "cn=domainservers,dc=subdomain,dc=tricorn,dc=co,dc=jp" -x -W

# Domain Group1, Groups, subdomain.tricorn.co.jp
dn: cn=Domain Group1,ou=Groups,dc=subdomain,dc=tricorn,dc=co,dc=jp
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: Domain Group1
gidNumber: 1004
sambaSID: S-1-5-21-2542285151-1552460774-4074005947-3009
sambaGroupType: 2
displayName: Domain Group1

ユーザ、グループの更新、削除などについても各コマンドがあります。詳しくはsmbldap-xxxxxx各コマンドのヘルプメッセージを確認してください。

6. メンバサーバをwindowsドメインに参加。

いよいよ最後のステップです。メンバサーバをPDCに参加させます。

次に、PDC側にコンピュータアカウントと呼ばれるアカウントを登録する必要があります。
メンバサーバのコンピュータ名をユーザとして登録します。
smbldap-useraddコマンドに"-W"オプションを指定します。

smbldap-useradd -W <コンピュータ名>

次にメンバサーバのsambaを一度停止して、メンバサーバ側で"net rpc join"コマンドでPDCにドメインへの参加を行います。
パスワードが聞かれますので、PDC側で設定したrootユーザのパスワードを指定してください。

/etc/init.d/smb stop
net rpc join -S -w <ドメイン名> -U
Password:
Joined domain MYGROUP.
/etc/init.d/samba start

お疲れさまでした。
これでメンバサーバがドメインに参加できました。

確認のため、メンバサーバのwindows共有にsmbldap-useraddで作成したアカウントでログインして空ファイルを作成してみましょう。
そのファイルの所有ユーザ・グループが正しく設定されていればOKです。

$ ls -al
合計 8
drwxrws--- 2 root Domain Users 4096 8月 31 01:26 .
drwxr-xr-x 3 root root 4096 8月 31 01:25 ..
-rwxr--r-- 1 toda Domain Users 0 8月 31 01:26 test.txt

ちなみに、既存のWindowsサーバをドメインに参加させる場合は、PDC側でコンピュータアカウントを作成して、
Windowsサーバ側でコンピュータのプロパティからドメインへ参加することができます。
ドメイン参加のときにユーザ名とパスワードが要求されますが、PDCのrootユーザとPDCのrootユーザのパスワードを指定してください。