详解vsftpd搭建ftp和ftps
2013-08-23 11:54
561 查看
一、FTP的作用和工作原理
FTP(FileTransfer Protocol)是文件传输协议的简称
FTP的作用:
FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或把本地计算机的文件送到远程计算机去
FTP服务器的工作原理:
简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式
其主动模式的工作原理
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 //查看软件包生成了那些文件
列出几个较为重要的
ftp协议响应码:
1xx:服务器信息
2xx:正确响应信息
3xx:正常响应,某操作过程尚未完成,需进一步补充完成;
4xx:客户端错误;
5xx:服务器端错误;
vsftpd的用户类型:
需要注意的是,ftp服务器端文件路径是用户的家目录,查看用户家目录的相关信息可以通过finger命令来查看
1.匿名用户:事实上是服务器端自动映射的一个系统用户
客户端匿名连接:
2.本地用户:即/etc/passwd中的用户,默认root和id号小于500的用户都禁止访问ftp
本地用户连接
3.虚拟用户:事实上服务器端自动映射的一个系统用户,多个虚拟用户同时被映射为一个系统用户,但不同的虚拟用户可以具有不同的访问权限
三、vsftpd的工作特性
在/etc/vsftpd/vsftpd.conf中定义了vsftpd的工作特性
chroot:
禁锢用户于其家目录中,实现方式有两种:
1、所有的本地用户都被锁定在家目录下了
chroot_local_user=YES
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
3、不禁锢/etc/vsftpd/chroot_list中的指定用户,白名单
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
进行验证:
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表示禁止,也取决于客户端连接时使用的客户端工具,匿名用户不可以上传
上述无法上传文件的原因是因为客户端工具问题,用lftp既可以实现上传功能
启动匿名用户可以上传文件的,在服务器端的主配置文件/etc/vsftpd/vsftpd.conf中启用anon_upload_enable=YES
# servicevsftpd reload
用匿名用户连接服务器时,仍不能上传文件,原因是匿名用户在/var/ftp/没用创建目录的功能,需要在服务器端进行设置:
然后在客户端实现上传功能
需要注意的是vsftpd要求对/var/ftp/这个目录只有root用户具有写权限,其他任何用户都不允许
启用#anon_mkdir_write_enable=YES#匿名用户具有创建目录的权限
ftp的传输是明文的,要实现加密功能则需要ftps
四、ftpd+ssl实现安全的ftps
首先要自建CA服务器
其次创建自己的私钥文件#cd /etc/vsftpd/ssl/
(umask 077;openssl genrsa -out vsftpd.key 2048)
umask 077:用括号括起来,则表示此umsak只对当前子shell有效,如果不用括号,则对当前shell都生效,在此创建文件时属组和其它用户将没有任何权限
openssl genrsa:生成私钥的命令关键字
-out:指定文件的路径
vsftpd.key:私钥的名称,名字可以随便取,用.key结尾是为了方便记忆
2048:指私钥生成的位,默认是512,必须是2的n次方倍数
利用私钥文件生成证书签署请求文件
[root@stu2ssl]# openssl req -new -key vsftpd.key -out vsftpd.csr
req:证书请求和证书生成工具的命令关键字
-new:制作证书申请
-key:指定私钥文件
-out:输出证书请求文件的路径,以.csr结尾
有ca颁发ftp证书
opensslca
:颁发CA证书的命令关键字
-in:指定证书签署请求文件
-out:输出颁发证书的文件
-days:限定证书的有效期,3656天
修改vsftpd的配置文件让其支持ssl功能,即在/etc/vsftpd/vsftpd.conf最后添上如下内容
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
客户端软件用FlashF软件测试
总结:ftp的传输方式是明文的,因此在服务器上通过抓包工具,可以获取用户的密码。命令为:# tcpdump -i eth0 -XX port 21这样对服务器是一个很大的安全隐患,因此基于ftps搭建的服务器是非常有必要的,上述讲解不足之处还请大家多多提醒,互相帮助,共同进步!
本文出自 “时光的印记” 博客,请务必保留此出处http://lanlian.blog.51cto.com/6790106/1279455
FTP(FileTransfer Protocol)是文件传输协议的简称
FTP的作用:
FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或把本地计算机的文件送到远程计算机去
FTP服务器的工作原理:
简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式
其主动模式的工作原理
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 //查看软件包生成了那些文件
列出几个较为重要的
1xx:服务器信息
2xx:正确响应信息
3xx:正常响应,某操作过程尚未完成,需进一步补充完成;
4xx:客户端错误;
5xx:服务器端错误;
vsftpd的用户类型:
需要注意的是,ftp服务器端文件路径是用户的家目录,查看用户家目录的相关信息可以通过finger命令来查看
1.匿名用户:事实上是服务器端自动映射的一个系统用户
客户端匿名连接:
本地用户连接
三、vsftpd的工作特性
在/etc/vsftpd/vsftpd.conf中定义了vsftpd的工作特性
禁锢用户于其家目录中,实现方式有两种:
1、所有的本地用户都被锁定在家目录下了
chroot_local_user=YES
[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
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
进行验证:
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表示禁止,也取决于客户端连接时使用的客户端工具,匿名用户不可以上传
# servicevsftpd reload
用匿名用户连接服务器时,仍不能上传文件,原因是匿名用户在/var/ftp/没用创建目录的功能,需要在服务器端进行设置:
启用#anon_mkdir_write_enable=YES#匿名用户具有创建目录的权限
四、ftpd+ssl实现安全的ftps
首先要自建CA服务器
其次创建自己的私钥文件#cd /etc/vsftpd/ssl/
(umask 077;openssl genrsa -out vsftpd.key 2048)
umask 077:用括号括起来,则表示此umsak只对当前子shell有效,如果不用括号,则对当前shell都生效,在此创建文件时属组和其它用户将没有任何权限
openssl genrsa:生成私钥的命令关键字
-out:指定文件的路径
vsftpd.key:私钥的名称,名字可以随便取,用.key结尾是为了方便记忆
2048:指私钥生成的位,默认是512,必须是2的n次方倍数
利用私钥文件生成证书签署请求文件
[root@stu2ssl]# openssl req -new -key vsftpd.key -out vsftpd.csr
req:证书请求和证书生成工具的命令关键字
-new:制作证书申请
-key:指定私钥文件
-out:输出证书请求文件的路径,以.csr结尾
opensslca
:颁发CA证书的命令关键字
-in:指定证书签署请求文件
-out:输出颁发证书的文件
-days:限定证书的有效期,3656天
修改vsftpd的配置文件让其支持ssl功能,即在/etc/vsftpd/vsftpd.conf最后添上如下内容
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
客户端软件用FlashF软件测试
总结:ftp的传输方式是明文的,因此在服务器上通过抓包工具,可以获取用户的密码。命令为:# tcpdump -i eth0 -XX port 21这样对服务器是一个很大的安全隐患,因此基于ftps搭建的服务器是非常有必要的,上述讲解不足之处还请大家多多提醒,互相帮助,共同进步!
本文出自 “时光的印记” 博客,请务必保留此出处http://lanlian.blog.51cto.com/6790106/1279455
相关文章推荐
- 详解vsftpd搭建ftp和ftps
- 详解vsftpd搭建ftp和ftps 推荐
- RHEL 6.x vsftpd搭建 ftp ftps
- ubuntu ftp 服务器搭建及vsftpd.conf配置实例详解
- Ubuntu搭建FTP(vsftpd)文件服务器
- 使用Centos6.3-32bit + vsftpd 来搭建FTP服务器
- exportfs命令-NFS客户端问题实例-FTP介绍-使用vsftpd搭建ftp
- 详解CentOS7安装配置vsftp搭建FTP
- Ubuntu下FTP服务器搭建笔记 - vsftpd
- FTP客户端无法连接 自已搭建的ubuntu vsftpd FTP服务器
- 基于centOS 7上的FTP服务器搭建详解
- debian ftp(vsftpd)服务器搭建
- FTP服务器搭建(vsftpd )
- 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp
- 搭建 vsftpd FTP服务器
- glftpd 搭建 BitUnionFTP 详解及相关维护
- 详解Linux中搭建一个ftp服务器。
- Ubuntu Server 16.04.1 LTS 64位使用vsftpd搭建ftp服务器
- Redhat Enterprise Linux中使用vsftpd搭建指定用户指定目录的ftp服务器的方法
- 基于Vsftpd的FTP服务器搭建案例