postreqsql のインストール
yum install postgresql-server
# pam_pgsql をbuildするため
yum install postgresql-client
yum install postgresql-contrib
yum install postgresql-devel
pam_pgsqlのインストール
cd /usr/local/src/
wget https://github.com/pam-pgsql/pam-pgsql/archive/release-0.7.3.2.zip
unzip release-0.7.3.2.zip
cd pam-pgsql-release-0.7.3.2/
./autogen.sh
./configure –libdir=/lib64
#pamのlibが入っている
make
make install
# /usr/local/lib/security/pam_pgsql.so
vsftpd on postgresql
# su – postgres
-bash-4.1$ createuser vsftpd
新しいロールをスーパーユーザとしますか? (y/n)y
パスワード:
-bash-4.1$ psql -U postgres
ユーザ postgres のパスワード:
postgres=# alter user vsftpd with password ‘vsftpd’;
ALTER ROLE
-bash-4.1$ createdb vsftpd -U vsftpd
パスワード:
-bash-4.1$ psql -U vsftpd
ユーザ vsftpd のパスワード:
vsftpd=# CREATE TABLE “accounts”(
vsftpd(# “i_id” SERIAL,
vsftpd(# “s_username” VARCHAR(30) NOT NULL,
vsftpd(# “s_password” VARCHAR(50),
vsftpd(# “b_expired” BOOLEAN DEFAULT false,
vsftpd(# CONSTRAINT “accounts_s_username_key” UNIQUE(“s_username”)
vsftpd(# );
NOTICE: CREATE TABLEはシリアル列”accounts.i_id”用に暗黙的なシーケンス”accounts_i_id_seq”を作成します。
NOTICE: CREATE TABLE / UNIQUEはテーブル”accounts”に暗黙的なインデックス”accounts_s_username_key”を作成します
CREATE TABLE
vsftpd=# insert into accounts(s_username, s_password) values(‘xxxx’,md5(‘yyyyy’));
vsftpd設定
vi /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
anonymous_enable=NO
virtual_use_local_privs=YES
guest_enable=YES
local_root=/home/nilesflow/vsftpd_root/$USER
hide_ids=YES
guest_username=nilesflow
user_sub_token=$USER
chroot_local_user=YES
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES
vsftpd pam設定
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
vsftpd pam postgresql 設定
vi /etc/pam_pgsql_vsftpd.conf
debug
pw_type = md5
connect = hostaddr=127.0.0.1 port=5432 dbname=xxxxx user=xxxxx password=xxxxx 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
ディレクトリ作成
mkdir /home/nilesflow/vsftpd_root/nilesflow
local_rootでディレクトリ自動作成できないのが。。。
ディレクトリ作成できないのは、直接 secutil.c をいじればできるが(以下適当)
retval = str_mkdir(p_ext_dir_str, 0775);
chmod(str_getbuf(p_ext_dir_str), 0775);
retval = chown(str_getbuf(p_ext_dir_str), 0, 0);