BLOGTIMES
2004/08/05

ProFTPdでquota

  proftpd 
このエントリーをはてなブックマークに追加

仕事用でサーバでホスティングをすることになったので、FTPサーバを作ることになりました。

幸いサーバにはProFTPdがインストールしてあったので、楽勝だと思っていたのですが、「ユーザーに容量を際限なく使われると困るのでなんとかquota*1をかけたい」といわれてしまったので、それを実現すべくいろいろと調べてみました。

quota用のモジュールは2種類?

ProFTPdでquotaを実現するには、そのためのモジュールを組み込む必要があるようです。そのモジュールにはmod_quotaというものと、mod_quotatabというものがあるようです。

さて、どちらがいいのかわからなくて困ってしまったのですが、

LunaTear: ProFTPd1.2.9 mod_quotatab mysql

"調べてみると通常のquotaだけではなく、ダウンロード転送量制限や、総転送量制限、転送ファイル数制限なども掛けられるようでなんだかよさげだったのでこっちで実装してみることにしました。"

この文句に引かれてmod_quotatabを導入することにしました。

今回は設定はほぼ丸写しさせていただいて、構成も同一のmod_quotatab+MySQLにしてみました。ftpのユーザを追加するときに/etc/passwdをいじらなくていいので、なかなか気に入っています。

インストール

1.2.9以前のバージョンを使う場合には、モジュールを別途ダウンロードする必要があります。
モジュールのダウンロードはこちらから。

ProFTPdのtarを解凍したディレクトリで以下を実行

./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-libraries=/usr/lib/mysql --with-includes=/usr/include/mysql/
make
make install

設定

daemonの管理にはDJBのdaemontoolstcpserverを使うのでServerType inetdを指定しています。

/usr/local/etc/proftpd.confに以下を追加

ScoreboardFile /var/run/proftpd/proftpd.scoreboard
PidFile /var/run/proftpd/proftpd.pid
RootLogin off
UseReverseDNS off
UseFtpUsers off
IdentLookups off
TimesGMT off
ListOptions "-a"
ServerType inetd

SQLConnectInfo proftpd@localhost:3306 proftpd proftpd
SQLAuthTypes Plaintext
SQLUserInfo users userid password uid gid homedir shell
SQLGroupInfo groups groupname gid members
SQLAuthenticate users* groups*
AuthOrder mod_sql.c

QuotaEngine on

SQLNamedQuery get-quota-limit SELECT "userid, quota_type, per_session, \
limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, \
files_out_avail, files_xfer_avail FROM users WHERE userid = '%{0}' AND \
quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "userid, quota_type, bytes_in_used, \
bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used \
FROM quotatallies WHERE userid = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, \
bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \
files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \
files_xfer_used = files_xfer_used + %{5} WHERE userid = '%{6}' AND quota_type = '%{7}'" quotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

MySQLの設定

ファイルサイズの指定はバイト単位なので、ちょっと設定しにくいかも。

mysql -u rootに続いて以下のSQLを実行

create database proftpd;
GRANT ALL PRIVILEGES ON proftpd.* TO proftpd@localhost IDENTIFIED BY 'proftpd';

use proftpd;

CREATE TABLE groups (
groupname VARCHAR(30) NOT NULL ,
gid SMALLINT(5) UNSIGNED NOT NULL DEFAULT 2000,
members varchar(255) default NULL,
PRIMARY KEY ( groupname ),
UNIQUE KEY gid (gid)
);

CREATE TABLE users (
userid VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
uid SMALLINT(5) UNSIGNED NOT NULL DEFAULT 2000,
gid SMALLINT(5) UNSIGNED NOT NULL DEFAULT 2000,
homedir VARCHAR(255) DEFAULT NULL,
shell VARCHAR(255) DEFAULT '/bin/true',
quota_type ENUM("user") DEFAULT 'user' NOT NULL,
per_session ENUM("false", "true") DEFAULT 'true' NOT NULL,
limit_type ENUM("soft", "hard") DEFAULT 'hard' NOT NULL,
bytes_in_avail FLOAT DEFAULT '0' NOT NULL,
bytes_out_avail FLOAT DEFAULT '0' NOT NULL,
bytes_xfer_avail FLOAT DEFAULT '0' NOT NULL,
files_in_avail INT UNSIGNED DEFAULT '0' NOT NULL,
files_out_avail INT UNSIGNED DEFAULT '0' NOT NULL,
files_xfer_avail INT UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (userid)
);

CREATE TABLE quotatallies (
userid VARCHAR(30) NOT NULL,
quota_type ENUM("user", "group", "class", "all") DEFAULT 'user' NOT NULL,
bytes_in_used FLOAT DEFAULT '0' NOT NULL,
bytes_out_used FLOAT DEFAULT '0' NOT NULL,
bytes_xfer_used FLOAT DEFAULT '0' NOT NULL,
files_in_used INT UNSIGNED DEFAULT '0' NOT NULL,
files_out_used INT UNSIGNED DEFAULT '0' NOT NULL,
files_xfer_used INT UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (userid)
);
  • *1: ディスクの利用制限をかける仕組みのこと。詳しくはここを。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/286
Trackbacks
このエントリにトラックバックはありません
Local Trackbacks
先日の作業でquotaの導入がうまくいったので素直に喜んでいたのですが、愛用しているFFFTPからアップしたファイルが見えないことが判明。 さて、困った。
(2004-08-07)
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン