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界面,此乃后话。
联系方式
-
mail: mail@num123.com
QQ: 76908265
日志分类
随机日志
日历
标签云
最新碎语
- 博客多年没更新了,但一直都在运行。天朝的管制太严格了,今天迁移到香港的服务器上。
2018-07-25 13:51
- 决心一下,行动要快。
2013-09-09 09:02
- 为灾区人民祈福!
2013-04-22 12:45
- 都是停电惹的祸
2013-03-17 20:06
- 假期结束,开始上班。
2012-08-13 07:17
- 堵到机场高速上了
2012-07-13 18:14
- 人生的计划永远赶不上变化。
2012-07-10 18:45
- 接受你所接受的,珍惜你所拥有的。
2012-05-11 14:13
发表评论: