サーバー設定 · 1 min read · Dec 16, 2025

vsftpdとPostgreSQLによるバーチャルホスティング

vsftpdとPostgreSQLによるバーチャルホスティング

この文書では、実際のシステムユーザーの代わりにPostgreSQLデータベースからのバーチャルユーザーを使用するvsftpdサーバーのインストール方法について説明します。インターネット上でそのようなチュートリアルを見つけることができなかったので、その構成が最終的に私のために機能したとき、私はそれを公開することに決めました。この文書は、最近使用を余儀なくされたFreeBSD 6.2に基づいています(通常はDebianを使用しています)。それにもかかわらず、この文書はほぼすべてのLinuxディストリビューションにも適しているはずです(非常に小さな修正が必要な場合があります)。

では、始めましょう。

必要なパッケージ

  • vsftpd
  • PostgreSQL Server/Client 7.4+
  • PAM_PGSQL

インストール

1. PostgreSQL

#cd /usr/ports/database/postgresql-server82
make install clean

initdbの前にpostgresのロケールを設定します:

#vi /usr/local/pgsql/.cshrc: setenv PGLIB /usr/local/lib

setenv PGDATA $HOME/data

#ここでいくつかのロケール設定を行うことができます
setenv PGDATESTYLE ISO
setenv LC_ALL pl_PL.ISO_8859-2

正しいエンコーディングでデータベースクラスターをインストールします(LC_ALLから取得):

su - pgsql
initdb -E latin2

2. PAM-PGSQL

cd /usr/ports/security/pam-pgsql
make install clean

pam-pgsql.soが/usr/libにあることを確認してください。SEGFAULTが発生した場合、pam_pgsqlが正しいパスにない可能性が高いです(私はpam_pwdfileを試したときにその問題に遭遇しました)。

ls /usr/lib/pam_pgsql.so

/usr/lib/pam_pgsql.so

3. vsftpd

cd /usr/ports/ftp/vsftpd
make install clean
echo “vsftpd_enable=\”YES\”” >> /etc/rc.conf
adduser vsftpd

4. そして今 … 設定ファイルの動作例

vsftpd - はpam設定ファイルの名前です /etc/pam.d/vsftpd。

vsftpd - は最近追加されたユーザーの名前です(ユーザーは例のlocal_umask=0000からlocalrootへの書き込みアクセス権が必要です - 私はファイルがchmod 77xで保存されることを望んでいました)。

#vi /usr/local/etc/vsftpd.conf:
listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty
pam_service_name=vsftpd
guest_enable=YES
user_sub_token=$USER
local_root=/usr/local/www/apache22/data/$USER
chroot_local_user=YES
hide_ids=YES
ftpd_banner=FTPサーバーへようこそ
file_open_mode=0770
local_umask=0000
anon_mkdir_write_enable=NO
guest_username=vsftpd

デフォルトではpam_pgsqlは/etc/pam_pgsql.confファイル内の設定を探しています。私は、異なるサービスを異なるテーブルに対して認証するセットアップを考えることができるかもしれません。

config_fileスイッチがその仕事をします - ファイルは次のようになります:

#vi /etc/pam.d/vsftpd:
auth required pam_pgsql.so config_file=/etc/pam_pgsql_vsftpd.conf
account required pam_pgsql.so config_file=/etc/pam_pgsql_vsftpd.conf

#vi /usr/local/pgsql/data/pg_hba.conf:
host system system 127.0.0.1 255.255.255.255 md5 local all pgsql ident sameuser

local all all ident sameuser

0.0.0.0 md5 host sameuser all 0.0.0.0 0.0.0.0 md5 host all all 0.0.0.0 0.0.0.0 reject

#vi/etc/pam_pgsql_vsftpd.conf:
debug
pw_type = md5
connect = hostaddr=127.0.0.1 port=5432 dbname=system user=system password=pass connect_timeout=15
auth_query = select s_password from accounts where s_username = %u
acct_query = select b_expired as acc_expired, 0 as acc_new_pwreq, (s_password ISNULL OR s_password = ‘’) as user_password from accounts where s_username = %u

Postgresテーブルとテストユーザーを作成しましょう:

#su - pgsql
#psql system

PostgreSQLインタラクティブターミナルへようこそ。

タイプ: \copyright 配布条件について
\h SQLコマンドのヘルプ
\? psqlコマンドのヘルプ
\g またはセミコロンで終了してクエリを実行
\q で終了

system=# CREATE TABLE “accounts”( “i_id” SERIAL, “s_username” VARCHAR(30) NOT NULL, “s_password” VARCHAR(50), “b_expired” BOOLEAN DEFAULT false, CONSTRAINT “accounts_s_username_key” UNIQUE(“s_username”) );

NOTICE: CREATE TABLEは、シリアル列”accounts.i_id”のために暗黙のシーケンス”accounts_i_id_seq”を作成します
NOTICE: CREATE TABLE / UNIQUEは、テーブル”accounts”のために暗黙のインデックス”accounts_s_username_key”を作成します
CREATE TABLE

system=# insert into accounts(s_username, s_password) values(‘testuser’,md5(‘secret_pass’));

INSERT 0 1

system=# select * from accounts;

i_id | s_username | s_password | b_expired
——+————+———————————-+———–
1 | testuser | baeed6d497bd4f4676306544a0e7faba | f
(1 row)

新しいバーチャルユーザーのためのフォルダーを作成しましょう:

mkdir /usr/local/www/apache22/data/testuser
chown vsftpd:vsftpd /usr/local/www/apache22/data/testuser
ls -la /usr/local/www/apache22/data/testuser

システム起動時にvsftpdを開始するために:

#vi /usr/local/etc/rc.d/vsftpd:

#!/bin/sh
/usr/local/libexec/vsftpd &

今すぐvsftpdを開始しましょう:

#/usr/local/etc/rc.d/vsftpd

… そしてvsftpdは正常に動作するはずです。

いくつかのことは異なる方法で行うことができることを認識していますが、この文書はあなたを導くのに十分良いはずです。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。