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

vsftp与mysql结合进行用户验证

2015-09-29 10:44 525 查看
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,编制者的初衷是代码的安全。
特性
1、它是一个安全、高速、稳定的FTP服务器;
2、它可以做基于多个IP的虚拟FTP主机服务器;
3、匿名服务设置十分方便;
4、匿名FTP的根目录不需要任何特殊的目录结构,或系统程序或其它的系统文件;
5、不执行任何外部程序,从而减少了安全隐患;
6、支持虚拟用户,并且每个虚拟用户可以具有独立的属性配置;
7、可以设置从inetd中启动,或者独立的FTP服务器两种运行方式;
8、支持多种认证方式
9、支持带宽限制;
本文介绍通过pam.d模块基于mysql现实vsftp虚拟用户认证
安装环境



先安装、配置vsftp
[root@vsftp ~]# yum install -y vsftpd
[root@vsftp ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd #vsftp日志轮询
/etc/pam.d/vsftpd #pam.d的vsftpd
/etc/rc.d/init.d/vsftpd #启动服务脚本
/etc/vsftpd
/etc/vsftpd/ftpusers #用户控制文件
/etc/vsftpd/user_list #用户控制文件
/etc/vsftpd/vsftpd.conf  #配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.2.2
##此处省略帮助文件##
/usr/share/doc/vsftpd-2.2.2/TUNING
/usr/share/doc/vsftpd-2.2.2/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub #匿名用户共享文件目录
查看默认配置文件启用选项
[root@vsftp vsftpd]# cat  vsftpd.conf |grep -v "^#"
anonymous_enable=YES #允许匿名用户
local_enable=YES #允许本地用户
write_enable=YES #允许本地用户可写
local_umask=022  #本地创建文件的umask
dirmessage_enable=YES #创建目录时消息提示
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES #监听端口

pam_service_name=vsftpd #pam模块
userlist_enable=YES #用户控制
tcp_wrappers=YES
其他一些重要选项
anonymous_enable=YES 开始匿名用户
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_other_write_enable=YES 允许匿名用户其他权限,如删除,重命名文件
chown_uploads=YES #是否改变属主
chown_username=user #上传文件修改成属主
chroot_local_user={Yes|No} #限制本地用户禁锢其在家目录中
chroot_list_enable={Yes|No} #限制chroot_list列表中用户禁锢其在家目录中
chroot_list=/etc/vsftp/chroot_list #用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录
xferlog_file=/var/log/vsftp.log # 配置日志目录
ftpd_banner=Welcome to blah FTP service. #登录提示信息
banned_file=/etc/vsftpd/banned_file
ls_recurse_enable=YES #用户是否能够使用ls命令
连接限制
max_clients 最大并发链接数
max_per_ip 每IP最大并发数
限制速率
anon_max_rate
local_max_rate
上传文件umask
anon_umask 022
local_umask 022
虚拟用户设置
guest_enable= YES/NO #启用虚拟用户。默认值为NO。
guest_username=ftp #这里用来映射虚拟用户。默认值为ftp
user_config_dir=/etc/vsftpd/vusers_config #为虚拟用户提供配置文件

配置文件里面启用下面选项
ls_recurse_enable=YES
添加测试用户
ls_recurse_enable=YES
[root@vsftp ~]# useradd -s /sbin/nologin test #添加测试用户
[root@vsftp ~]# password test
[root@vsftp ~]# touch /home/test/abc.txt #下创建个测试文件
[root@vsftp ~]#service vsftpd start
[root@vsftp ~]# lftp test@192.168.0.11
lftp test@192.168.0.11:/> ls
-rw-r--r--    1 0        0               0 Sep 29 01:44 abc.txt
#test账户可用。
在本地上安装msyql-devel包、pam_mysql包
[root@vsftp vsftpd]# yum install -y mysql-devel pam_mysql
在192.168.0.55mysql上给vsftp授权
MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> grant all on vsftpd.* to vsftpd@192.168.0.55 identified by 'www.magedu.com';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> use vsftpd;
MariaDB [vsftpd]> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id)
);
MariaDB [vsftpd]> insert into users(name,password) values('tom',password('magedu'));
MariaDB [vsftpd]> insert into users(name,password) values('test',password('magedu'));
MariaDB [vsftpd]> show tables;
+------------------+
| Tables_in_vsftpd |
+------------------+
| users            |
+------------------+
1 row in set (0.03 sec)
回到vsftpd主机,查看是否能够链接到mysql
[root@vsftp vsftpd]# mysql -uvsftpd -h192.168.0.55 -p
Enter password:

mysql> use vsftpd;

mysql> select * from users;
+----+---------+-------------------------------------------+
| id | name    | password                                  |
+----+---------+-------------------------------------------+
|  1 | tom     | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
|  2 | test    | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+----+---------+-------------------------------------------+
4 rows in set (0.01 sec)
已OK
vi /etc/pam.d/vsftpd.mysql #添加如下两行
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=192.168.0.55 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=192.168.0.55 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
再次编译配置文件/etc/vsftpd/vsftpd.conf
确保下面选项是OK
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd.mysql
vi /etc/vsftpd/vusers_config/tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
给test家目录授权,有些虚拟用户都会到test家目录执行读写,所以要给test家目录读写权限。
root@vsftp vsftpd]# chmod 777 /home/test/
[root@vsftp vsftpd]# cd /etc/
[root@vsftp etc]# lftp tom@192.168.0.11  #tom不是本地用户,是在mysql创建的一个虚拟用户
Password:
lftp tom@192.168.0.11:/> ls
-rw-r--r--    1 0        0               0 Sep 29 01:44 abc.txt
lftp tom@192.168.0.11:~> put issue
47 bytes transferred
lftp tom@192.168.0.11:/> ls
-rw-r--r--    1 0        0               0 Sep 29 01:44 abc.txt
-rw-------    1 500      500            47 Sep 29 02:31 issue
[root@vsftp etc]# cd /home/test/
[root@vsftp test]# ll
total 4
-rw-r--r-- 1 root root  0 Sep 29 09:44 abc.txt
-rw------- 1 test test 47 Sep 29 10:31 issue #tom用户以test身份执行put
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: