您的位置:首页 > 编程语言 > PHP开发

实现以虚拟用户登录vsftps

2012-03-27 11:57 323 查看
实现以虚拟用户登录vsftps
Vsftpd的三种用户:
匿名用户:就是映射为系统上的ftp用户
系统用户:就是位于/etc/passwd ,/etc/shadow,常以此模块认证pam_unix.so /etc/pam.d/system-auth
虚拟用户:常以此模块认证如:pam_listfile.so , pam_ldap.so , pam_mysql.so
下面是将用户的账号和密码放置于mysql中的表中实现以虚拟用户的身份登录vsftpd
前言:
要保证mysql已安装并能正常使用,之后安装pam_mysql模块
首先要明白pam默认是不支持mysql的认证的所以要想实现基于mysql的认证首先得先下载pam_mysql-0.7RC1(http://pam-mysql.sourceforge.net/)然后安装此模块,而mysql的模块安装又依赖mysql所以要确保mysql已安装并能正常的使用,并且还要明白的是凡是编译安装的源码包都要事先将开发包组装上了(Development Libries 和Development Tools)同时selinux 要处于permissive 或disable状态
说明:此次本机上的mysql安装目录为/usr/local/mysql 并正常
一、安装pam_mysql-0.7RC1
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql --with-openssl
# make
# make install
(--with-openssl是实现加密通信的(用此选项要确保openssl-devel已安装过) --with-myaql=要指明mysql的安装目录,以便能找到mysql的头文件和库文件)
或是直接将pam_mysql.la和pam_mysql.so拷至/lib/security/下即可
二、配置

1.准备数据库及相关表

在此,我们建立名为vsftp的数据库来存放相关虚拟用户的帐号

mysql> create database vsftpd;

mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
表示将对vsftpd数据库中的所有表的查询权限授予vsftpd@localhost用户,同时它的密码为123456
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456';
mysql>flush privileges;
mysql> use vsftpd;
mysql> create table users (
-> id int AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> name char(20) NOT NULL UNIQUE KEY,
-> password char(48) NOT NULL
-> );
注:password()的加密结果是48位所以password char(>=48)此处指定为48;AUTO_INCREMENT表示可以自动增加,在一个表中只能有一个字段能使用
mysql>DESC users;
添加测试的虚拟用户,其密码采取加密存放的方式

mysql> insert into users(name,password) values('magedu',password('123456'));
mysql> insert into users(name,password) values('marion',password('123456'));
注意:values中有字符的要加引号

验证下vsftpd用户是否可成功连接mysql:
#mysql –uvsftpd –p
mysql>show databases;
mysql>use vsftpd;
mysql>select * from users;

2.建立pam认证所需文件

#vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注:user=vsftp均为连接mysql的用户,usercolumn为users表中存放用户名的字段,passwdcolumn为users表中存放密码的字段
3.修改vsftpd的配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录
#useradd -s /sbin/nologin -d /var/ftproot vsftp
#chmod go+rx /var/ftproot

请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

为/etc/vsftpd/vsftpd.conf添加以下选项
guest_enable=YES
guest_username=vsftp(此处的用户为虚拟用户映射到的系统用户)

修改/etc/vsfptd/vsftpd.conf中的pam_service_name=vsftpd为如下内容:
pam_service_name=vsftpd.mysql(注:这样系统用户便不能登录vsftp了)
#service vsftpd restart
剩下的便是在ftp的客户端工具上测试下:

注意:默认情况下,所有虚拟用户的权限和匿名用户的权限相同,因前面anon_upload_enable=NO anon_mkdir_write_enable=NO 所以此处的虚拟用户是不能上传,创建文件,删除,重名文件,只可下载文件

实现不同的虚拟用户有不同的权限:user_config_dir
如:magedu可上传文件,marion只可下载文件
首先,建一目录并在此目录下创建针对不同用户的权限文件
#mkdir /etc/vsftpd/virusers
#cd /etc/vsftpd/virusers
#vim magedu
annon_upload_ebable=YES
annon_mkdir_write_enable=NO
annon_other_write_enable=NO
#vim marion
annon_upload_ebable=NO
annon_mkdir_write_enable=NO
annon_other_write_enable=NO
然后在vsftpd.conf中添加一行说明设置不同用户的权限的目录
#vim /etc/vsftpd/vsftpd.conf

增加如下行:
user_config_dir=/etc/vsftpd/virusers(指定设置不同用户权限的目录)
#service vsftpd restart
剩下的便是在ftp的客户端工具上测试下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: