« Squidログサイズオーバー | メイン | リモートのsyslogをうけとる »

pure-ftpdでftpアカウント。MySQL版

pure-ftpdは標準でDBをつかったアカウント管理ができ、quata機能もある。 簡単な設定だし、かなり便利です。 認証には、MySQL、PostgreSQL、内蔵のVirtua User、独自ハンドラが使えますが、これはmysqlでの設定例。 本家のReadMeはここ
./configure --with-altlog --with-paranoidmsg --with-quotas --with-throttling --with-mysql
make install-strip --prefix=/usr
こまかいオプションはマニュアルを参考にしてください。
make install-strip
でインストール
/usr/local/sbin/pure-ftpd -b -A -B -E -I 5 -j -l mysql:/etc/pure-ftpd/mysql.cfg -l unix
このOptionで起動。 -b NLST対策 -A chroot -B backgroudで起動 -E 認証ユーザのみ -l タイムアウト -j 自動的にディレクトリを作成 -l 認証 ここでは認証はMysqlでの認証を先に、/etc/passwdでの認証をあとでおこないます。 /etc/pure-ftpd/mysql.cfg はMySQLの設定ファイル [code] MYSQLSocket /var/lib/mysql/mysql.sock MYSQLUser dbftpd MYSQLPassword hoge MYSQLDatabase dbftpd MYSQLCrypt cleartext MYSQLGetPW SELECT password FROM users WHERE user="\L" and NOW() >= start_date and NOW < expire_date and active='Y' MYSQLGetUID SELECT uid FROM users WHERE user="\L" and NOW()> = start_date and NOW < expire_date and active='Y' MYSQLGetGID SELECT gid FROM users WHERE user="\L" and NOW()>= start_date and NOW < expire_date and active='Y' MYSQLGetDir SELECT concat(dir,"/public_html") FROM users WHERE user="\L" and NOW()>= start_date and NOW < expire_date and active='Y' MYSQLGetQTASZ SELECT ftpquota FROM users WHERE user="\L" and NOW()>= start_date and NOW < expire_date and active='Y' [/code] MySQLのテーブル [code] create database dbftpd; grant select,insert,update,delete on dbftpd.* to dbftpd@localhost identified by 'hoge' ; use dbftpd; CREATE TABLE users ( user varchar(16) not null default '' , password varchar(64) not null default '' , uid int not null default '501' , gid int not null default '501' , dir varchar(128) not null, shell varchar(128) not null default '/bin/sh' , mbox_host varchar(64) not null default '' , start_date date not null default '0000-00-00' , expire_date date not null default '2030-01-01' , active enum('Y','N') not null default 'Y' , ftpquota int not null default '5' , quota_size int not null default '10240' , key user(user), key shell(shell), key home(home), key start_date(start_date), key expire_date(expire_date), key active(active) ); [/code] んで、ユーザをつくってみる。
                                             insert into users set user='test', password='383838'
                                             dir='/home/sites/test';
                                             
ディレクトリをつくる。
mkdir /home/sites/ユーザ名
もち、上で設定したuid、gidでアクセスできること。 テストはしていないので、これでできるかどうかは、わからない。 テーブルにその他の項目があるのは、qmailとの連係を考えてのこと。こっちはまだ研究中。