vsftpd + mysql 配置虚拟用户

OS: Ubuntu 8.04 Server
kernel: 2.6.24-19-generic
vsftpd: 2.0.6-1ubuntu1
mysql-server: 5.0.51a-3ubuntu5

OS: Ubuntu 9.10 Server
kernel: 2.6.28-11-server,  2.6.31-22-generic-pae
vsftpd: 2.2.0-1ubuntu1,  2.2.0-1ubuntu2
mysql-server: 5.1.37-1ubuntu5.1,  5.1.37-1ubuntu5.4

ftp 根目录: /home/ftpsite
匿名帐号 anonymous : 只允许下载,根目录是 /home/ftpsite/anonymous
帐号 movie : 有密码 movie,只允许下载,根目录是 /home/ftpsite/movie
帐号 comet : 有密码 123456,相当于管理员,允许上传和下载,根目录是 /home/ftpsite

1.安装 vsftpd ,mysql-server
sudo apt-get install vsftpd mysql-server libpam-mysql
安装的过程中需要给 mysql 设置密码。

2.编辑 /etc/vsftpd.conf
sudo vi /etc/vsftpd.conf

listen=YES
listen_port=21
tcp_wrappers=YES
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd_user_config
pasv_min_port=10000
pasv_max_port=10100
use_localtime=YES
anonymous_enable=YES
max_clients=10
max_per_ip=5
local_enable=YES
write_enable=NO
local_umask=022
anon_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=Welcome to ShareKernel.Com FTP service.
chroot_local_user=YES
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

编辑好之后可以使用 grep -v "^#" /etc/vsftpd.conf确认^_^ ,以上选项后面注意不要带上空格。
选项说明参考:man vsftpd.conf
或:http://www.3gcomet.com/docs/vsftpd-man-zh.html

3.添加虚拟用户要用的帐号 virtual
sudo useradd  -d /home/ftpsite -s /bin/false virtual
# 给 virtual 设置密码
passwd virtual
# 修改 virtual 对 /home/ftpsite 的权限
chown -R virtual.virtual /home/ftpsite
chmod -R 700 /home/ftpsite

4.修改自动创建的用户 ftp 的权限
# 务必把 ftp 改到 virtual 组

usermod -g virtual ftp
# 把 ftp 的根目录改成 /home/ftpsite/anonymous
usermod -d /home/ftpsite/anonymous ftp
# 把 /home/ftpsite/anonymous 的权限增加执行权限,这是由于更改了根目录,为了避免在使用匿名用户打开 ftp 服务器时提示不能打开该文件夹
chmod 710 /home/ftpsite/anonymous
ls -l /home/ftpsite/anonymous

drwx--x---  3 virtual virtual    15 2008-10-15 01:08 anonymous

注意:
anonymous  的根目录不允许"777的完全权限"控制 ,否则会提示 refusing to run with writable anonymous root。在vsftpd.conf中anon_root 这个选项的根目录权限不能为777。

登录提示:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
如果启用chroot,必须保证ftp根目录不可写,那么用户根目录需要去掉写的权限,在目录下面再建立wwwroot,log等文件夹。

5.创建数据库
mysql -u root -p
create database vsftpd;
use vsftpd
create table users(name char(20), passwd char(20));
insert into users values('movie','movie');
insert into users values('comet','123456');
grant select, insert, update on vsftpd.users to virtual@localhost identified by 'virtual';

flush privileges;
# 倒数第二行语句是添加 virtual 用户,该用户对 vsftpd 数据库 users 表有查询,插入权限。

6.修改 vsftpd 的 pam 认证
sudo vi /etc/pam.d/vsftpd
# 下面只有两行,user 和 passwd 是刚才添加的用户和密码,db 是用户数据库,有 users 表,有 name,passwd 两列,passwd 密码列用的加密方式为0
auth required /lib/security/pam_mysql.so user=virtual passwd=virtual host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=virtual passwd=virtual host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0

crypt 的值说明:0: 在数据库中明文存储;1: 使用crypt()函数加密存储;2: 使用MySQL PASSWORD()函数加密存储;3:表示使用md5的散列方式
注意:
1.与mysql-server-5.0对应的libpam-mysql由于使用的PASSWORD()函数与服务器端使用的PASSWORD()不匹配, 故无法实现密码加密,仅可实现在数据库中明文存储ftp用户密码。 mysql-server-4.1 与 libpam-mysql( 0.5.0-6)可以实现在数据库中使用加密存储ftp用户密码。
2.如果vsftpd文件里面还有其他内容请查看:http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html 以获得帮助。最简单就是注释掉其他,只保留上面两行。

7.在 /etc/vsftpd_user_config 中建立用户个人配置文件,文件名为用户名
anonymous :
local_root=/home/ftpsite/anonymous
anon_world_readable_only=YES

movie :
local_root=/home/ftpsite/movie
anon_world_readable_only=YES

comet :
local_root=/home/ftpsite
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

8.重启并测试
sudo /etc/init.d/vsftpd restart

9.缺点
1.这里没有说到磁盘限额,是因为使用 vsftpd 搭建基于虚拟用户的 ftp 服务器在磁盘限额不够灵活,不能像 ProFTPD 那样直接在数据库里面设置。
如果需要使用磁盘限额,请浏览:ubuntu wiki 的 磁盘限额
2.没打补丁的 vsftpd 在 Windows 中同时使用 ftp 客户端和IE浏览中文会出现乱码,而仅使用其中一个进行上传或下载则不会,Linux 中两个都不会。

本文参考于:
http://debian.linuxsir.org/doc/inthedebianway/vsftpd/vsftpd.conf-8.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据