1、ftp工做原理简介mysql
ftp是工做于应用层的协议,21/tcp端口,ftp是C/S的模型,数据分为两种链接,分别是命令链接数据链接,命令链接是文件管理类命令,始终在线的链接;数据链接是数据传输,是按需建立及关闭的链接。数据在传输格式根据文件类型进行选择传输格式,有文件传输、二进制传输。sql
ftp有两链接模式主动和被动模式,在主动模式中由服务器建立链接,客户端响应链接的方式,服务器选择21/tcp端口,客户端在响应链接选择一个随机端口的与服务器进行通讯,在传输文件时服务器将使用20/tcp端口与客户端的随机端口加1进行数据传输;在被动模式中客户端选择一个随机端口请求服务器的21/tcp端口,服务器用21号端口响应客户端的请求,当文件传输时客户端使用在随机端口上加1的端口请求服务器的文件数据,服务器选择一个随机端口响应客户端的文件传输请求。数据库
2、ftp软件种类vim
ftp的服务器和客户端的软件种类有不少软件能够实现的安全
服务器端软件:wu-ftpd、proftpd、pureftp、vsftpd、ServUbash
客户端软件:ftp、lftp、lftpget、wget、curl、filezilla、gftp服务器
3、ftp响应码session
ftp和Web服务软件同样有请求响应码,能够根据响应码来确认故障;并发
1xx:信息curl
2xx:成功类的状态码
3xx:提示需进一步提供补充信息的状态码
4xx:客户端错误
5xx:服务端错误
[root@stu09 ~]# ftp172.16.9.28 Connected to172.16.9.28 (172.16.9.28). 220 (vsFTPd 2.2.2) #:状态码 Name (172.16.9.28:root): ftp #匿名用户被映射成为ftp 331 Please specifythe password. Password: 230 Loginsuccessful. Remote system typeis UNIX. Using binary mode totransfer files. ftp> ls 227 Entering Passive Mode (172,16,9,28,254,240). #被动模式,172.16.9.28:(254+150+1)*240) IP:端口 150 Here comes thedirectory listing. drwxr-xr-x 2 0 0 4096 Aug 04 2014 pub 226 Directory sendOK.
4、ftp实现软件vsftpd
ftp能够使用登陆的用户认证类型有虚拟用户、系统用户、匿名用户。
在CentOS 6.6中安装vsftpd仍是很方便的,直接yum install vsftpd就能够了。安装完后生成的文件以下:
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本:/etc/rc.d/init.d/vsftpd
日志滚动程序:/etc/logrotate.d/vsftpd
配置文件:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
匿名用户(映射为ftp用户)共享资源位置:/var/ftp
系统用户经过ftp访问的资源的位置:用户本身的家目录
虚拟用户经过ftp访问产资源的位置:给虚拟用户指定的映射在为成系统用户的家目录
5、vsftpd的配置说明
(1)匿名用户的配置
anonymous_enable=YES #启用匿名用户
anon_upload_enable=YES #启用匿名用户上传功能
anon_mkdir_write_enable=YES #启用匿名用户建立目录功能
anon_other_write_enable=YES #启用匿名用户删除文件功能
注意:上传的功能取决于系统的权限和是否有上传的权限
(2)系统用户的配置
local_enable=YES #开启系统用户
write_enable=YES #开启写的权限
local_umask=022 #系统用户上传文件完文件的权限
禁锢全部的ftp本地用户其家目录中
chroot_local_user=YES
禁锢指定的ftp本地用户其家目录中
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
(3)虚拟用户
全部的虚拟用户会被统一映射为一个指定的系统帐号,访问的共享位置即为系统帐号的家目录;各虚拟用户可被赋予不一样的访问权限,经过匿名用户的权限控制参数进行指定;虚拟用户帐号可存储在文件和关系型数据库表中。
(4)其它配置信息说明
开启目录消息,就是切换此目录时,会显示此目录中以.message文件的内容,此.messages是隐藏文件
dirmessage_enable=YES
日志
xferlog_enable=YES #开启上传,下载日志
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
改变上传文件的属主
chown_uploads=YES
chown_username=whoever
会话:
idle_session_timeout=600 #空闲会话超时时长
data_connection_timeout=120 #数据链接超时时长
vsftp使用pma完成使用认证,其用到的pam配置文件
pam_service_name=vsftpd
是否启用控制用户登陆的列表文件
userlist_enable=YES
userlist_deny=YES|NO
默认的文件为/etc/vsftpd/user_list
链接限制:
max_clients:最大并发链接数;
max_per_ip:每一个IP可同时发起的并发请求数;
传输速率:
anon_max_rate:匿名用户的最大传输速率,单位是“字节/秒”
local_max_rate:本地用户的最大传输速率,单位是“字节/秒”
6、实现vsftp+pam+mysql
经过pam_mysql模块实现把用户名和密码存储在MySQL数据库,当客户端登陆进行认证时就在MySQL数据库进行查找,以实现用户的管理。
1、安装所须要程序
1)安装mysql和pam_mysql
# yum -y install vsftpd mysql-servermysql-devel pam_mysql
注意:pam_mysql由epel源提供。
2、准备数据库及相关表
1)准备数据库和表
首先请确保mysql服务已经正常启动,然后,按须要创建存储虚拟用户的数据库便可,这里将其建立为vsftp数据库
MariaDB [(none)]> CREATE DATABASE vsftp MariaDB [vsftp]> grant select on vsftp.*to vsftp@'172.16.%.%' identified by 'vsftpd'; Query OK, 0 rows affected (0.04 sec) MariaDB [vsftp]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [vsftp]> CREATE TABLE users (id INT UNSIGNED NOT NULL AUTO_INCREMENTPRIMARY KEY, name VARCHAR(50) BINARY NOT NULL, password CHAR(48)BINARY NOTNULL);
2)添加测试的虚拟帐号
根据须要添加所所须要的用户,须要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储;
MariaDB [vsftp]> INSERT INTO users(name,password) VALUES ('tom',password('ftp')),('jerry',password('vsftp')); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [vsftp]> select * from users; +----+-------+-------------------------------------------+ | id | name | password | +----+-------+-------------------------------------------+ | 1| tom |*89DED2CC215FEBF4D5077792E8CBF7B3A3CE6A53 | | 2| jerry | *EDE7E32F5C826747A362F47049DF433214ADBFE6 | +----+-------+-------------------------------------------+
3、配置vsftpd
1)创建pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql
添加以下两行
auth required pam_mysql.so user=vsftppasswd=vsftpd host=172.16.9.20 db=vsftp table=users usercolumn=namepasswdcolumn=password crypt=2 account required pam_mysql.so user=vsftppasswd=vsftpd host=172.16.9.20 db=vsftp table=users usercolumn=namepasswdcolumn=password crypt=2
注意:因为mysql的安装方式不一样,pam_mysql.so基本unix sock链接mysql服务器时可能会出问题,此时建议受权一个远程链接的mysql并访问vsftpd数据库的用户;
2)修改vsftpd的配置文件,使其适应mysql认证
创建虚拟用户映射的系统用户及对应的目录
[root@stu09 ~]# mkdir /ftpserver [root@stu09 ~]# useradd -s /sbin/nologin -d /ftpserver/pub vuser
请确保/etc/vsftpd.conf中已经启用了如下选项
anonymous_enable=YES local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO chroot_local_user=YES
然后添加如下选项
guest_enable=YES guest_username=vuser
并确保pam_service_name选项的值以下所示
pam_service_name=vsftpd.mysql
3)重启vsftpd服务
4、配置虚拟用户具备不一样的访问权限
vsftpd能够在配置文件目录中为每一个用户提供单独的配置文件以定义其ftp服务访问权限,每一个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录能够是任意未使用目录,只须要在vsftpd.conf指定其路径及名称便可。
1)配置vsftpd为虚拟用户使用配置文件目录
#vim vsftpd.conf
添加以下选项
user_config_dir=/etc/vsftpd/vuser_config
2)建立所须要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vuser_config/ cd /etc/vsftpd/vuser_config/ touch tom jerry
3)配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是经过匿名用户的的相关指令进行的,好比,若是须要让tom用户具备上传文件的权限,能够修改/etc/vsftpd/vuser_config/tom文件,在里面添加以下选项便可。
anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable=(YES|NO}