详解vsftpd搭建ftp和ftps

 详解vsftpd搭建ftp和ftps
2013-08-21 11:05:03
标签: ftp   vsftp   ftps
原创作品,允许转载,转载时请务必以超链接形式标明文章   原始出处  、作者信息和本声明。否则将追究法律责任。 http://lanlian.blog.51cto.com/6790106/1279455

一、FTP的作用和工作原理

FTP(FileTransfer Protocol)是文件传输协议的简称

FTP的作用

FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或把本地计算机的文件送到远程计算机去

FTP服务器的工作原理

简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式

其主动模式的工作原理

详解vsftpd搭建ftp和ftps_第1张图片

1.客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口

2.服务器的21号端口给予客户端响应数据流

3.服务器打开20号端口去连接客户端的N+1的端口

4.客户端给予响应,数据开始传输

被动模式的工作原理

1.客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口

2.服务器的21号端口给予客户端响应

3.服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口

4.服务器给予响应,于是数据开始传输

需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.2.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26

二、安装ftp软件包:

配置好yum源后通过yum –y install vsftpd进行安装

[root@stu2~]# rpm -ql vsftpd     //查看软件包生成了那些文件

列出几个较为重要的

1
2
3
4
5
6
7
8
9
10
/etc/logrotate.d/vsftpd        //配置日志回滚的文件
/etc/pam.d/vsftpd                    //定义vsftpd是如何认证用户的,默认情况vsftpd支持使用匿名用户和本地用户
/etc/rc.d/init.d/vsftpd               //服务启动脚本
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf        //服务的主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd                   //服务器端程序
/ var /ftp                 //ftp的默认家目录


ftp协议响应码

1xx:服务器信息

2xx:正确响应信息

3xx:正常响应,某操作过程尚未完成,需进一步补充完成;

4xx:客户端错误;

5xx:服务器端错误;


vsftpd的用户类型:

需要注意的是,ftp服务器端文件路径是用户的家目录,查看用户家目录的相关信息可以通过finger命令来查看

1.匿名用户:事实上是服务器端自动映射的一个系统用户

客户端匿名连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@station92~]# ftp172. 16.2 . 1   //连接测试
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220 (vsFTPd  2.2 . 2 ) //220是协议响应码,表示正常响应
Name( 172.16 . 2.1 :root): ftp //表示匿名访问
331Please specify the password.
Password:                   //匿名用户登录密码为空
230Login successful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/"      //匿名用户默认被锁定在“/“目录下,而本地用户没有被锁定,因此看以看所有的文件
  [root@stu2 ~]# finger ftp
Login:ftp                      Name: FTP User
Directory:/ var /ftp                     Shell: /sbin/nologin
Neverlogged  in .
Nomail.
NoPlan.
其中Directory: / var /ftp表示用户家目录路径信息

2.本地用户:即/etc/passwd中的用户,默认root和id号小于500的用户都禁止访问ftp

本地用户连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220 (vsFTPd  2.2 . 2 )
Name( 172.16 . 2.1 :root): gentoo
331Please specify the password.
Password:
230Login successful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp>pwd
257 "/users/gentoo"
ftp>ls
227Entering Passive Mode ( 172 , 16 , 2 , 1 , 236 , 228 ).
150Here comes the directory listing.
-rw-rw-r--     1   500       500        73175088   Jul  10   03 :18linux- 3.10 .tar.xz
226Directory send OK.
服务器端查看本地用户信息
[root@stu2~]# finger gentoo
Login:gentoo                      Name:
Directory:/users/gentoo             Shell: /bin/bash
Lastlogin Sat Aug  17   09 : 54   (CST) on pts/ 1   from  172.16 . 254.54
Nomail.
NoPlan.
Root用户默认没有访问权限
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): root
530   Permissiondenied.
Loginfailed.

3.虚拟用户:事实上服务器端自动映射的一个系统用户,多个虚拟用户同时被映射为一个系统用户,但不同的虚拟用户可以具有不同的访问权限

三、vsftpd的工作特性

在/etc/vsftpd/vsftpd.conf中定义了vsftpd的工作特性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@stu2~]# grep -v  "^#"   /etc/vsftpd/vsftpd.conf | grep -v  "^$"
anonymous_enable=YES //允许匿名用户访问,若禁止使用NO
local_enable=YES //允许本地用户访问,若禁止则使用NO
write_enable=YES //表示是否允许本地用户有上传权限的,YES表示可以,NO表示禁止,也取决于客户端连接时使用的客户端工具
local_umask= 022 //设置本地用户上传建立文件时的权限掩码
dirmessage_enable=YES //用户切换进入目录时显示.message(如果存在)文件的内容
xferlog_enable=YES //是否开启传输日志的
connect_from_port_20=YES //连接控制端口为20
xferlog_std_format=YES //启动标准xferlog的日志格式,若禁用此项,将使用vsftpd自己的日志格式
listen=YES //是否以独立运行的方式监听服务
pam_service_name=vsftpd //设root
userlist_enable=YES //表明启动本地用户
tcp_wrappers=YES //是否开启tcp_wrappers主机访问控制
除此之外还有注释掉的,有些可以启动的具体为:
#anon_upload_enable=YES#是否匿名用户上传文件
#anon_mkdir_write_enable=YES#匿名用户具有创建目录的权限
可以加一条
Anon_other_write_enable=YES#其他权限,可是设置文件的属主属组,删除等操作
#xferlog_file=/ var /log/xferlog#记录传输日志内容的
#idle_session_timeout= 600 #命令连接的超时时间
#data_connection_timeout= 120 #数据连接的超时时间
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list

