基于MySQL架设FTP服务器
对于FTP服务器,登陆的用户有3类:匿名用户、系统用户和虚拟用户。对于匿名用户和系统用户身份的认证是通过/etc/passwd /etc/shadow来认证的。系统用户是可以直接登陆系统的用户,用户的账号和密码在网络中传输,是明文的,对于系统的安全来说是一个极大的漏洞。而实现虚拟用户的认证在很大程度上加强了安全性。虚拟用户可以有很多个,为了方便管理,mysql数据库就首当其冲了
我们知道在系统用户认证的过程中对权限的控制通过pam_unix.so和/etc/pam.d/system-auth这两个pam模块。同样对于虚拟用户而言,vsftp和mysql的连接也需要用到pam模块即pam_mysql.so ,将登陆vsftpd的账号放在Mysql的表当中。
本文要点:
1、基于mysql的虚拟用户
2、为每个虚拟用户定制权限
3、系统用户和虚拟用户同时可以访问
4、FTP服务器的访问控制
<服务器IP:172.16.20.1 测试机IP172.16.100.150>
一、基于mysql的虚拟用户
#yum -y install vsftpd //安装vsfptd服务(可以是编译的也可以是rpm包) #setenforce 0 //关闭selinux #tar zxvf pam_mysql-0.7RC1.tar.gz #cd pam_mysql-0.7RC1 #./configure --with-mysql=/usr/local/mysql --with-openssl #make #make install //会在这个目录中/lib/security/ 生成一个模块 pam_mysql.so
2、准备数据库及相关表
建立名为vsftpd的数据库来存放相关虚拟用户的帐号,创建2个虚拟用户magedu,marion
密码分别为12345 RedHat
# id magedu //保证要创建的虚拟用户不是系统用户 id: magedu: No such user # id marion id: marion: No such user mysql> create database vsftpd; mysql> use vsftpd; mysql> create table users ( -> id int not null auto_increment primary key, -> name char(15) not null unique key, -> password char(48) not null -> ); mysql> desc users; +----------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | char(15) | NO | UNI | NULL | | | password | char(48) | NO | | NULL | | +----------+----------+------+-----+---------+----------------+ //添加测试的虚拟用户,其密码采取加密存放的方式 mysql> insert into users (name,password) values ('magedu',password('123456')),('marion',password('redhat')); mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456'; mysql> grant select on vsftpd.* to [email protected] identified by '123456'; mysql> flush privileges; mysql> select * from users; +----+--------+-------------------------------------------+ | id | name | password | +----+--------+-------------------------------------------+ | 1 | magedu | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | 2 | marion | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | +----+--------+-------------------------------------------+
3、建立pam认证所需文件
#vi /etc/pam.d/vsftpd.my //添加如下两行 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
4、修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录 # useradd -s /sbin/nologin -d /var/ftpuser ftpuser //这个家目录将成为虚拟用户访问ftp目录的起始位置 # chmod go+rx /var/ftpuser 请确保/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 添加以下选项 pam_service_name=vsftpd.my userlist_enable=YES tcp_wrappers=YES guest_enable=YES guest_username=ftpuser #service vsftpd restart
5、测试配置
# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.0.5) Name (localhost:root): marion 331 Please specify the password. Password: //密码是redhat 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls
相关推荐
杨立峰 2020-08-18
wq0 2020-07-18
leodengzx 2020-06-14
xsg 2020-06-09
TangCuYu 2020-06-05
河的第三条岸 2020-05-31
atb 2020-05-30
饮马天涯 2020-05-20
wennuanwarm 2020-05-16
InJavaWeTrust 2020-05-04
书弋江山 2020-04-26
MichelinMessi 2020-04-16
89236831 2020-02-24
IsanaYashiro 2020-02-19
Proudoffaith 2020-02-04
秋风瑟瑟 2020-02-03
IsanaYashiro 2020-01-23
rareli 2020-01-18
大老张学编程 2020-01-08