「主婦電」トップへ
モニター報告トップへ

UNIX USER読者モニター報告 2003年12月号 
第1特集「Samba3.0がやってきた!」実践報告

ラスト・サンバは私に

(4)試合に勝って勝負に負けた?!: PDC構築編

/15)従来の方法でPDC構築/ 16)Samba+LDAPのしくみ/ 17)Red Hat Linux9へのLDAP導入/ 18)Red Hat Linux9へのSamba-3.0.0導入 / 19)BIND DNSサーバの立ち上げ(たぶん必要?) /20)slapd.confの設定 /21)LDAPクライアントの設定/ 22)Samba側の設定/ 23)smbldap-toolsの導入/ 24)smbldap-populate.pl / 25)ドメイン管理者domadd/ 26)参加成功!NONIKOドメイン/27)細かいことはまだ?/ 28)未完の結言/

15)従来の方法でPDC構築

実は、最近のSambaサーバは自分がNTドメインのPDCになれるということを、わたしはよく知らなかった。そこで、そもそも従来から対応しているという方法を試してみることにした。すなわちユーザとパスワードの管理はsmbpasswdで行い、smb.confの項目で

domain logons = Yes

とするだけでなれるという方法だ。
これは、本誌2001年12月号の特集「Sambaで行こう!」に書いてあるとおりにやったところ、少なくとも表面的には問題なく、 NONIKOドメインというものにクライアントS30を参加させることはできた。
ただひとつ。最初のうち単純なミスによるトラブルで、ドメインへの参加を試みたり取り消したり、ネットワーク内のコンピュータを開いてみたりガチャクチャやったあと、ドメインの参加をもう一回試みたらこんなエラーメッセージがでた。

「既存の資格情報のセットと一致しません」

この意味不明なメッセージは、Webで調べたらちゃんと解説してくれている人がいた。結構FAQらしいので、わたしもここに書いておけば誰かがヒットして役に立ててくれるかもしれない。このエラーは

ログアウトか再起動すると直るらしい

WindowsのNETBIOSってヤツは、一度取得した情報を結構長い間持っているんだそーな。だから一度パスワードを入れて接続したSamba共有は、そのあといちいちパスワードを入れずとも開いてくれる。その代わり、一度見つけたワークグループやドメインの名前は、それが消失したあとでも結構ウザイ間「近くのコンピュータ」にそのアイコンだけが現れていたりする。
わたしの場合は、一度「NONIKO」という名前のワークグループに参加させたあと、同じ「NONIKO」の名でドメインを立ち上げてそれに参加させようとしたりしたのが悪かったらしい。これはWindowsに文句をつける気はない。わたしがダサいことをやったと素直に反省する。


16)Samba+LDAPのしくみ

で、最後に Samba+LDAPによる環境構築を試みたのだが、わたしはそれまでLDAPというものについて全く知らなかったので、このままSolarisで試してみようとしてかなりの苦境に陥った。
その結果なんとなくここでやろうとしているSamba+LDAP環境のしくみがわかってきた。わかってきたっていうかあまりにも簡単なことがずっとわからないでじたばたしていたのだ。
つまり、Samba以前の問題として、「/etc/passwdには登録されていないがLDAPデータベースに登録されているユーザ」が、そのサーバマシン自体にログインできなければどーもこーもならない、ということだ。
これを理解するのにそーとーかかってしまった。アホだ。
よく、OSのインストールのときに「LDAP認証を有効にしますか」ときかれる、アレを(最終的に)有効にしてやんなきゃいけないということだ。
そうなるとSolarisで記事の実践をするには大きな問題がある。Solarisにはiplanet Directory Serverというものを利用したLDAPサーバ/クライアントシステムが最初っから載っかっているのだ。だからLDAP認証というモノを行おうと思えばシステムのあらゆる要素はこっちのビルトインシステムを利用しようとするだろう。それを全部断ち切ってOpenLDAPを参照させるようにする力はさすがにない。
おまけにこのiplanet Directory Serverのシステムでは、サーバとクライアントを同一マシンで機能させることはできないという制限がついているらしい。Solarisのシステム管理ドキュメントに「LDAPの欠点はサーバとクライアントを同一マシンにできないことです」と書いてあったが、それはLDAPの欠点ではなくチミの問題だろうがチミの。
ということで、ここでは、LinuxでSambaサーバを立て直すことにした。


17)Red Hat Linux9へのLDAP導入

さて、このまえセットアップしたRed Hat Linux9だが、「LDAP認証」など有効にしないでインストールしたものである。
これを調べてみると、openldap-2.0.27-8及びopenldap-devel-2.0.27-8というものが入っていたが、
openldap-clients, openldap-serversというものは入っていなかった。
ちなみに、「調べた」方法はWebminだった。他にわからなかったんだモン。Webminの「System」->「Software Packages」を選ぶ。

で、検索語に「openldap」と入力して、左側のSearchボタンを押す。

すると関係するものがでてきてくれる。これは、もうセットアップしちゃった後のリストです。最初はこのうち二つしきゃなかったというわけ。

追加するべきものは、ちゃんと赤帽9のインストールDVDに入っている。だがこれをあとから追加しようとするとかなりハマるかもしれない。
わたしの場合、File Rollerは立ち上がった瞬間死ぬ。コマンドラインは凍る。結局ちゃんとインストールできたのはWebmin経由だった。この「Software Package」のところにそういうツールがあるんだヨ。でもインストールはできたがldapサービスとしてもslapd自身を指名しても起動を試みると「失敗」の2文字が残るだけだった。

とーぜん、OSから入れ直し。いつもの「カスタムインストール」をさらにカスタマイズだ。
とはいえ、インストールのとき「LDAPを有効にする」は選ばないっていうか、LDAPサーバはこれから作ろうってんだから、選べない。
インストールパッケージの選択では「開発ツール」とか「システムツール」とかのコンポーネントを選択していく。このとき、「Windows共有サーバ(だっけ。つまりSamba)」は入れなかった。古いの入れたってしょうがない。でも、「DNSサーバ」はたぶん必要なんだろう。
そうした上で、さらに最後の「個々のパッケージをインストールする」にチェックをつけて「次へ」進む。
するとパッケージリストが現れるが、これもカテゴリを選ぶとそれに該当したパッケージリストが現れるしくみだ。どのカテゴリなんだLDAPは。ということで「全てのパッケージ」を選んで表示させる。アルファベ順に並んでいるのでoんとこを探す。
openldap-clients、openldap-servers, あと確かopenldap-develもあったはず。openldapそのものはリストにない。でもこうやって入ってるところを見るとつまり必須なのかな。あとの選べるヤツを3つ(確かネ)全部チェック。


18)Red Hat Linux9へのSamba-3.0.0導入

これはCD付録(「Smaba3.0」・・・スマバ?)から、libiconvのパッケージとsambaのパッケージをもらってきちゃう。前者、後者の順に、アイコンをダブルクリックするだけでインストール完了さッ。
LinuxのSWATは、Webminからもアクセスできた。やはり微妙に対応がいいのがなんかくやしい・・・

smb.confは記事の43ページリスト9を、個別事項だけ変えて書き換える。
わたしの環境は

ldap suffix = dc=noniko,dc=com
ldap admin dn = cn=root, dc=noniko,dc=com

だ。
ところで、SWATで作業すると、ちょと問題が。これはMozilla系で作業するときだけの問題かも知れない。以前からNetscape4系ではSWATに触ることは厳禁とされていた(システムが壊れるらしい)が・・・。

ldap machine suffix = ou=Computers

として、「設定変更」とやると、

ldap machine suffix = ou=Computers, dc=noniko,dc=com

と、suffixがついて表示されるようになる。ほう、自動で補間されているのか、などと軽く考えていると、以後何かを設定して「設定変更」を押すたびにこのsuffixがどんどんついてくる。知らないで何度も試してあとふと、smb.confファイルを直接開いたら

ldap machine suffix = ou=Computers, dc=noniko,dc=com,dc=noniko,dc=com,dc=noniko,dc=com,dc=noniko,dc=com

なんじゃこりゃあ〜、て感じだった。そこで、SWAT上では絶対に「設定変更」ボタンを押さないことにした。設定の変更はファイルのチョク書き。起動・終了のボタンだけのためにSWATを使う・・・ダサ。

これは、ldapのsuffix関係の記述が入ったときだけおかしくなった。ゆえに前の各章では気づかないでバンバン設定変更ボタン押してたけど、ダイジョブだったんだろうか。

ちなみに、ここではまだ、Sambaの起動はしない。記事によると、手順を間違えると結構痛いらしい。わたしも幾度かそれを実際に経験した。


19)BIND DNSサーバの立ち上げ(たぶん必要?)

