您的位置:首页 > 数据库 > SQL

Debian系统下利用vsdftpd+Mysql实现虚拟用户登录(Debian+vsftpd+Mysql)

2013-07-10 18:06 716 查看
vsftpd是Linux系统中继Wu-ftpd之后又是款优秀的、普遍使用的FTp服务器。vsftpd是very secure FTP daemon的缩写,安全性是它的一个最大的特点。虚拟用户是指在FTP上拥有账号,并且该账号只能用于文件传输服务的用户,也称作Guest用户,该类用记可通过输入账号与口令来进行授权登录,进入系统后,其登录的目录为指定目录,一般情况下,该用户既可以上传也可以下载文件。

vsftpd的虚拟用户采用单独的用户名/口令保存方式,与系统账号分离,这大大增强了系统的安全性。vsftpd可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务中如Mysql。另外,vsftpd验证虚拟用户时采用PAM方式,由于虚拟用户的的用户名/口令被单独保存,因此在验证时,vsftpd需要一个系统用户的身份来读取数据库文件或者数据库服务器来完成验证,这就是guest用户,正如匿名用户也需要一个系统用户ftp一样,其中guest用户也可以被认为是用于映射虚拟用户。

下面在Debian系统下,利用vsftpd和Mysql数据库服务器实现虚拟用户。步骤如下:

1. 安装vsftpd: apt-get install vsftpd

2. 安装mysql及libpam-mysql : apt-get install mysql-server mysql-client libpam-mysql

3. 创建ftp目录:mkdir /home/ftp #如果存在就不用创建

4. 创建本地用户(系统用户),指定家目录,并不让其登录系统:useradd –d /home/ftp –s /usr/sbin/nologin ftpguest

5. 改变其用户组:chown ftpguest.nogroup /home/ftp

6. 创建用户的根目录:mkdir /home/zhangsan

mkdir /home/lisi

mkdir /home/wangwu


注:这里的创建了三个用户的根目录,这个根目录可以根据自己定义。


7.改变用户所在的组:chown
ftpguest.nogroup /home/zhangsan

chown
ftpguest.nogroup /home/lisi

chown
ftpguest.nogroup /home/wangwu

// 以下需要在数据库上操作

8. 登录数据库: mysql -u root -p 输入用户的密码

9. 创建数据库: create database ftpvuser //数据库的名字是ftpvuser

10. 使用ftpvuser创建用户表users:

mysql> use ftpvuser;

mysql>CREATE TABLE users (username varchar(20) NOT NULL, password varchar (40) NOT NULL, PRIMARY KEY (username)) ENGINE=MyISAM;

注://数据库命令结尾一定要有分号,创建了用户表users:
username 20字节非空,password 40字节非空,设置username为主键,类型为MyISAM.


注:
1)在其它版本中使用: TYPE=MyISAM,
但在mysql5.5.31版本中此语法错误,应用:ENGINE=MyISAM;



2)如果使用Mysql的password()函数加密时,用户表中password字段的长度应该大于40,
因为加密后密码字段的长度为41.
避免溢出!!!


11.为数据库授权,让本地用户能够访问数据库表中的内容,并设置本地用户访问数据库的密码:

grant select on ftpvuser.users to
ftpguest@localhost identified by 'debian' ;

12. 更新数据库文件: flush privileges;

13. 往表中插入用户名与密码:

mysql> insert into users(username,password) values('zhangsan','debian');

mysql>insert into users(username,password) values('lisi','debian');

mysql>insert into users(username,password) values('wangwu','debian');

14.退出数据库: quit

15. 修改认证文件:vi /etc/pam.d/vsftpd 为以下内容:

//检测用户ftpguest是否可以访问数据库表,口令以明文方式、不加密保存在数据库中

auth required /lib/security/pam_mysql.so user=ftpguest passwd=debian host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0

//管理用户ftpguest,口令以明文方式、不加密保存在数据库中

account required /lib/security/pam_mysql.so user=ftpguest passwd=debian host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0

16.vi /etc/vsftpd.conf vsftpd的配置文件,我的配置文件如下:

listen=YES
//关闭匿名用户
anonymous_enable=NO
//打开本地用户
local_enable=YES
local_umask=022
anon_upload_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
//将本地用户限制在家目录
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=ftp.vu
//开启虚拟用户登录
guest_enable=YES
guest_username=ftpguest
user_config_dir=/etc/user_config
//设置用户权限设置
listen_port=5555
//修改端口,不然会出现500 OOPS:could not bind listening IPV4 Socket
这样的问题
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10010
local_max_rate=200000
#下面是重点:
17.在/etc下面建立user_config文件夹,然后在/etc/user_config下面分别建立zhangsan lisi wangsu的配置文件:
zhangsan的配置文件:

anon_world_readable_only=NO //所有非匿名登陆用户被切换成guest_username指定的用户名
write_enable=YES
download_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_root=/home/zhangsan // 这里要写之前建立的用户的根目录
lisi的配置文件:
anon_world_readable_only=NO
write_enable=NO
download_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_root=/home/lisi
wangwu的配置文件:
anon_world_readable_only=NO
write_enable=YES
download_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_root=/home/wangwu

18. 重启vsftpd:/etc/init.d/vsftpd restart
注:不能用 service vsftpd restart
重启vsftpd
,该重启方式默认的是xinet方式,而配置中使用的是standone方式;不然会重启失败;

19.修改用户根目录的权限,不能有写权限: chmod a-w /home

否则会出现如下错误:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

20. user_config中的配置文件中不能有空格,不然会出现以下错误:

500 OOPS: bad bool value in config file for: write_enable

即配置文件中的write_able后面有空格!!!!

到此,在Debian系统上,利用vsftpd+mysql实现虚拟用户的步骤已经结束。

不过,如果该机子上如果没有安装Mysql,即没有第2步,虚拟用户存储在数据库服务器上即另外一台机子上,怎么实现呢?

例如:我的Debian系统上没有安装Mysql,我的主机地址是192.168.32.76,而Mysql数据库服务器的IP地址是:192.168.32.222。

我是这样做的:

一、登录到网页数据库服务器上完成上面数据库部分的操作即:建立新的数据库(ftpvuser)、为数据库添加用户(ftpguest,密码设置为debian)、为添加表(users)、插入数据(insert)、授权(grant)。

这里要注意的是授权:grant select on ftpvuser.users to
ftpguest@192.168.32.76
identified by 'debian' ;


二、修改认证PAM文件:(注意修改的是host为数据库的IP)

auth required /lib/security/pam_mysql.so user=ftpguest passwd=debian host=192.168.32.222 db=vsftp218 table=users usercolumn=username passwdcolumn=password crypt=0

account required /lib/security/pam_mysql.so user=ftpguest passwd=debian host=192.168.32.222 db=vsftp218 table=users usercolumn=username passwdcolumn=password crypt=0

基本上就这些,建议大家动手试一下吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: