« | »

2008年11月18日

mysql対応proftpdを作る

proftpdをただ入れるだけではつまらないんで、mysqlで認証させる機能もつけてコンパイルしてみた。
ゆくゆくはさらにpostfixもdovecot経由でユーザーを取って、このproftpdと同じユーザーにメール環境を提供するとを考えている。
とりあえず、このproftpdでは、実ユーザーで認証後、失敗すればmysqlに聞きに行く、という動作が目標である。
これをアパッチと連携させてこの実ユーザーでないユーザーにWEBスペース提供するのはapacheのAliasMachで簡単に実現できそう。
mysqlがprefix /usr/local/mysql 以下にインストールされているものとして話を進める。


mysqlにユーザDBを作る。
クエリはこんな感じ。

CREATE DATABASE dbname;
GRANT SELECT ON dbname.* TO dbuser IDENTIFIED BY 'dbpassword' ;
USE dbname;
CREATE TABLE groups (
groupname varchar(150) NOT NULL,
gid smallint(5) unsigned DEFAULT ‘1000′ NOT NULL,
members varchar(255),
UNIQUE KEY gid (gid),
PRIMARY KEY (groupname)
);
CREATE TABLE users (
userid varchar(150) NOT NULL,
passwd varchar(30) NOT NULL,
uid smallint(5) unsigned DEFAULT ‘1000′ NOT NULL,
gid smallint(5) unsigned DEFAULT ‘1000′ NOT NULL,
homedir varchar(255),
shell varchar(255) DEFAULT ‘/bin/false’,
PRIMARY KEY (userid)
);
INSERT INTO USERS SET userid = “userid”,passwd = “password”,homedir =”homedir”;
↑てな感じでユーザーを追加

Mysqlの準備は終わり。
proftpdのコンパイル
mysql認証対応バイナリをコンパイル
せっかくsolarisということで、gccでなく、SunStudioを使用
export CC=/opt/SUNWspro/bin/cc
export CXX=/opt/SUNWspro/bin/CC
export F77=/opt/SUNWspro/bin/sunf77
Sun Studio 12のコンパイラオプションは以下の通り。
export CFLAGS=" -fast -native -mt"
早く、ネイティブに、マルチスレッドに!(でも32ビット)
64ビットバイナリにすると後々別のバイナリからこのバイナリにリンクするときにややこしくなるので却下、64ビット化する場合は "-m64"を追加する。
コンフィグオプションは以下の感じで。

--prefix=/usr/local/proftpd --with-modules=mod_sql:mod_sql_mysql --with-libraries=/usr/local/mysql/lib/mysql/ --with-includes=/usr/local/mysql/include/mysql/

ちゃんとコンパイルできているかどうかは、
/usr/local/proftpd/sbin/proftpd -l
Compiled-in modules:
mod_core.c
mod_xfer.c
mod_auth_unix.c
mod_auth_file.c
mod_auth.c
mod_ls.c
mod_log.c
mod_site.c
mod_delay.c
mod_auth_pam.c
mod_sql.c
mod_sql_mysql.c

上の太字の部分を確認
デフォルトのFTPを止める
#svcadm disable svc:/network/ftp:default
#簡単にSMFのinetdに登録するには、
/etc/inetd.confに
ftp stream tcp nowait root /usr/local/proftp/sbin/in.proftpd proftpd
と書いた後、
inetconv と実行すればよい。
proftdpd.confの編集、特筆すべき部分だけを書くと以下のような感じ。

ServerType                      inetd
#mysql認証
<IfModule mod_sql_mysql.c>
    SQLAuthenticate             users
    SQLConnectInfo              dbname@localhost:3306 dbuser dbpassword
    SQLAuthTypes                Crypt
    SQLUserInfo                 users userid password uid gid homedir shell
    SQLGroupInfo                groups groupname gid members
  
#実ユーザーで認証後にいなければmysqlに問い合わせ
AuthOrder                   mod_auth_unix.c mod_sql.c  
</IfModule>
AllowOverwrite         on
#wwwグループはホームより上に上がれない
DefaultRoot ~ www
#レジューム許可
AllowStoreRestart on
AllowRetrieveRestart on
#モード変更許可
<Limit SITE_CHMOD>
AllowAll
</Limit>

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>