Samba3.0の認証をMySQLで行う |
2005/05/29 |
Vine Linux3.1付属のSamba3.0で、MySQLを使って認証することができましたのでメモを書いておきます。
最初にことわっておきますが、Vine3.1付属のSamba3.0だけではMySQLを使った認証はできません。
したがって、自身でSRPMやソースからmakeし直すか、うちでmakeしたものを利用することになると思います。
Samba認証をMySQLで行うメリット
smbpasswdでSambaの認証をするのがデフォルトになっていて、これより大規模運用だとLDAPを使われる方が多いと思います。
それをあえてMySQLにしようとしたのは次の理由からです。
- 認証の一元化。認証サーバとして使うためです。これはLDAPでもできますが、すでに安定してMySQL4が動いているため。
- Sambaの認証情報を他と流用できないか?たとえば、Apacheのベーシック認証とSambaの認証のデータベースを一本化したらうまくいかないかと思いました。
しかし、これは無理なのかもしれません。まだ試せていません。
- サーバ運用上、MySQLのデータをバックアップするとSambaの認証情報もバックアップされるため便利な場合があるかもしれません。
mysql.soを作る
Vine付属のSamba3.0ではmysql.soというモジュールが生成されていません。
しかし、これがないことにはSambaの認証をNySQLで行うことはできませんので、まずこれを作ってしまいましょう。
なお、うちでVine3.1+Samba3.0.10の環境で作ったものはここに置いておきますので、自己責任のおつもりでこれを使うことでもOKだと思います。
- 現在、インストールされているSambaのソースを取得するか、またはSRPMを取得します。私はVineのftpサイトからSRPMを取得したので、こちらでやりました。
- 私の場合、samba-3.0.10-0vl1.src.rpmを~/rpm/SRPMSへダウンロードし、「# rpm -ivh samba-3.0.10-0vl1.src.rpm」としました。
~/rpm/SPECS/samba3.specを以下のように変更します。ソースを取得した場合は「cd samba-3.0.10/source」とした後、同じようにconfigureします。
変更点は1箇所だけで、「--with-expsam=mysql」を追加しただけです。
%configure \
--with-expsam=mysql \
--with-fhs \
--with-libdir=%{_libdir}/samba \
--with-privatedir=%{_sysconfdir}/samba \
--with-lockdir=%{lockdir} \
--with-piddir=%{piddir} \
--with-logfilebase=%{logdir} \
--with-swatdir=%{_datadir}/swat \
--with-sendfile-support \
--with-automount \
--with-smbmount \
--with-pam \
--with-pam_smbpass \
--with-quotas \
--without-smbwrapper \
--with-utmp \
--with-syslog \
--with-profiling-data \
--with-libsmbclient \
%if %{ldap}
--with-ldap \
--with-ldapsam \
%else
--without-ldap \
%endif
%if %{jman}
--with-manpages-langs=en,ja \
%endif
--enable-cups
| |
- SRPMSからmysql.soを生成する場合は、「$ rpm -bb samba3.spec」とします。
ソースを取得した場合は「make」します。
mysql.soのインストール
正常にmakeできると~/rpm/BUILD/samba-3.0.10/source/bin/mysql.soが生成されているのでこれをインストールします。
ソースからmakeしたときにも同じところにmysql.soができます。
このサイトからmysql.soをダウンロードした場合も同様にインストールします。
$ su
# mkdir /usr/lib/samba/pdb
# install -m 0755 mysql.so /usr/lib/samba/pdb
なお、インストールする場所は、Vine3.1では上記でしたが、他の環境では違う可能性大です。
これはsmb.confを設定するとわかりますので、インストール場所がわからないときはインストールは後回しにしましょう。
データベースの準備
ここではすでに安定してMySQLサーバが動作しているものとして書きます。
また、次のような構成でSambaの認証用データベースを作ることとして書きます。
| データベース名 |
auth_db |
| MySQLユーザー |
samba_user |
| MySQLパスワード |
SAMBAPASS |
データベースを生成します。ここでは「auth_db」というデータベース名として書きます。
$ mysql -u root -p
mysql> CREATE DATABASE auth_db;
mysql> GRANT ALL ON `auth_db` . * TO 'samba_user'@'localhost' IDENTIFIED BY 'SAMBAPASS';
mysql> exit
mysql.dumpというファイルがどこかにインストールされていると思います。これを探します。
$ locate mysql.dump
うちでは /usr/share/doc/samba-3.0.10/examples/pdb/mysql/mysql.dump がありました。
データベースにテーブルを生成します。これは先ほど探したmysql.dumpを利用します。
$ mysql -u root -p < /usr/share/doc/samba-3.0.10/examples/pdb/mysql/mysql.dump
smb.confの変更
/etc/samba/smb.confを次のように編集します。以下ではMySQLを使った認証で必要となる部分だけを書いています。
|
[global]
passdb backend = mysql:myauth
myauth:mysql host = localhost
myauth:mysql user = samba_user
myauth:mysql password = SAMBAPASS
myauth:mysql database = auth_db
myauth:mysql table = user
|
各設定値は、データベースの生成時に設定した情報と同じにします。また、「myauth」は識別子なのでなんでもかまいません。
smbを再起動します。
# /etc/init.d/smb restart
ユーザーの追加方法
ユーザーの追加はsmbpasswdやSWATで追加するだけです。追加するとMySQLへレコードの追加が行われます。
これでMySQL+Sambaでの利用は可能となりました。
mysql.soのインストール場所の確認
mysql.soのインストール場所がわからない場合、smb.sonfを上記のように設定後、次のようにするとインストール場所がわかります。
# smbpasswd -D3 -a USERNAME
するとうちでは「Error loading module '/usr/lib/samba/pdb/mysql.so': /usr/lib/samba/pdb/mysql.so」と表示されました。
ここから、'/usr/lib/samba/pdb/mysql.so'へインストールすればよいことがわかりました。
なお、mysql.soがインストールされていないと「No builtin nor plugin backend for mysql found」というエラーが表示されます。
|