为vsftpd增加虚拟用户的mysql验证【存档】

一个客户有这个需求,已有个vsftpd server,应用需要给web用户每人配置一个ftp帐号,而且要锁定到不同的用户目录,应该是通过pam for mysql进行认证,在网上找了下资料做了,过程如下。
一、增加映射用户
增加一个系统用户,所有虚拟帐号都用此映射用户身份登录,而且虚拟帐号的目录都锁定到此映射帐号目录下。

bash# useradd ftpguest -s /sbin/nologin
bash# chmod 755 /home/vsftpdguest

二、配置Mysql
因为mysql已经编译安装过了现成的,和vsftpd在一台服务器,所以只需要建用户建表而已

mysql> CREATE DATABASE;
mysql> create table users(name char(16) binary,passwd char(16) binary);
mysql> INSERT INTO `users` (`name`, `passwd`) VALUES ('test1', '123456');
mysql> CREATE USER 'ftpguest'@'%' IDENTIFIED BY '123456';
mysql> GRANT all PRIVILEGES ON `vsftpd`.* TO 'ftpguest'@'%';
mysql> FLUSH PRIVILEGES;


三、安装pam_mysql

bash# wget http://downloads.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz
bash# tar zxvf pam_mysql-0.7RC1.tar.gz
bash# cd pam_mysql-0.7RC1
bash# ./configure --with-mysql=/data/app/mysql
bash# make & make install
bash# ls -l /lib/security/pam_mysql.*
-rwxr-xr-x 1 root root   905 May  3 14:41 /lib/security/pam_mysql.la
-rwxr-xr-x 1 root root 88201 May  3 14:41 /lib/security/pam_mysql.so

修改/etc/pam.d/vsftpd,注释掉以前的,新增如下
auth required /lib/security/pam_mysql.so user=ftpguest passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=ftpguest passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
crypt是指定用户口令加密类型,0表示明文不加密,1表示crypt(),2表示mysql的password(),3表示md5(),这个可自由选择。
四、修改vsftpd配置
修改vsftpd.conf,增加如下:

#使用系统时间,vsftpd默认是GMT标准时间
use_localtime=YES
#将本地用户锁定在用户主目录
chroot_local_user=YES
#允许非匿名帐号登录,而且所有非匿名帐号都映射成ftpguest帐号
guest_enable=YES
guest_username=ftpguest
#用户登录后锁定在自己的目录下,不能浏览其它目录
local_root=/home/vsftpdguest/$USER
#虚拟用户和本地用户使用相同的权限,NO则与匿名用户相同权限
virtual_use_local_privs=YES
#指定虚拟用户的配置文件目录
user_config_dir=/etc/vsftpd/vsftpd_user_conf

建立配置文件目录,为每个用户建立单独的配置文件

bash# mkdir /etc/vsftpd/vsftpd_user_conf
bash# echo "local_root=/home/ftpguest/test1" > /etc/vsftpd/vsftpd_user_conf/test1

为test1这个虚拟用户建立主目录

bash# mkdir /home/ftpguest/test1
bash# chown ftpguest:ftpguest /home/ftpguest/test1

重启vsftpd,现在就可以使用test1帐号登录了。

发表评论