前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FTP服务器

FTP服务器

作者头像
胡齐
发布2019-09-23 18:48:04
12.9K0
发布2019-09-23 18:48:04
举报
文章被收录于专栏:运维猫运维猫

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 连接。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档