vsftpd已经很安全了,但是使用系统用户不方便管理,以下是在Linux系统中用pam_mysql实现mysql虚拟用户认证的安装配置过程。

系统环境:
cat /etc/redhat-release
CentOS release 5.2 (Final)

vsftpd是CentOS(RedHat AS)自带的。
建立用于存放vsftpd虚拟用户的Schema的过程:

mysql -uroot -ppass

create database vsftpd;
grant all on vsftpd.* to vsftpd@localhost identified by "veryi.com" ;

use vsftpd;
create table users (
 id int AUTO_INCREMENT NOT NULL,
 name char(16) binary NOT NULL,
 passwd char(48) binary NOT NULL,
 primary key(id)
 );

describe users;

create table logs (msg varchar(255),
 user char(16),
 pid int,
 host char(32),
 rhost char(32),
 logtime timestamp
 );

describe logs;

插入用户信息:
insert into users (name,passwd) values('veryi',password('veryi.com'));
select * from users;

这里,用户密码这个字段的长度是48。这是根据MySQL加密函数的返回值的长度确定的。关于PASSWORD函数返回值的长度,可以参考这个:http://dev.mysql.com/doc/refman/4.1/en/password-hashing.html
select encrypt('foo');
| 4Wwn2AXFYb.So  |

select password('foo');
| *F3A2A51A9B0F2BE2468926B4132313728C250DBF |

select md5('foo');
| acbd18db4cc2f85cedef654fccc4a4d8 |

编译安装pam_mysql
下载:
wget -b http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz

tar xfz pam_mysql-0.7RC1.tar.gz -C /usr/local/src
cd  /usr/local/src/pam_mysql-0.7RC1
./configure –with-openssl –with-mysql=/usr/local/mysql
make && make install

加上–with-openssl可以避免make时报有关md5.h的编译错误

vi /etc/pam.d/vsftpd.mysql
auth    required        /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
account required     /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf

vi /etc/security/pam_mysql.conf
users.host=localhost
users.database=vsftpd
users.db_user=vsftpd
users.db_passwd=veryi.com
users.table=users
users.user_column=name
users.password_column=passwd
users.password_crypt=2
verbose=0
log.enabled=0
log.table=logs
log.message_column=msg
log.pid_column=pid
log.user_column=user
log.host_column=host
log.rhost_column=rhost
log.time_column=logtime

建立/etc/vsftpd/vsftpd.mysql.conf(同样,不影响已有的vsftpd服务,执行service vsftpd restart时会启动两个vsftpd服务,端口不一样)
主要的设置如下:
vi /etc/vsftpd/vsftpd.mysql.conf
l

vi /etc/vsftpd/vsftpd.mysql.conf
local_enable=YES
write_enable=YES
local_umask=002
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES

xferlog_file=/var/log/ftp/vsftpd.log

ftpd_banner=veryi.com, thank you
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
tcp_wrappers=YES
max_clients=100
max_per_ip=8
listen_port=21
pasv_enable=YES
pasv_min_port=58000
pasv_max_port=58129
guest_enable=YES
guest_username=vsftpdguest
virtual_use_local_privs=YES
anonymous_enable=no
pam_service_name=vsftpd.mysql
user_config_dir=/etc/vsftpd/vsftpd_user_conf
hide_ids=YES
ssl_enable=YES
ssl_tlsv1=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
force_local_data_ssl=NO
force_local_logins_ssl=NO

建立日志目录:

mkdir /var/log/ftp

重新启动vsftpd
/etc/init.d/vsftpd restart

创建虚拟用户
VSFTPD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为VSFTPD的guest。
useradd vsftpdguest
当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。
无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest。

虚拟用户的个人目录:
mkdir -p /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf
vi veryi
local_root=/usr/local/www

修改目录权限:
chown -R vsftpdguest.vsftpdguest /usr/local/www

 

日志轮询和分析统计:

cat ftp_stats.sh
#!/bin/sh
#writed by dayu*veryi.com
#
export PATH=/bin:/usr/bin

cd /var/log/ftp
/etc/init.d/vsftpd stop
mv vsftpd.log vsftpd.`date +%F`.log
/etc/init.d/vsftpd start

cd /var/www/cgi-bin/awstats
./awstats.pl -update -config=ftp.veryi.com

cd /var/log/ftp
bzip2 vsftpd.`date +%F`.log

 

加入cron每天自动执行:

crontab -e

0 4 * * * /home/yang/work/ftp_stats.sh

附调试时困扰了很长时间的一个问题
Q:
pam_mysql_check_passwd() returning 6.
A:
vsftpd pam_mysql
crypt=0 成功
crypt=2 不能登录,原因,centos 5.2自带的mysql启动,二进制安装的最新mysqld没有启动。

Q:

configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.

A:

yum install pam-devel -y

原创文章,转载请注明: 转载自素食勤俭敬老孝慈

本文链接地址: vsftpd用pam_mysql实现mysql虚拟用户认证安装配置

文章的脚注信息由WordPress的wp-posturl插件自动生成

Tags: , ,

2,161 views

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <font color="" face="" size=""> <span style="">