vsftp+mysql实现虚拟用户登录安装配制

作者:网络医生 发布于:2010-12-10 8:14 Friday 分类:Linux技术

环境: RedHat AS 4  

一、前言

   Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用。

   Vsftpd的实现有三种方式:

   1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问。
   2、本地用户形式:以/etc/passwd中的用户名为认证方式。
   3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。(本文所介绍的安装方式)

二、下载Vsftp软件包

    下载地址:ftp://vsftpd.beasts.org/users/cevans/    里面有各种版本的Vsftp源码包

    http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz   //连接mysql数据库的一个模块
 

三、安装Vsftp

   1、解压 安装

     [root@localhost ~]# tar zxvf vsftpd-2.0.4.tar.gz

     [root@localhost ~]# cd vsftpd-2.0.4

     [root@localhost vsftpd-2.0.4]# vi builddefs.h 
     #ifndef VSF_BUILDDEFS_H
     #define VSF_BUILDDEFS_H

     #undef VSF_BUILD_TCPWRAPPERS
     #define VSF_BUILD_PAM
     #undef VSF_BUILD_SSL

     #endif /* VSF_BUILDDEFS_H */

     把undef改为define使之支持TCP_WRAPPERS和SSL,默认情况下是支持的PAM认证的,所以默认情况下安装后是不充许本地用户登录的,也就是不能以系统用户登录。要想以本地系统用户登录vsftp,那么就把define改为undef不使用PAM认证。

     如果要使用虚拟用户的登录方式,就必须把PAM认证打开。

     在vsftp安装程序中由于没有 ./configure 这一命令,所以无法指定安装目录。
 

     [root@localhost vsftpd-2.0.4]# make    //直接在解压后的目录中编译

     [root@localhost vsftpd-2.0.4]# ls vsftpd   //如果出现了vsftpd那么可执行程序就编译成功了

     [root@localhost vsftpd-2.0.4]#useradd nobody  //可能你的系统已经存在此帐号,那就不用建立
     [root@localhost vsftpd-2.0.4]#mkdir /usr/share/empty  //可能你的系统已经存在此目录,那就不用建立
     [root@localhost vsftpd-2.0.4]#mkdir /home/ftp       //建立匿名帐户登入目录

     [root@localhost vsftpd-2.0.4]#useradd -d /home/ftp ftp  //可能你的系统已经存在此帐号,那就不用建立

     [root@localhost vsftpd-2.0.4]# usermod -d /home/ftp/ ftp  //改变ftp用户的所属目录
     [root@localhost vsftpd-2.0.4]# chown root:root /var/ftp
     [root@localhost vsftpd-2.0.4]# chmod 755  /var/ftp

    安装vsftp配置文件,可执行程序,man等:

    [root@localhost vsftpd-2.0.4]# install -m 755 vsftpd /usr/local/sbin/vsftpd
    [root@localhost vsftpd-2.0.4]# install -m 644 vsftpd.8 /usr/share/man/man8
    [root@localhost vsftpd-2.0.4]# install -m 644 vsftpd.conf.5 /usr/share/man/man5
    [root@localhost vsftpd-2.0.4]# install -m 644 vsftpd.conf /etc/vsftpd.conf

     这样就安装完成了,下面我们开始进行简单的配置

2、建立虚拟用户

  虚拟用户有两种方式:可以用DB库文件来存储,也可以用mysql数据库来存储。

 下面就介绍用mysql数据库来存储虚拟用户。

进入mysql数据库创建用来存储虚拟用户名和密码的数据库表结构:

mysql> create database ftpusers;           //创建数据库ftpusers
mysql> use ftpusers;
mysql> create table user(id int not null auto_increment primary key, name varchar(128),passwd varchar(128));
mysql> insert into user (name,passwd) values ('test1','12345');          //插入用户和密码
mysql> grant select,insert,update on ftpusers.user to ftp@localhost identified by '123456';  
mysql> flush privileges;

建立存放日志的数据库:

mysql> CREATE TABLE log ( 
    -> msg VARCHAR(128), 
    -> user VARCHAR(128), 
    -> pid INT, 
    -> host VARCHAR(128), 
    -> rhost VARCHAR(128), 
    -> time TIMESTAMP 
    -> );

安装pam认证模块,使之可以连接mysql数据库

[root@localhost ~]# tar pam_mysql-0.5.tar.gz

[root@localhost ~]# cd pam_mysql

[root@localhost pam_mysql]# make     //编译

[root@localhost pam_mysql]# cp pam_mysql.so /lib/security/

建立PAM认证信息

[root@localhost ~]# vi /etc/pam.d/vsftpd

添加内容如下:

auth required /lib/security/pam_mysql.so user=ftp passwd=123456 host=localhost db=ftpusers table=user usercolumn=name passwdcolumn=passwd crypt=0  sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time

account required /lib/security/pam_mysql.so user=ftp passwd=123456 host=localhost db=ftpusers table=user usercolumn=name passwdcolumn=passwd crypt=0  sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time

如果日志数据库中没有日志记录,查看用户是否对数据库有写权限。

注:
crypt= n
crypt=0: 明文密码
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2: 使用MYSQL中的password()函数加密 

诺要使用password函数加密,需要修改my.cnf 配制文件,把old_passwords=1的值改为0即可。因为新的password()函数和旧的算法有区别。


logtable
日志表
logmsgcolumn
日志表消息列,记录日志消息主体。
logusercolumn
日志表用户列,记录访问ftp的用户。
logpidcolumn
日志表pid列,记录调用pam_mysql.so的进程的pid。
loghostcolumn
日志表host列,记录ftp服务器ip。
logrhostcolumn
日志表rhost列,记录ftp客户端ip。
logtimecolumn
日志表时间列,记录用户访问的时间。

 

[root@localhost ~]# vi /etc/vsftpd.conf

简单配制一下参数:

listen=YES    //使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
listen_port=21
tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
anonymous_enable=NO
local_enable=YES   //PAM方式此处必须为YES,如果不是将出现如下错误:
500 OOPS: vsftpd: both local and anonymous access disabled!
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES      //把用户限制在自己的家目录
guest_enable=YES
guest_username=ftp
 //这两行的意思是采用虚拟用户形式,用ftp这个用户连接,也可以建立指定其它用户名称
virtual_use_local_privs=YES //虚拟用户和本地用户权限相同

pam_service_name=vsftpd
//指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd

注: 每行值后面不能出现空格,否则启动时出错。

3、建立每个虚拟用户自己的家目录

 在配制文件vsftpd.conf中加一行  user_config_dir=/etc/vsftpd/vsftpd_user_conf

 然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:

[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

[root@localhost ~]# cd /etc/vsftpd/vsftpd_user_conf

[root@localhost vsftpd_user_conf]# touch test1

以上的操作为虚拟用户test1建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/test1。接下来,在test1的个人配置文件中将test1的自家目录修改为/home/test1,配置选项为:

vi test1  添加如下一行

local_root=/home/test1

 建立test1的个人目录

[root@localhost home]# mkdir test1

[root@localhost home]# chown ftp:ftp test1
[root@localhost home]# chmod 700 test1

4、启动vsftp

[root@localhost home]# /usr/local/sbin/vsftpd /etc/vsftpd.conf &       //以后台方式启动

如果要重新启,需杀死进程,再重新执行命令,杀死进程的脚本如下:

#!/bin/bash
a=`/bin/ps -A | grep vsftpd | awk '{print $1}'`
kill -9 $a
 

把上面内容保存在一个文件中执行即可。

 

注:为了方便管理,可以用PHP写一个添加用户和修改密码的WEB界面,此乃后话。

 

 

 

标签: mysql vsftp 虚拟用户

发表评论:

  • 8
  • 4
  • 7
  • 2
  • 1

Powered by emlog