![]() |
| Home | Diary | Desktop | Link | Update History |
ProFTPDとPostgresqlを連携する事により、FTPに接続するユーザーとパスワードをデータベースで
管理する事ができます。後々ユーザー管理用のWebアプリを作り、管理を簡単にすることができます。
FTPの用途としては、コンテンツ管理を主な目的としているので、anonymous FTPは許可しない
設定とします。
$ emerge -C net-ftp/proftpd $ USE="postgres" emerge net-ftp/proftpd
インストールされたProFTPのバージョンは1.2.9-r2 でした。
ProFTPdの認証をPostgreSQLと連携して行うために、PostgreSQL側の準備をします。
mod_sqlはグループを使用する等、細かな設定ができますが、ここでは最低限のテーブルと
カラムを作成します。テーブル ftp_userは以下の2つのカラムから成ります。
| user_id | passwd |
| 接続時のユーザー名を記録します。 |
接続時のパスワードを記録します。 パスワードは暗号化して記録します。 |
create table ftp_user ( user_id varchar(20) NOT NULL, passwd varchar(20) NOT NULL );
今回mod_sqlでは、nobodyユーザーでPostgreSQLに接続するよう設定します。
このため、nobodyユーザーの作成と、ftp_userテーブルのSELECT権限の
追加を行います。
$ createuser nobody以下のSQL文で権限の追加を行います。
grant select on ftp_user to nobody;設定ファイルの内容は下記の通りです。
#接続時に表示される文字 ServerName "ProFTPD Default Installation" #proftpdのプロセスを立ち上げっぱなしにする場合はstandalone #inetd 経由で立ち上げる場合は inetd ServerType standalone DefaultServer on #ServerTypeにstandaloneを指定している時に、proftpdが使用するポート #を指定します。デフォルトのままでよいでしょう。 Port 21 # 新しく作成されたファイルやディレクトリのパーミッションを指定します。 Umask 022 #ServerTypeにstandaloneを指定している時の最大クライアント接続数 MaxInstances 30 # ProFTPDを動作させるユーザーとグループを指定します。 User nobody Group nogroup #ファイルへの上書きを許可します。 <Directory /> AllowOverwrite on </Directory> #ホームディレクトリより上の階層へ移動できない DefaultRoot ~ #ユーザーテーブルでの認証を行う SQLAuthenticate users #パスワードにCRYPT方式の暗号化を使用する SQLAuthTypes Crypt #PostgreSQLへの接続情報 SQLConnectInfo hoge@localhost:5432 nobody #mod_sqlのログ出力先 SQLLogFile /var/log/proftpd #ユーザーテーブルのテーブル名とカラム名 SQLUserInfo d_user user_id passwd Null Null Null Null #デフォルトのUID SQLDefaultUID 21 #デフォルトのGID SQLDefaultGID 21 #デフォルトのホームディレクトリ SQLDefaultHomedir "/home/ftp/" #有効なシェルを設定しなくてよくなります RequireValidShell offSQLConnectInfo hoge@localhost:5432 nobody
データベース名 :hoge 接続先 :localhostのポート5432 ユーザー名 :nobody パスワード :なしパスワードはユーザー名の後にスペースを空けて記述しますが、設定ファイルに
SQLUserInfo ftp_user user_id passwd Null Null Null Null
ユーザー情報が記録されるテーブルおよびカラム名を記述します。構文は以下の様になります。
SQLUserInfo users userid passwd uid gid homedir shell users :ユーザーテーブル名 userid :ユーザーIDカラム名 passwd :パスワードカラム名 uid :UIDカラム名 gid :GIDカラム名 homedir :ホームディレクトリカラム名 shell :シェルカラム名
例ではテーブル名をftp_user、ユーザーIDが記録されているカラムをuser_id、
パスワードが記録されているカラムをpasswdとし、他のカラムは使用しないので
NULLとしています。
/etc/init.d/proftpd start
$ perl -e 'print crypt("hogehoge", "xx");'
とすると、暗号化されたパスワードが生成されます。"xx"の部分は自由に英数字2文字を