vsftpd程序实现ftp


1、ftp工做原理简介mysql

  ftp是工做于应用层的协议,21/tcp端口,ftpC/S的模型,数据分为两种链接,分别是命令链接数据链接,命令链接是文件管理类命令,始终在线的链接;数据链接是数据传输,是按需建立及关闭的链接。数据在传输格式根据文件类型进行选择传输格式,有文件传输、二进制传输。sql

 

  ftp有两链接模式主动和被动模式,在主动模式中由服务器建立链接,客户端响应链接的方式,服务器选择21/tcp端口,客户端在响应链接选择一个随机端口的与服务器进行通讯,在传输文件时服务器将使用20/tcp端口与客户端的随机端口加1进行数据传输;在被动模式中客户端选择一个随机端口请求服务器的21/tcp端口,服务器用21号端口响应客户端的请求,当文件传输时客户端使用在随机端口上加1的端口请求服务器的文件数据,服务器选择一个随机端口响应客户端的文件传输请求。数据库

 

2、ftp软件种类vim

ftp的服务器和客户端的软件种类有不少软件能够实现的安全

服务器端软件:wu-ftpdproftpdpureftpvsftpdServUbash

客户端软件:ftplftplftpgetwgetcurlfilezillagftp服务器

 

3、ftp响应码session

ftpWeb服务软件同样有请求响应码,能够根据响应码来确认故障;并发

  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

wKioL1VTXYKRyf_LAAVl4L7hqOU793.bmp

  经过pam_mysql模块实现把用户名和密码存储在MySQL数据库,当客户端登陆进行认证时就在MySQL数据库进行查找,以实现用户的管理。


1、安装所须要程序

1)安装mysqlpam_mysql

# yum -y install vsftpd mysql-servermysql-devel pam_mysql

注意:pam_mysqlepel源提供。

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}
相关文章
相关标签/搜索