CentOS6.3+vsftpd+mysql+pam_mysql实现虚拟用户管理的ftp服务器

CentOS6.3+vsftpd+mysql+pam_mysql实现虚拟用户管理的ftp服务器

本文大部分内容学习自中国最大的Linux培训机构“马哥教育”www.magedu.com

一、准备相关软件以及开发环境

1、安装vsftpd mysql-server mysql-devel pam-devel

# yum -y install vsftpd mysql-server mysql-devel pam-devel

# yum -y groupinstall "DevelopmentTools"


2、编译安装pam_mysql认证模块(库)

先下载pam_mysql

#wget https://sourceforge.net/projects/pam-mysql/files/latest/download?source=typ_redirect  --no-check-certificate

 

编译安装pam_mysql

# tar -xf pam_mysql-0.7RC1.tar.gz

# cd pam_mysql-0.7RC1

# ./configure --with-mysql=/usr

# make

# make install

 

二、创建虚拟用户帐号

1、准备数据库及表

启动mysqld

# service mysqld start

#mysql

mysql> create database vsftpd;

mysql> grant select on vsftpd.* to'vsftpd'@'localhost' identified by 'vsftpd123';

mysql> grant select on vsftpd.* to'vsftpd'@'127.0.0.1' identified by 'vsftpd123';

mysql> flush privileges;

 

mysql> use vsftpd;

mysql> CREATE TABLE users (id INT AUTO_INCREMENTNOT NULL,

    -> nameCHAR(20) BINARY NOT NULL,

    ->password CHAR(64) BINARY NOT NULL,

-> PRIMARY KEY(id));

 

2、添加虚拟用户

根据具体情况添加用户,由于pam_mysqlpassword()函数与MySQLpassword()函数算法可能不太相同,此处使用明文密码。有兴趣的可以测试其它加密方式,如md5

mysql> inser tinto users(name,password) values ('user1','user123'),('user2','user123');

 

3、测试mysql的用户及表是否有效

# mysql -uvsftpd-p

mysql> showdatabases;

+--------------------+

| Database           |

+--------------------+

|information_schema |

| test               |

| vsftpd             |

+--------------------+

3 rows in set(0.00 sec)

mysql> usevsftpd;

mysql> select *from users;

+----+-------+----------+

| id | name  | password |

+----+-------+----------+

|  1 | user1 | user123  |

|  2 | user2 | user123  |

+----+-------+----------+

2 rows in set(0.00 sec)

以上结果证明,数据库是正常可用的。

 

三、配置vsftpd

1、建立pam认证文件

# vim /etc/pam.d/vsftpd.mysql

添加以下两行

auth required /lib/security/pam_mysql.so user=vsftpdpasswd=vsftpd123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

 

内容解释:

auth 权限认证

required 必需通过认证

/lib/security/pam_mysql.so调用库文件

user=vsftpd 登录数据库用户名

passwd=vsftpd123 登录数据库密码

host=localhost 数据库主机地址,此处表示本机

db=vsftpd 数据库名称

table=users 用户帐号的表名

usercolumn=name 用户名字段

passwdcolumn=password 密码字段

crypt=0 表示密码的加密方式,0为明文,2password函数加密

 

2、修改vsftpd.conf文件

# vim/etc/vsftpd/vsftpd.conf

请确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=NO

local_enable=YES

write_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES

 

而后添加以下选项

guest_enable=YES

guest_username=ftpuser

 

并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql

 

然后添加虚拟用户所需要映射的系统用户ftpuser

# useradd -s/sbin/nologin -d /home/ftp ftpuser #没有系统登录权限,家目录为ftp

# chmod go+rx/home/ftp #添加其它用户组的权限为读执行

 

四、启动服务

# service vsftpd start

# chkconfig vsftpd on

登录测试:ftp://IP

可以用各种ftp客户端测试,包括浏览器,windows的资源管理器(我的电脑)


注意关闭iptabes或者添加策略。

 

 

五、配置虚拟用户具有不同的访问权限


vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

 

1、配置vsftpd为虚拟用户使用配置文件目录

 

# vim vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vusers_config

 

2、创建所需要目录,并为虚拟用户提供配置文件

 

# mkdir/etc/vsftpd/vusers_config/

# cd /etc/vsftpd/vusers_config/

# touch user1user2

 

3、配置虚拟用户的访问权限

 

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让user1用户具有上传文件的权限,可以修改/etc/vsftpd/ vusers_config/user1文件,在里面添加如下选项即可。

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES


六、vsftpd基础知识

vsftpd:

/etc/vsftpd 配置文件目录

/etc/init.d/vsftpd服务脚本

/usr/sbin/vsftpd主程序

/var/ftp 默认的数据文件目录,ftp根目录不能有写权限,可建立子目录

  支持虚拟用户(基于PAM实现用户认证)

    PAM的主要文件

     /etc/ram.d/配置文件目录

     /lib64/security/库文件目录

 

ftp用户类型

  系统用户

匿名用户--> 映射到系统用户

虚拟用户 --> 映射到系统用户

 

  默认情况下,如果允许系统用户直接登录,则其能切到大部分系统其它目录,而且还是明文传输的,这是非常危险的。

 

上传下载

/var/ftp ftp用户的家目录

   匿名用户访问目录

 

文件服务权限=文件系统权限+文件共享权限

 

/etc/vsftpd/vsftpd.conf配置文件解释

   anonymous_enable=YES   匿名用户,默认支持

   local_enable=YES     系统用户,默认支持

   write_enable=YES     系统用户上传文件,默认支持

 anon_upload_enable=YES       匿名用户上传,默认禁止

   anon_mkdir_write_enable=YES    匿名用户创建目录,默认禁止

   anon_other_write_enable=YES    匿名用户删除文件,默认禁止

   dirmessage_enable=YES   在目录下建立.message文件写提示内容

   xferlog_enable=YES      记录传输日志

   xferlog_std_format=YES  传输日志标准格式,最好禁止

   xferlog_file=/var/log/xferlog  记录传输日志的目录

   idle_session_timeout=600  会话连接超时时间,单位秒,默认禁止

   chroot_list_enable=YES   禁固用户只能在家目录活动

chroot_list_file=/etc/vsftpd/chroot_list  禁固用户列表文件,手动创建

chroot_local_user=YES   禁固所有用户只能在家目录活动,默关

listen=YES                                        FTP服务定义为独立守护进程

  守护进程:

    独立守护进程:适用用户量比较大,会话时间长

        瞬时守护进程:由xinetd代为管理

    pam_service_name=vsftpd    pam管理的配置文件,目录/etc/pam.d/vsftpd

   userlist_enable=YES    启用/etc/vsftpd/user_list文件

    userlist_deny=YES    禁止/etc/vsftpd/user_list文件用户登录

    guest_enables=YES    支持虚拟用户

   guest_username=vuser   虚拟用户所映射到的系统用户名

   max_clients          vsftpd服务同时最大支持的连接用户数

           max_per_ip                                     每个IP同时支持的最大连接用户数




你可能感兴趣的:(mysql,linux,centos,vsftpd,pam)