実は本当に必要なのかどうかわからないのだが、BINDを一応立ち上げた。これからドメインに参加しようというWindowsマシンを登録しておく。Windows Server 2003を入れたOptiplexには、やんごとなき事情あってこのOSが再セットアップされ、再び何も構築されていないリッチなヒラマシンの状態になっている。そういえばコイツはptipleという名前で作業することが多かったじゃないか。Server 2003入れて何か別のマシンになったかのような気がして別の名前つけたりしてたが・・・ということでptipleという名前に戻した。 紛らわしくてスミマセン。なお、BINDの立ち上げはやっぱりWebminに限りますしろーとには。


20)slapd.confの設定

さて、slapdを立ち上げるにはsamba.schemaがいる。それはどこにあるのか。不慣れなわたしにはすぐにはわからなかったが、/usr/share/docにsamba-3.0.0というフォルダがあって、その中をさらにexamples/LDAPと開いていくと、samba.schema等スキーマファイルとsmbldap-toolsのフォルダが見つかった。
このsamba.schemaを、まあわたしの場合他にSambaは使わないし、ということで/etc/openldap/schema/samba.schemaとしてコピーする。
そしてslapd.confには、

include /etc/openldap/schema/samba30.schema

と書く。

suffix "dc=noniko,dc=com"
rootdn "cn=root, dc=noniko,dc=com"
rootpw ldaproot

パスワードldaprootはめんどくだいので平文デッス。よいシステム管理者はマネをしないでください。
そうして、サービスの起動は赤帽メニューのGUIツール「サービス」からヤッてしまった。
サービスのリストに「ldap」というのがあるから、チェックを入れて「起動」ボタンを押す。すると「ちゃんと起動しました」というメッセージボックスが現れる。ps -eコマンドをかましても、slapdのプロセスが見える。

こうして立ち上がったらしいが、まだ実感はない。


21)LDAPクライアントの設定

クライアントの設定はauthconfigで行うという。ルート権限でターミナルから

# authconfig

とやると、あのなつかしい旧時代的なインターフェイスが現れる。
「LDAPを使用」というのにチェックを入れる。サーバやベースDNはslapd.confの設定を自動的に見つけてくれている。
「次」に進んで「LDAP認証を使用」にもチェックを入れる。
だが赤帽の場合こうしたツールをアタマから信用してはならないことをわたしは知っている。今回/etc/ldap.confは内容変わってなかったゾ赤帽コラ。だが一番怖い/etc/pam.d/system-authはこのような記述が追加されていた。

auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass

account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] /lib/security/$ISA/pam_ldap.so

password sufficient /lib/security/$ISA/pam_ldap.so use_authtok

session optional /lib/security/$ISA/pam_ldap.so

4箇所も。これを自分の手で書くわけにはいかないだろう。怖い怖い。こうして

#service nscd start

とやった。実はこの(再)起動は結構大切なようで、データベースファイル/var/lib/ldap内のファイルを削除することにより手動で内容を初期化・・・なんてときに、やっておかないとslapdだけ再起動しても変更が反映されなかったりという経験をした。

実は、2002年1月号の特集「認証はLDAPで」及び2003年4月号の特集「Sambaによる認証統合」を併せて読むとより理解が進む(特に後者は同じ小田切氏が関連記事を執筆されている)。だが、これらが出たときは「エルダップ〜。わかんな〜い。たぶんウチじゃつかわな〜い」などと言っていたっけな・・・


22)Samba側の設定

まず、ldap関連の記述をちゃんと整えたsmb.confを、/etc/samba/smb.confに入れてやる。これ、何よりも重要だ。
そうして、

#smbpasswd -w ldaproot

と、ldap管理者のパスワードを入れた。

Setting stored password for "cn=root,dc=noniko,dc=com" in secrets.tdb

という答えが帰ってきた。これで成功のようだ。

で、初めてSambaを起動する。また、ここで起動しておかないと、

#net getlocalsid

とやったときに、エラーになった(起動しなかった理由は、無論忘れたからだ)。成功すると答えは

[2003/11/18 10:22:44, 0] param/loadparm.c:map_parameter(2422)
Unknown parameter encountered: "ldap idmap suffic"
[2003/11/18 10:22:44, 0] param/loadparm.c:lp_do_parameter(3150)
Ignoring unknown parameter "ldap idmap suffic"
[2003/11/18 10:22:44, 0] param/loadparm.c:map_parameter(2422)
Unknown parameter encountered: "delete user from goup script"
[2003/11/18 10:22:44, 0] param/loadparm.c:lp_do_parameter(3150)
Ignoring unknown parameter "delete user from goup script"
SID for domain NONI2 is: S-1-5-21-4041368227-261086536-1257326895

ハッハッハー。これは、smb.confの記述をスペルミスっていたためである。生々しいので出してみた。念のためこれらを直してもう一度sidをきいてみたが、帰ってきた値は同じだったのでホッとした。こいつを、次のsmbldap-toolsで使うわけである。
このSIDはあまり公にしてはいけないものなのかも知れない。この赤帽マシンはあくまで実験用なので、わりと平気で出しちゃったが。実用をお考えの方は十分お気をつけてください。


23)smbldap-toolsの導入

いや、長い。こんな長い道のりをよくついて行ったと自分でも感心している。モニター報告のチャンスを与えられなかったら、とても気力が持たなかったであろう。

まず、smbldap-toolsの導入に必要なPerlモジュールのゲットだ。これは、http://www.cpan.orgへ行って、
「Browsing」の「modules」をクリックすると、 modules/index.html ページに行くので、
そこで「all modules」というのをクリックして、モジュール全リスト出してからひとつひとつ取って行った。これが結構てっとりばやいかもヨ。
リストの一番最初のコラムに「module/category」てのがあって、これはアルファベット順だ。たとえば「IO」まで降りていくと、「IO-ナントカ」という一連のモジュールがあって、その中に「IO-Socket-SSL-0.95」が見つかる。というわけ。好みの問題ですネ。
記事43ページの注3には、ディストリビューションによって他にいるかも知れない依存モジュールが書いてあるが、Red Hat Linux9の場合はNet_SSLeay.pm-1.25だけが必要だった。

最初にNet_SSLeay.pm-1.25、あとは記事のリストの通りに、モジュールを解凍、perl Makefile.PL;make;make installの繰り返しだ。
Net_SSLeay.pmのセットアップのときに、「SSLがどのコンパイラでコンパイルされたかわかんないんですけど」という警告(ここではSSLは使ってない。少なくともわたしはそういう設定をしてない)が出た。
あと、XML-SAX-0.12のセットアップのときに、「ナントカファイルを初期化しますか?」と聞かれるのでYと答えると、最後のmake installのときに、「そんなファイルはないので初期化できません」と出て、そんなの知らねえヨと思った。
この二件以外は、なんの警告もエラーメッセージも出なかった。一番の親玉らしいperl-ldap-0.29は、必要なモジュールを全てチェックして、めでたくセットアップされたようだ。結果的にドメイン参加まではできたんだからまあいんでショ。それともあとでいくつか出た問題は、2件の警告と関係あるのかな・・・・。

で、ようやく、smbldap-toolsの導入である。これには、ソースフォルダ内の「INSTALL」を読むとよいようだ。
どうも、パッケージインストールが用意されているようなのだが、これはさっきセットアップしたはずのモジュールが見つからないというエラーメッセージ が出て成功しなかった。そこで、「INSTALL」に書かれている、「てっとりばやいがこぎたねえ方法」を採用することにした。

それには書いてないのだが、他にWebに出ている諸先輩の説明によると、まずsmbldap-tools/mkntpwdフォルダに行ってひとこと

#make

とやることにより、実行ファイルmkntpwdが生成される。それに実行権がついてることを確認したら、/usr/local/sbinに持って行く。これが必要のようだ。

次に、smbldap-toolsフォルダ内の全ての.plファイルと.pmファイルを、/usr/local/sbinに持って行く。
このとき、特定のファイルのアクセス権・所有者を設定するようにと、具体的なコマンド例つきで書かれている。この指示には絶対に従ったほうがいい。ていうかスクリプトファイルにはみんな実行権がついてないので、このままでsmbldap-populateをかまそうものなら、

insufficient access:

というメッセージとともに、あらゆる登録操作がことごとく失敗する。そりゃそうだ。smbldap-populate.plが呼んでいるスクリプト仲間smbldap-useradd.plに実行権がない、これがinsufficient access:メッセージの正体であった。わたしはこれがわからず、LDAP管理者のパスワードの問題なのかしら暗号化とかが絡んでいるのかしらと相当悩んだ。Webで調べても全く見つからなかった。そりゃそうだ。あまりにもアホなボ〜ンミスなので巷の話題にも上らないということだったのだ。でももぉーしかしてプチのに子ちゃんとかいて同じ問題にぶつかったりしてるかもと思ってあえて出した。

あと、smb.confに

domain admin group ="@"Domain Admins""

と記述せよ、ともあるが、これはSamba3.0ではいらないっていうか、むしろnetなどはこの記述がお気に召さないようだ。netコマンドをかましたときエラーだが無視するヨというメッセージを返してくる。
確かにSamba2.2.7を用いた過去の記事ではsmb.confのサンプルに上の記述はあるが、今回の記事ではない。変わったんだネ。

最後に、,pmファイルを、/usr/lib/perl5等、Perlがライブラリ参照する場所にリンクしとけとある。実は今これを書いている時点で気がついたのだが今回それを忘れていた。でもできちゃった。もしエラーになっていたらまたじたばたしていたのかとちょっとゾッとした。リンクしといて損することはないだろうから、しといたほうがいいんだろう。

ああ、もひとつ。smbldap_conf.pmの設定だ。こんな場所がある。

# Where are stored Users
# Ex: $usersdn = "ou=Users,$suffix"; for ou=Users,dc=IDEALX,dc=ORG
$usersou = q(_USERS_);
$usersdn = "ou=$usersou,$suffix";

これ、このままにしておいて、Solarisでsmbldap-populate.plをかましたところ、あとで登録データを見たら

# _USERS_, noniko.com
dn: ou=_USERS_,dc=noniko,dc=com
objectClass: organizationalUnit
ou: _USERS_

とか

# Administrator, _USERS_, noniko.com
dn: uid=Administrator,ou=_USERS_,dc=noniko,dc=com

みたくなっていた。つまり、q(_USERS_)の中身を読んじゃったことになるんだろうが、これではサフィクスがsmb.confの

ldap user suffix = ou=Users

と違っちゃってる。こりゃまずいんじゃないだろうか。そこでsmbldap_conf.pmを書き換えてしまった。

$usersou = "Users";
$usersdn = "ou=$usersou,$suffix";

とやったのである。変数$usersouは、スクリプトの他の場所で引用されているので、消すわけにはいかなかった。たぶん元のスクリプトでは環境変数か他の設定ファイルかから値を取ってくるように指定したのだろうが、チョクで指定しちゃったわけだ。これはあとからまた、直さなければならないことになる。


24)smbldap-populate.pl

よし。では、データの初期化だ。

#smbldap-populate.pl

Using builtin directory structure
adding new entry: dc=noniko,dc=com
adding new entry: ou=Users,dc=noniko,dc=com
adding new entry: ou=Groups,dc=noniko,dc=com
adding new entry: ou=Computers,dc=noniko,dc=com
adding new entry: uid=Administrator,ou=Users,dc=noniko,dc=com
adding new entry: uid=nobody,ou=Users,dc=noniko,dc=com
adding new entry: cn=Domain Admins,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Domain Users,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Domain Guests,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Administrators,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Users,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Guests,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Power Users,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Account Operators,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Server Operators,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Print Operators,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Backup Operators,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Replicator,ou=Groups,dc=noniko,dc=com
adding new entry: cn=Domain Computers,ou=Groups,dc=noniko,dc=com

っしゃー。である。ではどんなデータが登録されているのか。

# ldapsearch -x
とやると、

version: 2

#
# filter: (objectclass=*)
# requesting: ALL
#

# noniko, com
dn: dc=noniko,dc=com
objectClass: dcObject
objectClass: organization
dc: noniko
o: noniko

# Users, noniko, com
dn: ou=Users,dc=noniko,dc=com
objectClass: organizationalUnit
ou: Users

# Groups, noniko, com
dn: ou=Groups,dc=noniko,dc=com
objectClass: organizationalUnit
ou: Groups

# Computers, noniko, com
dn: ou=Computers,dc=noniko,dc=com
objectClass: organizationalUnit
ou: Computers

# Administrator, Users, noniko, com
dn: uid=Administrator,ou=Users,dc=noniko,dc=com
cn: Administrator
sn: Administrator
objectClass: inetOrgPerson
objectClass: sambaSAMAccount
objectClass: posixAccount
gidNumber: 512
uid: Administrator
uidNumber: 998
homeDirectory: _HOMEPREFIX_
・・・・
loginShell: /bin/false
gecos: Netbios Domain Administrator

# nobody, Users, noniko, com
dn: uid=nobody,ou=Users,dc=noniko,dc=com
cn: nobody
sn: nobody
objectClass: inetOrgPerson
objectClass: sambaSAMAccount
objectClass: posixAccount
gidNumber: 514
uid: nobody
uidNumber: 999
homeDirectory: /dev/null
・・・・
loginShell: /bin/false

