也许很多朋友还没有遇到这个问题。可惜我碰到了。后来一直寻找解决的办法。目前,终于可以正常使用了。在此把配置的过程整理出来给大家参考一下。有需要的话就拿去用。
只是有点长,四五页只写mysql+vsftpd的配置过程。大家慢慢看吧。也欢迎提出疑问,如果有不合理的话,也希望能给予纠正。谢谢。

在安装系统分区时,强烈建议使用手动分区,这样做的目的是为了便于处理quota的问题。这里给个分区的建议:
/boot  100M
Swap  1024M   //很多资料都建议说是物理内存的两倍,所以,这个值可以根据各自的物理内存大小来设置
/      10240M  //这个分区一定要比所安装软件大小总和还要大,要不然不能正常安装系统,
/home  剩下的空间 //把所有的用户资料或内容都放在/home下,这样做的有一个好处是,如果系统崩溃,那么只要动用到/分区却可。

Vsftpd是目前在linux系统环境下表现最为优越的安全,稳定,快速的性能,加上Vsftpd的可读性强、易配置,受到更为广泛的应用。
Vsftpd有三种实现的形式,分别为:
1、  匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问;
2、  本地用户形式:以/etc/passwd中的用户名为认证方式;
3、  虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。

相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不让所有人匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。

下面将针对第三种Vsftpd的实现形式进行作详细的配置记录。

[[i] 本帖最后由 ankey 于 2007-11-28 09:16 编辑 [/i]]

ankey 2007-11-28 01:11
一:下载安装
在root目录下建个software,这样是为了把所有需要用到的软件都统一放在这里,方便管理。
Vsftp官方下载点:[url]ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.4.tar.gz[/url] 目前最新版本已为2.05。
下载pam-mysql:[url]http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz[/url] 最新版本已为0.7。

A. 开始安装vsftpd
# rpm -e vsftpd-**  //卸载原来低版本的vsftp
# cd /root/software/
# tar -zvxf vsftpd-2.0.4.tar.gz
# cd vsftpd-2.0.4
# make
把编译好的文件安装到相应目录下即可,没有相关目录请先创建。
# cp vsftpd /usr/local/sbin/vsftpd
# cp vsftpd.conf.5 /usr/local/man/man5/
# cp vsftpd.8 /usr/local/man/man8/
# cp vsftpd.conf /etc/

B. 启动mysqld服务
Mysqld可以直接使用系统自带的,只要启动起来即可。如下:
# service mysqld start/stop/restart  //启动/停止/重启mysqld
# chkconfig mysqld on           //设置为系统服务,跟随系统自动启动。

C. 安装Pam-mysql
由于是基于mysql的pam认证的虚拟用户配置,所以需要安装pam-mysql,系统默认无些服务,系统安装包里也无此软件,需要另外下载就是上述下载的安装包。
# cd /root/software/
# tar –zvxf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security

 

ankey 2007-11-28 01:12
二:服务配置

1.Vsftpd配置
配置vsftpd.conf,增加对每个虚拟用户的配置,并对每个虚拟用户详细权限进行配置。
创建/etc/vsftpd_user_conf目录,并在其下分别为虚拟用户test,test1,test2增加test,test1,test2三个配置文件。
# mkdir /etc/vsftpd_user_conf
# cd /etc/vsftpd_user_conf
# touch test test1 test2
#test,test1,test2配置文件根据需要设置相关vsftp的权限,比如test用户可以下载上传,修改,test文件内容如下:
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO  //可以浏览和下载有相关权限的文件(其他用户有可读和可执行权限)
local_root=/home/virtual/test     //锁定在相应的目录下,以防越权访问

主配置文件vsftpd.conf内容如下:
listen=YES                     //打开端口监听21
anonymous_enable=NO     //关闭匿名用户权限
local_enable=YES        //一定要yes,否则ftp登入会提示,本地用户和匿名用户都没有访问权限的提示
write_enable=NO               
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO     //在主配置中关闭所有的读写改权限。
guest_enable=YES
guest_username=virtual        //这两行的意思是采用虚拟用户形式
virtual_use_local_privs=YES   //虚拟用户和本地用户权限相同

user_config_dir=/etc/vsftpd_user_conf  //增加对每个虚拟用户的配置

anon_world_readable_only=YES  //不可以浏览和下载有相关权限的文件(其他用户有可读和可执行权限)
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
dirmessage_enable=YES
xferlog_enable=YES   
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
ftpd_banner=Welcome to lanmang.com FTP service.
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
max_clients=200
max_per_ip=4
check_shell=NO

2.虚拟用户配置
A.创建真实用户与虚拟用户的映射
# useradd virtual
# passwd virtual     //提示输入密码时请输123456
#必要时使用 : useradd -d /home/ftpsite -s /sbin/nologin virtual

B.创建数据库
# mysql –u root –p
Mysql>create database ftpd;
Mysql> use ftpd;
Mysql> create table user(name char(20) binary,passwd char(20) binary);
Mysql> insert into user (name,passwd) values (‘test’,'password’);
Mysql> insert into user (name,passwd) values (‘test1′,’password1′);
Mysql> insert into user (name,passwd) values (‘test2′,’password2′);
Mysql> grant select on ftpd.user to virtual@localhost identified by ’123456′;
Mysql>quit

A. 建立认证文件
# cd /etc/pam.d/
# touch ftp   //如果有就不用生成了。
# vi ftp      //内容如下:
auth required /lib/security/pam_mysql.so user=virtual passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=virtual passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

# 注意:
#crypt=0: 明文密码
#crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
#crypt=2: 使用MYSQL中的password()函数加密
#crypt=3:表示使用md5的散列方式#上面是两句配置,第一句是以auth开始的,第二句以account开始的。

 

ankey 2007-11-28 01:13
三:启动/关闭vsftpd服务
# /usr/local/sbin/vsftpd &
# vi /etc/rc.d/rc.local           //修改系统启动文件,在最后加入/usr/local/sbin/vsftpd & 作为系统服务,将会随着系统而启动。
#注:关闭服务为:killall vsftpd
#查看是否启动成功请使用netstat –ntl查看21端口是否起来。

四:配额设置
对用户做磁盘限额,限额功能是系统自带,不是vsftp功能!
对virtual用户主目录:/home/ftpsite/限制,修改/etc/fstab文件,重新启动计算机
A.编辑/etc/fstab文件,重新启动计算机,使限额功能生效
     # vi /etc/fstab
    把
LABEL=/home   /home   ext3    defaults     1 2
修改为:
LABEL=/home   /home   ext3    defaults,usrquota,grpquota     1 2
# reboot
    启动完成后:
    # cd /home
        # quotacheck –avug
        # quotaon -a
B.限额配置文件的修改
# edquota virtual //为用户virtual设置磁盘配额
          系统会自动打开配额文件,如下:
          Disk quotas for user virtual (uid 502):
          Filesystem         blocks       soft       hard     inodes     soft     hard
           /dev/sda2           424          0          0         13        0        0
#注:
#第一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数,单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。
inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的 绝对最大值。达到了该限度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期(grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0,那个限度就不会被设置。
C.要校验用户的配额是否被设置,我们可以使用以下命令:
# quota virtual
用以下命令显示磁盘配额使用状态:# repquota  -a

 

ankey 2007-11-28 01:13
一篇完整的vsftpd+mysql配置文档暂告一段落。
下面写一下,新添加用户的方法。
# mysql -u root -h localhost –p
mysql> use ftpd;
mysql> insert into user (name,passwd) values (‘test’,'password’);
mysql> quit
# cd /etc/vsftpd_user_conf
# touch test
# vi test
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO
local_root=/home/virtual/test

# cd /home/virtual/
# mkdir test
# chown virtual:virtual test
chmod 700 test

« »