vsftpd程序实现ftp


一、ftp工作原理简介

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

 

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

 

二、ftp软件种类

ftp的服务器和客户端的软件种类有很多软件可以实现的

服务器端软件:wu-ftpdproftpdpureftpvsftpdServU

客户端软件:ftplftplftpgetwgetcurlfilezillagftp

 

三、ftp响应码

ftpWeb服务软件一样有请求响应码,可以根据响应码来确认故障;

  1xx:信息

  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.

 

四、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访问产资源的位置:给虚拟用户指定的映射在为成系统用户的家目录

 

五、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:本地用户的最大传输速率,单位是“字节/秒”

 

 

六、实现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}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章