一、ftp简要介绍
ftp是一个很古老的协议了,是一种基于明文传输的C/S架构协议。ftp基于tpc21、20端口,其中21端口为命令端口,20端口为数据端口。ftp命令连接同其他TCP连接一样,不过数据连接有两种模式:
主动模式,也称作PORT模式:命令请求端口时,服务器端为减少等待,主动将数据发送给客户端:使用本机的20端口请求客户端的端口。这里有个问题:服务器端想要主动连接客户端就需要知道客户端的端口号,可是客户端根本没有启动任何端口给服务器端。协议设计中服务器端根据客户端的命令连接端口(当然它是一个随机端口)+1作为请求数据连接端口,如果被用了,那么就再次+1...。当然这种模式下,客户端防火墙很难做。这样就有了被动模式。
被动模式,也称为PASV模式:客户端主动请求服务器端口连接传送数据:服务器端启动一个随机端口,并将端口通过命令端口发送到客户端,客户端知道后连接该端口,完成数据传输。这里貌似服务器端口好像做防火墙较难。当然防火墙可以做了,不过这不提,以后会有博文讲解防火墙对ftp被动模式的设置。
ftp服务的权限认证有三种用户:匿名用户,本地用户,虚拟用户。匿名用户就是将用户权限映射到服务器上的系统用户上,一般默认为ftp用户,默认路径映射路径到/var/ftp。前两种用户不是很复杂,这只了解下基于虚拟用户的设置。
二、基于pam MySQL数据库的vsftpd 虚拟用户认证
安装vsftd,mysql,这里不做介绍,自行谷歌。
1.pam_msyql.so的编译安装。这里需要用到pam Mysql的库文件,一般默认安装的pam没有包含该库,需要自行下载编译到pam中,准备好编译环境和必须组件,编译安装它:
安装开发环境: yum -y instal "Development Tools" "Server Plaform Tools"
安装必要的组件:yum -y install openssl-devel pam-devel mysql-devel
编译安装:tar xf pam_mysql-0.7RC1.tar.gz && cd pam*
./configure --with-mysql=/usr --with-openssl=/usr -with-pam=/usr -with-pam-mods-dir=/lib64/security && make && make
安装好后,可以看到库文件安装在/lib64/secuirty/pam_mysql.so;
# ls /lib64/security |grep mysql pam_mysql.la pam_mysql.so
2.建立对应数据库
# msyql -uroot create database vuser; use vuser; create table users(id int auto_increment not null primary key,name char(30) not null,password char(48) not null); insert into users(name,password) values (‘obama‘,password(‘magedu‘)); insert into users(name,password) values (‘changchun‘,password(‘magedu‘)); grant select on vuser.* to ‘vsftpd‘@‘%‘ identified by ‘magedu‘; flush privileges;
3.建立pam配置文件
pam 格式根据模块不同写法,也不同,不过这里写成这样就可以了。
auth required pam_mysql.so user=vuser passwd=magedu host=172.18.29.132 db=vuser table=users usercolumn=name passwdcolumn=password crypt=2 debug account required pam_mysql.so user=vuser passwd=magedu host=172.18.29.132 db=vuser table=users usercolumn=name passwdcolumn=password debug
注意里面的库用户、密码,库名,用户名库中对应行,密码的库中对应行要写。加上debug可以在/var/log/secure看到debug信息。自己看到的给大家提出来。
4.建立虚拟用户
mkdir /ftproot useradd -s /sbin/nologin -d /ftproot vuser chmod go+w /ftproot
5.修改配置vsftpd.conf文件
anonymous_enable=NO # 匿名用户开关 write_enable=YES # 全局写权限开关 local_enable=YES # 非匿名用户开关 listen_ipv6=YES guest_enable=YES # 来宾用户(也就是虚拟用户账号)开关 guest_username=vuser # 来宾用户名称 pam_service_name=vsftpd.mysql # pam认证配置文件
这样就完成了。可以登录上去看看了,这里截图没什么意义,不再截图。
三、期间可能遇到的错误,主要需要关闭selinux和对应目录的权限:因为ftp的访问还是基于用户权限控制的,所以无论你是那种用户登录ftp都是映射到一个用户,登录得到的权限就是映射到用户的权限。
本文出自 “深海鱼” 博客,请务必保留此出处http://kingslanding.blog.51cto.com/9130940/1769348
原文地址:http://kingslanding.blog.51cto.com/9130940/1769348