chroot: 禁锢用户于其家目录中,实现方式有两种:

    1、所有的本地用户都被锁定在家目录下了

    chroot_local_user=YES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): gentoo
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/"              //本地用户被锁定在家目录下
ftp> ls
227Entering Passive Mode ( 172 , 16 , 2 , 1 , 195 , 144 ).
150   Herecomes the directory listing.
-rw-r--r--     1   500       500             921   Aug  19   00 :16fstab
-rw-rw-r--     1   500       500        73175088   Jul  10   03 :18linux- 3.10 .tar.xz
226Directory send OK.
ftp> cd/
250Directory successfully changed.
ftp> ls
227Entering Passive Mode ( 172 , 16 , 2 , 1 , 231 , 75 ).
150   Herecomes the directory listing.
-rw-r--r--     1   500       500             921   Aug  19   00 :16fstab
-rw-rw-r--     1   500       500        73175088   Jul  10   03 :18linux- 3.10 .tar.xz
226Directory send OK.

2、禁锢/etc/vsftpd/chroot_list中的指定用户,黑名单

[root@stu2vsftpd]# touch chroot_list

[root@stu2vsftpd]# vim chroot_list

在chroot_list中写上centos 和gentoo两个用户,用户hailian没写入,进行验证

            chroot_list_enable=YES

            chroot_list_file=/etc/vsftpd/chroot_list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): centos
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/"                   //锁定用户的家目录
ftp> bye
221Goodbye.
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): gentoo
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/"                   //锁定用户的家目录
ftp> bye
221Goodbye.
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): hailian
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/home/hailian"        //没有锁定

3、不禁锢/etc/vsftpd/chroot_list中的指定用户,白名单

            chroot_local_user=YES            

            chroot_list_enable=YES

            chroot_list_file=/etc/vsftpd/chroot_list

进行验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): gentoo
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/users/gentoo"
ftp> bye
221Goodbye.
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): centos
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/users/centos"
ftp> bye
221Goodbye.
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): hailian
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> pwd
257 "/"

user_list:定义ftp用户白名单和黑名单:

        1、白名单:

            userlist_enable=YES

            userlist_deny=NO

        2、黑名单:

            userlist_enable=YES

            userlist_deny=YES


传输速率限定,默认单位为字节:

        anon_max_rate=10240#定义匿名用户的最大传输速率,单位为字节

        local_max_rate=10240#限定本地用户最大的下载速度为10KB/s

连接数限定:

        max_clients=100

        max_per_ip=2

修改配置文件后要重新加载服务

servicevsftpd reload

注:

 1)由于此配置文件检查要求比较严格,不可随意出现任意空白字符,例如write_enable=YES之前不可出现任何空白字符;等号两侧不可出现任何空白字符。

  2)当更改这个文件中的这些权限时一定要确保SElinux是关闭的,不然会被阻止的。

验证:

在服务器端的主配置文件/etc/vsftpd/vsftpd.conf

write_enable=YES//表示是否允许本地用户有上传权限的,YES表示可以,NO表示禁止,也取决于客户端连接时使用的客户端工具,匿名用户不可以上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): ftp
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> put/etc/fstab
local:/etc/fstab remote: /etc/fstab
227Entering Passive Mode ( 172 , 16 , 2 , 1 , 50 , 195 ).
550Permission denied. //匿名用户不允许有上传权限
本地用户:
[root@station92~]# ftp  172.16 . 2.1
Connectedto  172.16 . 2.1   ( 172.16 . 2.1 ).
220   (vsFTPd2. 2.2 )
Name( 172.16 . 2.1 :root): gentoo
331   Pleasespecify the password.
Password:
230   Loginsuccessful.
Remotesystem type  is   UNIX.
Usingbinary mode to transfer files.
ftp> put/etc/fstab
local:/etc/fstab remote: /etc/fstab
227Entering Passive Mode ( 172 , 16 , 2 , 1 , 90 , 137 ). //ftp工作在被动模式下
553   Couldnot create file. //表明上传功能没问题,但无法创建文件
ftp> pwd

你可能感兴趣的:(linux,ftp,ssl)