Windows NT/2000/XPマシンのユーザー認証の際に,sambaはsmbpasswdファイルを2回検索します。1回目はマシンアカウントの認証で,2回目はユーザーアカウントの認証です。そのため,非力なマシンで大量のユーザーの認証をしようとすると,取りこぼしが起きます。かといって,別のマシンにユーザー登録すると,その同期が大変です。
LDAPを使うことで,これらの欠点を解消することができます。
ここでは,既にsambaとLDAPはそれぞれ動いているものとし,sambaの認証をLDAPに移行するための変更手順を示します。
この二つのサービスは複雑なので,両方を同時にうまく動かすことはなかなか難しいことです。くれぐれもそれぞれが正常に動いている状況の下で,二つのサービスを統合することを考えてください。
既に動いているsambaの設定変更は次の2点です。
1)/etc/samba/smb.confの変更
#まず,認証に(smbpasswdでなく)LDAPを使うという宣言をします(samba3.0*以上)。
passdb backbend = ldapsam:ldap://localhost
#次にLDAPの管理者を指定しますが,現在動いているLDAPの設定ファイル/etc/openldap/slapd.conf
#に書いてあるとおりを記してください。(下記は例です)
ldap admin dn = cn=smbadmin,ou=people,dc=ikkzz,dc=ed,dc=jp
#sambaでは,Linux用のパスワードとWindows用のパスワードの2種類を使っています。
#パスワードを変更すると,この二つが異なってしまい,ややこしくなるので,同じにしておきます。
ldap passwd sync = yes
#次は,LDAPのデータツリー上のどの枝を,認証に使うのかの指定です。
#余計なクォーテーションやスペースを入れないようにしてください。
ldap suffix = dc=ikkzz,dc=ed,dc=jp
#ユーザーが登録されている枝を,上記の枝からの相対アドレスで指定します。
#下のように記せば,絶対アドレスではou=people,dc=ikkzz,dc=ed,dc=jpを指定したことになります。
ldap user suffix = ou=people
#グループが登録されている枝を,上記ldap suffix = の枝からの相対アドレスで指定します。
#下のように記せば,絶対アドレスではou=groups,dc=ikkzz,dc=ed,dc=jpを指定したことになります。
ldap group suffix = ou=groups
#マシンが登録されている枝を,上記ldap suffix = の枝からの相対アドレスで指定します。
#下のように記せば,絶対アドレスではou=machines,dc=ikkzz,dc=ed,dc=jpを指定したことになります。
ldap machine suffix = ou=machines
#Windows NTに付属のユーザーマネージャー(Windows 9x用はNEXUS.EXE,NT用はSRVTOOLS.EXE)
#でユーザー管理ができるようにするには次の7行を付け加えてください。
add user script = /usr/sbin/smbldap-useradd.pl -m '%u'
add group script =
/usr/sbin/smbldap-groupadd.pl '%g'
add machine script = /usr/sbin/smbldap-useradd.pl -w '%u'
delete user script = /usr/sbin/smbldap-userdel.pl -r '%u'
delete group script =
/usr/sbin/smbldap-groupdel.pl '%g'
add user to group script =
/usr/sbin/smbldap-groupmod.pl -m '%u' '%g'
delete user from group script =
/usr/sbin/smbldap-groupmod.pl -x '%u' '%g'
2)secret.tdbの作成
secret.tdbは,sambaユーザーの追加/変更の権限を持つ人物(上のldap admin dn)のパスワードを格納しておくファイルです。
[root@ysava root]# /usr/bin/smbpasswd -w
パスワード
settingstoredpasswordfor"cn=smbadmin,ou=people,dc=ikkzz,dc=ed,dc=jp"insecret.tdb
これで,sambaの設定は終りです。
次はLDAPの設定です。
sambaとLDAPの連携がうまくいくようにLDAPの設定ファイル(/etc/openldap/slapd.conf)を変更します。
#sambaのために4行目が付け加わりました。絶対必要なのは最初の4行です。
#残りの2行はLinuxの認証をLDAPにさせるために必要です。
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/samba.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/redhat/autofs.schema
#アクセス制御のための設定
#sambaのために二つの制御が真ん中に加わりました。上にあるものほど優先的に適用されます。
#この順序は変更できません。
access to attrs=userPassword
by self write
by * auth
access to attrs=lmPassword,ntPassword
bydn="cn=smbadmin,ou=people,dc=ikkzz,dc=ed,dc=jp" write
by*none
accesstodn.subtree="ou=people,dc=ikkzz,dc=ed,dc=jp""
bydn="cn=smbadmin,ou=people,dc=ikkzz,dc=ed,dc=jp" write
by*read
accesstodn.subtree="ou=group,dc=ikkzz,dc=ed,dc=jp"
by
* read
sambaは,Perlスクリプトを通してLDAPと連携しています。そこで最後にPerl関連の設定をします。
1)必要なファイルのダウンロードとインストール
Fedora Core 2をすべてインストールしていると大抵のものはそろっているのですが,次の4つのファイルが不足していますので,DAG からダウンロードしてください。
ダウンロード後,ファイルのあるディレクトリに移って,次のコマンドを入力してください。
[root@ysava root]# rpm -Uvh
perl-*
[root@ysava root]# rpm -Uvh smbldap-tools*
2)smbldap_conf.pmの設定
/etc/samba/smbldap_conf.pmに適切な設定を記述します。
#設定が完了したSambaを起動させた状態で,netコマンドによってドメインSIDを取得します。
# net getlocalsid ドメイン名
#と,コマンドを打ち,返ってくる値を貼り付けます。
$SID='S-1-5-21-1234397898-2193333';
#LDAPサーバーのアドレス。同じマシンなら下記のままです。
$masterLDAP = "127.0.0.1";
$slaveLDAP = "127.0.0.1";
#LDAPのデータツリー上の認証に使う枝の指定
#smb.confのLDAP suffix ldap user suffix ldap group suffix ldap machine suffixと同じになります。
$suffix="dc=ikkzz,dc=ed,dc=jp";
$usersou = q(people);
$computersou = q(machines);
$groupsou = q(group);
$hash_encrypt= "MD5";
#次の二つはslapd.confのrootdnと同じものを指定します。
$binddn="cn=smbadmin,ou=people,dc=ikkzz,dc=ed,dc=jp";
$bindpasswd = 'パスワード';
#次の二つはLinuxのログインシェルとユーザーのホームディレクトリの場所を指定します。
$_userLoginShell = q(/bin/bash);
$_userHomePrefix = q(/home);
#次の三つは,Windowsから見たホームディレクトリとプロファイルを置く場所を指定します。
$_userSmbHome = q(\\\\SAMBAPDC\\homes);
$_userHomeDrive = q(X:);
$_userProfile =
q(\\\\SAMBAPDC\\profiles\\
);
以上で,設定は終了です。サーバーを再起動して,上記の変更を有効にしてください。