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で行うことはできませんので、まずこれを作ってしまいましょう。

  1. 現在、インストールされているSambaのソースを取得するか、またはSRPMを取得します。私はVineのftpサイトからSRPMを取得したので、こちらでやりました。
  2. 私の場合、samba-3.0.10-0vl1.src.rpmを~/rpm/SRPMSへダウンロードし、「# rpm -ivh samba-3.0.10-0vl1.src.rpm」としました。
  3. ~/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
    
  4. SRPMSからmysql.soを生成する場合は、「$ rpm -bb samba3.spec」とします。 ソースを取得した場合は「make」します。

mysql.soのインストール

  1. 正常に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
  1. データベースを生成します。ここでは「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
  2. mysql.dumpというファイルがどこかにインストールされていると思います。これを探します。
    $ locate mysql.dump
    うちでは /usr/share/doc/samba-3.0.10/examples/pdb/mysql/mysql.dump がありました。
  3. データベースにテーブルを生成します。これは先ほど探したmysql.dumpを利用します。
    $ mysql -u root -p < /usr/share/doc/samba-3.0.10/examples/pdb/mysql/mysql.dump

smb.confの変更

  1. /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」は識別子なのでなんでもかまいません。
  2. 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」というエラーが表示されます。

Copyright©2001-2019 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org