一、安装所需软件
1、MySQL 安装过程请见另一篇文章
2、vsFTPd
cd /usr/ports/ftp/vsftpd
make install clean
3、pam_mysql
cd /usr/ports/security/pam-mysql
make install clean
二、配置
1、添加虚拟用户映射的系统用户vsftpd,密码为空,禁止终端登陆,并设置相应的ftp目录:
# pw useradd vsftpd -s /sbin/nologin
# chmod go+rx /home/vsftpd (使其目录有写的权限)2、建立数据库vsftp和表users,logs
#mysql> create database vsftpd;
#mysql> use vsftpd;
#mysql> create table users ( id int AUTO_INCREMENT NOT NULL,name char(63) binary NOT NULL, passwd char(63) binary NOT NULL,primary key(id));
#mysql> Create table logs ( message Varchar(255),user Varchar(63),pid Int,host Varchar(63), rhost Varchar(63),logtime Datetime) ;
3、为mysql添加用户vsftpd 密码123456 并设制访问权限:
grant select on vsftpd.users to vsftpd@localhost identified by '123456';
grant all privileges on vsftpd.logs to vsftpd@localhost identified by '123456';
4、添加测试的虚拟用户, 其密码采取加密存放的方式
mysql> insert into users(name,passwd) values(’test1′,password(’123456′));
mysql> insert into users(name,passwd) values(’test2′,password(’123456′));
5、ee /etc/pam.d/vsftpd 文件,删除里面的内容添加下面两行:
auth required /usr/local/lib/pam_mysql.so config_file=/etc/security/pam_mysql.conf
account required /usr/local/lib/pam_mysql.so config_file=/etc/security/pam_mysql.conf
注意:上面两行没有回车符,空格用tab代替(不用tab代替也可以,个人喜好)
6、建立pam_mysql配置文件
ee /etc/security/pam_mysql.conf 填入下面内容:
users.host=localhost
users.database=vsftpd (数据库库名)
users.db_user=vsftpd (数据库用户名)
users.db_passwd=123456 (数据库访问密码)
users.table=users
users.user_column=name
users.password_column=passwd
users.password_crypt=2
verbose=1
log.enabled=1
log.table=logs
log.message_column=message
log.pid_column=pid
log.user_column=user
log.host_column=host
log.rhost_column=rhost
log.time_column=logtime
说明:用户信息表密码列crypt加密方式支持下列加密方式:
crypt=0,口令以明文方式(不加密)。
crypt=1,口令使用系统的DES加密方式加密。
crypt=2,口令经过MySQL的password()函数加密。
crypt=3,口令经过MySQL的md5()函数加密。
注:如果要使用3方式进行加密,务必把/etc/my.cnf里面的old_passwords=1改成old_passwords=0,否则mysql会使用老的加密算法,导致和pam_mysql.so密码验证不成功。
7、修改vsftpd.conf使其从mysql认证
# ee /usr/local/etc/vsftpd.conf
内容以如下
listen=YES
background=YES
chroot_local_user=YES
guest_enable=YES
guest_username=vsftpd
pam_service_name=vsftpd
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to this ftp server!
secure_chroot_dir=/usr/local/share/vsftpd/empty
user_config_dir=/etc/vsftpd_users
以上配置请自行探索。
8、限制用户目录和权限
# ee /usr/local/etc/vsftpd.conf 在vsftpd.conf中添加一行:
user_config_dir=/etc/vsftpd_users
mkdir /etc/vsftpd_users (在/etc目录中建立vsftpd_users目录)
cd /etc/vsftpd_users (进入vsftpd_users目录新建用户配置文件)
# ee test1 (文件名必需同用户名一至)输入配置信息:
local_root=/ftp/test1 (限制用户目录为/ftp/test1)
anon_upload_enable=YES (开放用户上传权限)
anon_mkdir_write_enable=YES (可新建文件夹)
anon_other_write_enable=YES (可删除文件)
保存退出
mkdir /ftp/test1 为FTP用户创建根目录
chmod -R vsftpd /ftp/test1 分配权限
启动vsftpd:/usr/local/libexec/vsftpd &
现在便可以用test1密码123456登录并上传文件了.
reference:
http://www.diybl.com/course/6_system/linux/Linuxjs/20090311/160564.html
http://www.xxlinux.com/linux/article/development/database/20051229/793.html
http://fanqiang.chinaunix.net/app/ftp/2005-09-15/3668.shtml