FTP服务器

FTP服务端:IP:172.17.120.50

FTP客户端:IP:172.17.120.51

FTP服务概述:

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。

FTP(File Transfer Protocol:文件传输协议)作用:Internet上用来传送文件的协议

常见FTP服务器:

windows:Serv-U FTP Server,filezilla_server

Linux:ProFTPD:(Professional FTP daemon)一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序。

今天的主角:vsftp

VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP从此名称可以看出来,编制者的初衷是代码的安全。

特点:

它是一个安全、高速、稳定的FTP服务器;

模式:C/S模式

端口:

[root@docker-01 vsftpd]# vim /etc/services

20 (传数据) 21 (传指令)

fsp(File Service Protocol):文件服务协议。

工作流程(原理):

##面试经常会遇到这样问题,大家需要注意下

这里的主动和被动,是相对于的FTP server端来判断的

如果server去连接client开放的端口,说明是主动的,相反,如果client去连接server开放的端口,则是被动的。

安装vsftp服务器端、客户端

[root@docker-01 vsftpd]# yum -y install vsftpd lftp

安装客户端:

[root@docker-01 vsftpd]# yum install -y lftp

注:从RHEL6开始,系统镜像中默认没有ftp客户端命令。取而代之的是lftp命令

Linux客户端:

lftp是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常好一个shell:有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

配置文件位置:

2.vsftpd相关文档

/etc/vsftpd/vsftpd.conf:vsftpd的核心配置文件

/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP服务器。黑名单

/etc/vsftpd/user_list:指定允许使用vsftpd的用户列表文件。白名单

vim /etc/vsftpd/user_list

#如果userlist_deny= YES(默认),绝不允许在这个文件中的用户登录ftp,甚至不提示输入密码

#prompt提示

/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd操作的一些变量和设置脚本

/var/ftp/:默认情况下匿名用户的根目录

启动服务

[root@docker-01 ~]# systemctl start vsftpd

Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.

如果报错:请关闭防火墙和selinux再次启动:

[root@docker-01 ~]# setenforce 0

[root@docker-01 ~]# systemctl stop firewalld.service

[root@docker-01 ~]# iptables -F

[root@docker-01 ~]# systemctl restart firewalld.service

如果还是无法启动:修改/etc/vsftpd/vsftpd.conf配置文件

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

ftpd_banner=Welcome to blah FTP service.

listen=YES

listen_port=21

#listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

pasv_enable=YES

use_localtime=YES

再次启动服务:

[root@docker-01 vsftpd]# systemctl enable vsftpd.service

[root@docker-01 vsftpd]# netstat -antup | grep ftp

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 17772/vsftpd

互动:为什么看不到20端口?。

因为没有数据通信。

客户端此服务的使用方法:

Linux:

[root@docker-02 ~]# lftp 172.17.120.50

lftp 172.17.120.50:~> ls

drwxr-xr-x 2 0 0 6 Oct 30 2018pub

ftp的默认根目录:是/var/ftp/pub

修改ftp的根目录只要修改/etc/vsftpd/vsftpd.conf文件即可:

加入如下几行:

local_root=/var/www/html

chroot_local_user=YES

anon_root=/var/www/html

注:local_root针对系统用户;anon_root针对匿名用户。

重新启动服务:

systemctl restart vsftpd.service

任何一个用户ftp登录到这个服务器上都会chroot到/var/www/html目录下。

补充:配置vsftpd,使用SSL证书加密数据传输

FTP与HTTP一样缺省状态都是基于明文传输,希望FTP服务器端与客户端传输保证安全,可以为FTP配置SSL

1,使用OpenSSL生成自签证书

[root@docker-01 vsftpd]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3560

Generating a 2048 bit RSA private key

..........................................................................................+++

.....................+++

writing new private key to 'vsftpd.pem'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:ZH

State or Province Name (full name) []:JS

Locality Name (eg, city) [Default City]:NJ

Organization Name (eg, company) [Default Company Ltd]:XS

