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 2018 pub

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

Email Address []:XS@QQ.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 连接。

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

原文发布于微信公众号 - 运维猫(centos15)

原文发表时间:2019-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券