気まぐれSE日記

地方でエンジニアしてます

PostgreSQLによる認証

後でまとめます

sambaにMySQL/PostgreSQL認証モジュールを組み込む

認証というか、tdbsamをMySQLPostgreSQLに対応させた感じです。
今回使用したSambaは3.0.23、OSはVine 3.2


(このSQL認証モジュールはsambaのソースに付属してたが、このバージョンからモジュールが分離したらしいです。)

メイク


tar xfj pdbsql-0.1-samba_3.0.23.tar.bz2
cd pdbsql-0.1-samba_3.0.23
./configure --with-samba-dir=../sambaのソースがあるパス
make
make install

デフォルトでは /usr/local/samba/lib/pdb にインストールされる。

RPMで、sambaをインストールしてる場合は、下記の場所にコピーしてやる必要がある。
cp *.so /usr/lib/samba/pdb/.

とりあえず、メイクは終わり。

smb.confの設定


passdb backend = pgsql:test
test:pgsql host = localhost
test:pgsql port = 5432
test:pgsql user = samba
test:pgsql password = xxxxxx
test:pgsql database = samba
test:table = smbpasswd
test:logon hours column = NULL
上記補足、だいたいみればわかると思いますが....

passdb backend = pgsql:xxx xxxの部分は任意の文字列で、DB設定する際の接頭辞になる。
xxx:pgsql host = DBサーバのホスト名 or IP
xxx:database = DB名
xxx:table = テーブル名

logon hours column = NULL とするのは、PostgreSQLの場合、pdbedit -a hogehogeで登録時にエラーとなるため、この項目自体を除外させている。


PostgreSQLの設定

MySQLの解説しかなかったが、この辺見ながら、やってみた
http://pdbsql.sourceforge.net/pdb_mysql.html

今回使用したPostgreSQL は8.1、日本語のエンコードは、EUC-JPでDBを作成する。

# samba認証用のデータベースを作成
createuser samba
createdb -U samba samba

#テーブルを作成
ここでは、smbpasswdというテーブル名で作成した。


vi smbpasswd.sql


CREATE TABLE "smbpasswd" (

"username" varchar(255) NOT NULL,
"nt_username" varchar(255),
"nt_fullname" varchar(255),

"user_sid" varchar(255),
"group_sid" varchar(255),

"lm_pw" varchar(255),
"nt_pw" varchar(255),
"plain_pass" varchar(255),

"domain" varchar(255),

"home_dir" varchar(255),
"dir_drive" varchar(2),
"logon_script" varchar(255),
"profile_path" varchar(255),

"acct_ctrl" varchar(9),
"acct_desc" varchar(255),

"workstations" varchar(255),

"logon_divs" varchar(9),
"logon_hours" varchar(255),
"hours_len" varchar(9),
"munged_dial" varchar(255),

"logon_count" varchar(5),
"bad_password_count" varchar(5),

"logon_time" int,
"logoff_time" int,
"kickoff_time" int,
"pass_last_set_time" int,
"pass_can_change_time" int,
"pass_must_change_time" int,

"unknown_str" varchar(255),
"unknown_3" varchar(9),
"unknown_6" varchar(9),

PRIMARY KEY ("username")
);

psql -e -U samba samba < smbpasswd.sql


pdbedit -a hogehoge でユーザ追加してみる

結果


[root@test samba]# pdbedit -a hogehoge
new password:
retype new password:
Unix username: hogehoge
NT username:
Account Flags: [U ]
User SID: S-1-5-21-3162671038-3974766871-1557222398-2000
Primary Group SID: S-1-5-32-547
Full Name:
Home Directory: \\test\hogehoge
HomeDir Drive: s:
Logon Script:
Profile Path: \\test\hogehoge
Domain: hogehoge
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 火, 19 1月 2038 12:14:07 JST
Kickoff time: 火, 19 1月 2038 12:14:07 JST
Password last set: 水, 12 7月 2006 00:55:10 JST
Password can change: 水, 12 7月 2006 00:55:10 JST
Password must change: 火, 19 1月 2038 12:14:07 JST
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
LOG: クライアント接続に想定外のEOFがありました

PostgreSQLでエラーが出るが、登録自体はできている


psql -U samba samba -c 'select username,user_sid,group_sid from smbpasswd;'
username | user_sid | group_sid

                                                                                                                                                  • -

hogehoge | S-1-5-21-3162671038-3974766871-1557222398-2000 | S-1-5-32-547
(1 行)