Organizational Unit Name (eg, section) []:XS

Common Name (eg, your name or your server's hostname) []:XS.COM

OpenSSL简单参数解释:

req -是X.509 Certificate Signing Request(CSR,证书签名请求)管理的一个命令。

x509 - X.509证书数据管理。

days -定义证书的有效日期。

newkey -指定证书密钥处理器。

keyout -设置密钥存储文件。

out -设置证书存储文件,注意证书和密钥都保存在一个相同的文件

2、开VSFTPD配置文件并在文件中指定SSL的详细信息:

[root@docker-01 vsftpd]# vi /etc/vsftpd/vsftpd.conf

找到ssl_enable选项把它的值设置为YES激活使用SSL,另外,由于TSL比SSL更安全,我们会使用ssl_tlsv1_2选项让VSFTPD使用更严格的TLS:

ssl_enable=YES

ssl_tlsv1_2=YES

ssl_sslv2=NO

ssl_sslv3=NO

3、然后,添加下面的行来定义SSL证书和密钥文件的位置:

rsa_cert_file=/etc/vsftpd/vsftpd.pem

rsa_private_key_file=/etc/vsftpd/vsftpd.pem

4、下面,我们要阻止匿名用户使用SSL,然后强制所有非匿名用户登录使用安全的SSL连接进行数据传输和登录过程中的密码发送:

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

5、另外,我们还可以添加下面的选项增强FTP服务器的安全性。当选项require_ssl_reuse被设置为YES时,要求所有SSL数据连接都会重用SSL会话;这样它们会知道控制通道的主密码。

因此,我们需要把它关闭。

require_ssl_reuse=NO

另外,我们还要用ssl_ciphers选项选择VSFTPD允许用于加密SSL连接的SSL算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者:

ssl_ciphers=HIGH

6、现在,设置被动端口的端口范围(最小和最大端口)。

pasv_min_port=40000

pasv_max_port=50000

7、选择性启用debug_ssl选项以允许SSL调试,这意味着OpenSSL连接诊断会被记录到VSFTPD日志文件:debug_ssl=YES

保存所有更改并关闭文件。然后让我们重启VSFTPD服务:[root@docker-01 vsftpd]# systemctl restart vsftpd.service为了安全地连接到服务器,我们需要一个支持 SSL/TLS 连接的 FTP 客户端,例如 FileZilla。

8、FileZilla是一个现代化、流行且重要的跨平台的FTP客户端,它默认支持SSL/TLS连接。

要在Linux上安装FileZilla,可以运行下面的命令:

[root@docker-02 ~]# yum install epel-release filezilla

9、当安装完成后(或者你已经安装了该软件),打开它,选择File => Sites Manager或者按Ctrl + S打开Site Manager界面。

点击New Site按钮添加一个新的站点/主机连接详细信息。

在 FileZilla 中添加新 FTP 站点

下一步,像下面这样设置主机/站点名称、添加IP地址、定义使用的协议、加密和登录类型(使用你自己情况的值):

Host:192.168.56.10

Protocol: FTP –FileTransferProtocol

Encryption:RequireexplicitFTP over#recommended

LogonType:Askforpassword#recommended

User: username

在 Filezilla 中添加 FTP 服务器详细信息

10、然后点击Connect,再次输入密码,然后验证用于SSL/TLS连接的证书,再一次点击OK连接到FTP服务器:

验证 FTP SSL 证书

到了这里,我们应该使用TLS连接成功地登录到了FTP服务器,在下面的界面中检查连接状态部分获取更多信息。

通过 TLS/SSL 连接到 FTP 服务器

11、最后,在文件目录尝试从本地传输文件到FTP 服务器,看FileZilla界面后面的部分查看文件传输相关的报告。

使用 FTP 安全地传输文件

就是这些。记住FTP默认是不安全的,除非我们像上面介绍的那样配置它使用SSL/TLS连接。

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190818A03NEA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券