# Domain Admins, Groups, noniko, com
dn: cn=Domain Admins,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 512
cn: Domain Admins
memberUid: Administrator
description: Netbios Domain Administrators (need smb.conf configuration)

# Domain Users, Groups, noniko, com
dn: cn=Domain Users,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 513
cn: Domain Users
description: Netbios Domain Users (not implemented yet)
memberUid: domadd

# Domain Guests, Groups, noniko, com
dn: cn=Domain Guests,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 514
cn: Domain Guests
description: Netbios Domain Guests Users (not implemented yet)

# Administrators, Groups, noniko, com
dn: cn=Administrators,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 544
cn: Administrators
description: Netbios Domain Members can fully administer the computer/sambaDom
ainName (not implemented yet)

# Users, Groups, noniko, com
dn: cn=Users,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 545
cn: Users
description: Netbios Domain Ordinary users (not implemented yet)

# Guests, Groups, noniko, com
dn: cn=Guests,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 546
cn: Guests
memberUid: nobody
description: Netbios Domain Users granted guest access to the computer/sambaDo
mainName (not implemented yet)

# Power Users, Groups, noniko, com
dn: cn=Power Users,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 547
cn: Power Users
description: Netbios Domain Members can share directories and printers (not im
plemented yet)

# Account Operators, Groups, noniko, com
dn: cn=Account Operators,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 548
cn: Account Operators
description: Netbios Domain Users to manipulate users accounts (not implemente
d yet)

# Server Operators, Groups, noniko, com
dn: cn=Server Operators,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 549
cn: Server Operators
description: Netbios Domain Server Operators (need smb.conf configuration)

# Print Operators, Groups, noniko, com
dn: cn=Print Operators,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 550
cn: Print Operators
description: Netbios Domain Print Operators (need smb.conf configuration)

# Backup Operators, Groups, noniko, com
dn: cn=Backup Operators,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 551
cn: Backup Operators
description: Netbios Domain Members can bypass file security to back up files
(not implemented yet)

# Replicator, Groups, noniko, com
dn: cn=Replicator,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 552
cn: Replicator
description: Netbios Domain Supports file replication in a sambaDomainName (no
t implemented yet)

# Domain Computers, Groups, noniko, com
dn: cn=Domain Computers,ou=Groups,dc=noniko,dc=com
objectClass: posixGroup
gidNumber: 553
cn: Domain Computers
description: Netbios Domain Computers accounts

・・・みたいな感じだ。これも、もしかすると あまりヒトにお見せするモノではないのかも知れない。あくまでこのLDAPサーバは実験終了後すみやかに閉じられるからこんな風に出しちゃったわけです。


25)ドメイン管理者domadd

そわーて。ではドメイン管理者を作成する。名前はdomadd。だが問題がひとつ生じた。記事のとおりにコマンドを打つと、このdomaddはヒラユーザとして登録されてしまっている。これはSolarisでやったときもLinuxでやったときも同じだった。

# domadd, Users, noniko, com
dn: uid=domadd,ou=Users,dc=noniko,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: sambaSAMAccount
cn: domadd
sn: domadd
uid: domadd
gidNumber: 513
homeDirectory: /dev/null
loginShell: /bin/false
gecos: System User
description: System User
・・・・
displayName: System User
sambaAcctFlags: [UX]
・・・・
uidNumber: 0

どうやらsmbldap-useradd.plは、グループのオプションを特定できなければ、デフォルトのgid=513(一般ユーザ向け)を当てるらしい。だからわたしの-gオプションの設定の仕方が悪かったんだとしたらゴメンナサイ。でも相当何度もやったんだけどなー。だいたいDomain(空白) Adminsなんて空白入りのグループ名システム変数にするなヨWindows。

uidNumberは0に変更できている。Webで調べた結果、どうやら、uidNumberが0であることは、非常に大切らしい。

さあどうする。とりあえずやることは一つしかないだろう。

# smbldap-usermod.pl -g 512 domadd
#

お!Solarisでこれやったときは、

group 512 doesn't exist

というエラーメッセージが出て、変更されなかった。でも、Linuxでは沈黙。ということは同意!?もう一度ldapsearchする(的絞れヨ・・・)と、今度はdn: uid=domadd,ou=Users,dc=noniko,dc=com の中身がgid=512になっていた!どうやら、変更はしてくれたようだ。

