一个客户有这个需求,已有个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帐号登录了。