samba + LDAPでPDCを作ろう!(その3)
夏も終わりにさしかかって、まだ昼間は暑いですけど、そろそろ朝夕は涼しくなってきました。
ずいぶん過ごしやすくなってきた気がします。油断すると風邪をひきそうですが、なんとか元気です。
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ユーザのパスワードを指定してください。
ディスカッション
コメント一覧
smbldap-populate の所で下記のエラーが出ました
Could not start_tls: Operations error at /usr/sbin//smbldap_tools.pm line 341.
のでsmbldap.confの82行目くらいの
ldapTLS=”1″ を”0″にしたらエラーがなくなりました。
又、214行目位のmailDomainを変更しました。
ずっと移動プロファイルが使えなかったのですが、先日原因がわかりました。
smb.confにあるnetbios nameに設定した名前とsmbldap.confのSAMBA ConfigurationにあるuserSmbHomeとuserProfileのサーバーの名前(\\の後)を同じにしていなかったのが原因でした。又、smb.confのデフォルトでは%u(小文字)を%U(大文字)にしないとprofilesにしまわれるユーザ名がadmin以外は全部 %u になった。