使用vsftpd和PostgreSQL的虚拟主机

虚拟主机与vsftpd和PostgreSQL

本文档介绍如何安装使用PostgreSQL数据库而不是真实系统用户的虚拟用户的vsftpd服务器。 我在互联网上找不到任何这样的教程,所以当这个配置终于为我工作,我决定发布。 该文档基于FreeBSD 6.2,我最近被迫使用(我通常使用Debian)。 然而,该文档也适用于几乎任何Linux发行版(可能需要非常小的修改)。

好的,我们开始吧。

所需包

  • vsftpd
  • PostgreSQL Server / Client 7.4+
  • PAM_PGSQL

安装

PostgreSQL

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

在initdb之前设置你的postgres区域设置:

#vi /usr/local/pgsql/.cshrc: setenv PGLIB /usr/local/lib
# note: PGDATA can be overridden by the -D startup option
setenv PGDATA $HOME/data

#You might want to set some locale stuff here
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

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 - 我希望使用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=Welcome to FTP server
file_open_mode=0770
local_umask=0000
anon_mkdir_write_enable=NO
guest_username=vsftpd

默认情况下,pam_pgsql正在寻找文件/etc/pam_pgsql.conf中的配置 。 我可能会想到一个设置,我认为不同的服务与Postgres数据库中的不同的表。

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

# # All other connections by UNIX sockets
local all all ident sameuser
# # All IPv4 connections from localhost
# host all all 127.0.0.1 255.255.255.255 md5 host all tronix 0.0.0.0
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
Welcome to psql 8.2.4, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
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 will create implicit sequence "accounts_i_id_seq" for serial column "accounts.i_id"
NOTICE: CREATE TABLE / UNIQUE will create implicit index "accounts_s_username_key" for table "accounts"
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应该可以正常工作。

我知道有些事情可能会以不同的方式完成,但是这个文件应该能够很好地指导你。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