そうそう。そもそもこのユーザはシステムに登録されているんだろうか。

# id domadd
uid=0(domadd) gid=512(Domain Admins) 所属グループ=512(Domain Admins),513(Domain Users)

おおー!登録されている。それも管理者の資格をちゃんと与えられて!


26)参加成功!NONIKOドメイン

あわてるなヨ、のに子。まず、コンピュータを登録するんだからな。そして登録されたことを確かめろヨ。

# ptiple$, Computers, noniko, com
dn: uid=ptiple$,ou=Computers,dc=noniko,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: sambaSamAccount
cn: ptiple$
sn: ptiple$
uid: ptiple$
uidNumber: 1000
gidNumber: 553
homeDirectory: /dev/null
loginShell: /bin/false
description: Computer
・・・・

よしよし。ちゃんとコンピュータ扱いで登録されているな。でわ、ptipleを立ち上げる!さっきも言ったがOSはWindows Server 2003なんだが、何も働いてないヒラマシンだゾ。IPアドレスすらDHCPでうちの(真の)DHCPサーバからもらってる体たらくだ。BINDに登録したとおりに指定して、DNSと、あと忘れずにWINSサーバにも、Sambaサーバnoni2のアドレスを指定。
誰の許しを得てドメインに参加しようってんだエエッと聞かれて、domaddの名前とパスワードを入れる。
おお、Noni2(赤帽)のHDDがケケッと動いた。そして、

いや〜、特にめずらしくないメッセージボックスなんだが、記念に撮っちゃったヨン。
再起動しますかときかれて再起動する・・・・オイオイ、Server2003、シャットダウンのときは理由きいてくるくせに、再起動はおとがめなしかヨ・・・
えーと何でログインするんだろ?Administrator、ではダメだった。あ、そりゃそうだ。Sambaサーバ側でのパスワードとか全然設定してないもん。
ということはdomaddだな。さっきのパスワード(ったってどーせ禁断の同名パスワードだヨ)でログインする。

警告が2回出た。ユーザのローカルプロファイルが設定されていません。とりあえずおまかせでよろしいですか。みたいの。おう、もう煮るなり焼くなり勝手にしてくれ。すると、こんなものになった。

拡大図付きです。

御覧いただきたいのはログイン名「System User」。LDAPにdisplayName: System Userとあったのが反映されているんだな。
それから、かなりダサい絵になってしまったが、拡大図でわかるとおり、SambaサーバNoni2の中身がちゃんと見えている。そしてdomaddのホームディレクトリが表示されている・・・んだがこれはゴミ箱に指定したはずだよナ。クリックしてみると、アクセスできないとのこと。
だが、 自分で作った共有フォルダ「Samba」にはちゃんとアクセスできた。このスクリーンショットはそのフォルダ経由で今デスクワークをしているこのマシンにやってきたんだから確かだ。
また、Administratorは、Sambaサーバ上でパスワードを明示的に変更したら、そのパスワードでWindowsにもログオンできた。もっとも、やはりローカルプロファイルがないという警告を受けたが。

どうやら参加できたようなので、買い物に行く。当然ながら途中でいろいろな人々と行き会うが・・・今ここでSambaサーバをPDCにLDAP認証のNTドメインを構築できたばかりのわたしほど幸せな人はいないだろう、と思った(そうなのかッ!?)


27)細かいことはまだ?

さて、一回ドメインに参加してみると、LDAPのデータベースにこんな記述が加わっていた。確か、Windowsからドメイン参加を試みるまではん、なかったハズのものだが・・・

# NONIKO, noniko, com
dn: sambaDomainName=NONIKO,dc=noniko,dc=com
sambaDomainName: NONIKO
sambaSID: S-1-5-21-4041368227-261086536-1257326895
sambaAlgorithmicRidBase: 1000
objectClass: sambaDomain

それはいいとして(いいのか)、このNONIKOドメイン、まだいまいち環境があやふやのようだ。
(1)smbldap-useradd で生成したユーザが、Sambaマシン自体にログインできない。
(2)上記ユーザでWindowsにログインすると、プロファイルのパスが見つからないので読み込めないというエラーメッセージが出る。
(3)共有フォルダPublic,Profilesにアクセスできない(これは超アホな理由。後述)

で、調べてみる。どーも、LDAPデータベースに挿入されるこういう値が怪しいくさい。

sambaHomeDrive: _HOMEDRIVE_
sambaHomePath: \\_PDCNAME_\homes
sambaProfilePath: \\_PDCNAME_\profiles\domadd

これはdomaddのユーザ情報だが、やはり変数名がそのままテキスト挿入されてしまっているに違いない。
今更のように、smbldap-useradd で生成したユーザのホームディレクトリがSambaサーバ側にあるかどうか調べる。ない。
おそらく、 smbldap-useraddスクリプトにより自動作成されるべきものが、変数の受け渡しミスで、できないでいるのだろう。Perlはよく、ヌル値に対しては黙って無を返すからな。でもそれはかえってありがたかった。これだけたくさんの要素であれがヌルだこれがゼロだと言って止まられていたら、とにかくドメインに参加できるのかどうかということを、こんなに速く確かめることはできなかっただろうからな。
そこで書き直してみた。smbldap_conf.pmである。すでにouの値を直しているが、さらに直すわけだ。

# Login defs
# Default Login Shell
# Ex: $_userLoginShell = q(/bin/bash);
$_userLoginShell = q(_LOGINSHELL_); を $_userLoginShell = q(/bin/bash);

同様に直していく。

# Home directory prefix (without username)
#Ex: $_userHomePrefix = q(/home/);
$_userHomePrefix = q(/home/);

これで、まず、ユーザ作成の際、Sambaサーバの赤帽上にホームディレクトリが自動作成されるようになり、かつそのユーザで赤帽にログインできるようになった。(1)は解決だ。

さらに、

$_userSmbHome = q(\\\\_PDCNAME_\\homes); を $_userSmbHome = q(\\\\NONI2\\homes);
$_userProfile = q(\\\\_PDCNAME_\\profiles\\); を $_userProfile = q(\\\\NONI2\\profiles\\);

と書き換えて、ふと ?と思った。smb.confを調べて、わかった。なるほど、homesは各ホームディレクトリに対する共有名だ。
そして、 profilesは各ユーザのWindowsのユーザプロファイルを格納するための共有ディレクトリってわけか!
ここの設定がおかしいから、Windowsへログオンするたびに、「プロファイルが読み込めない」と言ってきたんだ!

よし、この共有名profilesのUnix上でのパスは、/var/samba/profilesとある。そこを調べて・・・
ようやくわかった。/var/samba/profilesとか、/var/samba/publicとかの共有フォルダは、自分で作っておくべきモノなのだ!どおりでアクセスしようったってできないわけだよ、存在しないんだもん。ギャッハッハッハ。

なーるほど。理屈はわかった。たとえば、/var/samba/profiles/noniko/というフォルダに、あの悪名高き「c:\Documents and Settings\noniko\」の中身が入るようになれば、ユーザプロファイルを読み書きすることができるはず、てんだな。
だが実践はできなかった。Windowsはプロファイルを格納もしくは読み出すべき場所を最後まで見つけてくれなかったのだ。
最後・・・・というのは、以下のようなことだ。この実験では、自作マシンのに子X号(赤帽)とOptiplex(Windows)を、市販の(そらそうだヨ)ディスプレイ・キーボード切り替え機で切り替えて使っている。それでガチャガチャやりすぎたのか、サポート外のUnixなどを使ったのが悪かったのか、それともシステムの設定をなにかヤッてしまったのか、どちらのOSも急に画面が凍り付いたり、「本当にログアウトしますか(しねーヨ!)」ときいてきたりし始めたのだ。そこで、危機感を感じたわたしは、

今回の実験これで打ち止め〜。

ちょうど気力もつきたところだ。 お読みの方も相当お疲れになったでしょう。我が実験に一片の悔いなしというわけにはいかないどころか、悔いも悔い大阪の悔い倒れという感じだが。おあとがよろしいようデス。

28)未完の結言

以上、Samba-3.0.0を使って、記事に従いいろいろと実験をしてみた。Windowsのヘボさなどを笑い飛ばしたかったのだが、LDAP導入でかなりハマったのでそんなヒマもなくなってしまった。肝心なところをLinuxに頼ってしまったのは達成感と敗北感がちょっと拮抗するビミョーな感じだが、LDAPというものに初めて取り組むことができたのは本当にいい機会だった。
今更ながら、Sambaというツールが、もはや単なるファイル共有にとどまらず、Windowsの機能をそっくりUNIXで実現するためのツールとして発展しつつあることを実感した。Windowsのファイル管理のめんどくささのためにWindowsサーバに折れた我が家だが、この様子ならまた将来UNIXサーバを採用できるかも知れない。