Linux下FTP服务器的配置及其应用

本文涉及的产品
运维安全中心(堡垒机),企业双擎版 50资产 7天
运维安全中心(堡垒机),免费版 6个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

Linux下FTP服务器的配置及其应用


一.FTP简介:


    FTP: file transfer protocol (文件传输协议)是一个用于在两台或者多台不同的操作系统中传输文件的协议,从FPT的诞生至今已经40年了。今年是它的40年纪念。所以它理所当然的成为了这个世界上最古老的协议,没有之一。


 


二.FTP工作原理


FTP的工作基于TCP协议     


    我们最常见的也是最常用的端口:


    21号端口:是实现命令控制的。(当我们验证之后,我们执行一些比如put get ls等命令都是通过这个端口进行传输的)


    20号端口:实现数据传输的。


 


服务器有两种数据传输模式:


    1.主动模式。


    2.被动模式。


        

    主动模式和被动模式是针对服务器来说的,而到底在运作的过程中到底采用主动模式还是被动模式,则是由客户端来决定的。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。



    主动模式的实现方式:


    a.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。


    b.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。


    c.服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。


    d.客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。        


 


 


三.FTP的用户/服务器类型:


1)FTP服务器可以支持的用户类型主要有3大类。


    1.匿名用户: anonymous 或者 ftp


        一般使用的就是匿名用户。


    2.本地用户:


        账号名称、密码等信息保存在passwd、shadow文件中


    3.虚拟用户:


        使用独立的账号/密码数据文件。


        可以是 db 数据库,也可以直接放在mysql 中,也可以放在一个文件上


        


2)常见的FTP服务器:


        IIS Serv-U(在windows上比较常用的)


        wu-ftpd(现存最古老的) 、


        Proftpd (功能非常强大的ftp软件,根据你的需要,它可以制定)


        pureftpd (功能强大的ftp软件)


        vsftpd(Redhat上最常用的,轻量级的  只有140K,但是却非常安全)


 


3)常见的FTP客户端:


        ftp命令 


        lftp命令


        gftp (linxu上图形化的ftp工具)


        CuteFTP


        FlashFTP(号称是最快的FTP)、 


        Ftps 会有通过ssl加密的机制。


 


四.vsftpd 服务器


我们以vsftpd服务器的构架,来讲解到底如何架构一个FTP服务器


首先要知道,我们vsftpd服务器就是用ftp这个用户的身份来运行的。而vsftpd又受到selinux的控制,所以要先把selinux关了。


 


1. 安装vsftpd:


    yum install vsftpd -y


    安装好之后,我们可以看到vsfptd这个命令被安装在了/usr/sbin目录中叫做vsftpd


    配置文件保存在/etc/vsftpd目录下,而它的所有文件保存在/var/ftp中


 

2.如何配置vsftpd


首先进入/etc/vsftpd目录下


    ①  ftpusers 文件:


        这个是一个定义文件里面定义着那些被禁止登陆的用户

    ②  user_list 文件:


        这个文件中的列表提供一份FTP用户列表,定义了是否禁止用户登录,而这个文件是否能生效,取决于主配置文件中的设置


    ③  /etc/vsftpd.conf


        主配置文件,详细的定义了所有的规则:


        我们来看看常用的规则:


        local_enable=YES 是否允许以本地用户身份访问

                         本地用户默认通过ftp登陆默认在家目录下


        write_enable 是否允许本地用户登录后可写?(只创建文件)


        anon_mkdir_write_enable=YES 允许本地用户登录后可创建文件夹


        anon_upload_enable=YES   是否允许匿名用户上传


        chown_upload=YES  对匿名用户上传的文件进行一次自动的更改属主


        chown_username=root   定义更改的属主


        dirmessage_enable=YES 给当前目录增加一个欢迎信息


        message_file=.message  你的欢迎文件的位置。


        xferlog_enable=YES 是否开启日志信息


        xferlog_file=/var/log/vsftpd.log配置日志文件在哪


        idle_session_timeout=600 会话的响应时间


        data_connection_timeout=120 数据响应时间


        ftpd_banner=Welcome to bash FTPservice.  FTP的欢迎信息。


        chroot_list_enable=YES 这项的作用是是否把用户锁在它的家目录中。

                            这个不开启的话是非常危险的。不对用户进行限制则会让一个用户各种乱跑,并且修改文件。当这个开启的时候,用户登录到这个目录中后,使用pwd命令则根本不显示你到底位于何方。


        chroot_list_file=/etc/vsftpd/chroot_list通过这个表,你可以定义到底限制哪些用户切换目录。


        listen=YES  让FTP以独立进程运行在我们的机子上的。

                    如果改成 NO, 则让他以一个非独立的进程。则成为init的一个子进程。


        pam_service_name=vsftpd 基于pub认证


        userlist_enable=YES  是否开启列表的控制  user_list 文件:


        userlist_deny=YES    他默认是拒绝的,只要你想进去,则会立刻拒绝。如果我们改成NO,则仅能这个列表中的用户访问。


        lftp-u student 172.16.100.1 则可以进行验证     


                           


3.启动服务:


    service vsftpd start


 


4.匿名用户


它的默认匿名用户的登录路径是在 /var/ftp,如果你使用“id ftp”的话,就会发现ftp这个用户也在系统里,发现它的家目录是/var/ftp,这个就是登陆到我们的FTP服务器上的匿名用户所用的账号。


                                    


 


五.构建基于虚拟用户的vsftpd服务器认证:


1.建立虚拟FTP用户的账号数据库文件


    建立虚拟用户的账号名、密码列表                   


    vim/etc/vsftpd/vusers.list

    mike

    123

    john

    456


    这里,一行是用户,一行是密码


    由于ftp是不能识别这个文件的。所以我们需要用db4-utils这个软件将其进行一次哈希的转换。


        db_load-T -t hash -f vusers.list vusers.db


    将其转换成数据库类型的文件。


    为了安全起见,将它的权限更改为600


    chmod 600 /etc/vsftpd/vusers.*




2.创建FTP根目录及虚拟用户映射的系统用户


    虚拟出来的用户可以自定义虚拟家目录。


    mkdir /var/ftproot/pub

    useradd-d /var/ftproot -s /sbin/nologin virtual

    chmod 755 /var/ftproot/



                                    


3.建立支持虚拟用户的PAM认证文件


    vim /etc/pam.d/vsftpd.vu

        #%PAM-1.0

        auth       required           pam_userdb.so       db=/etc/vsftpd/vusers

        account    required           pam_userdb.so      db=/etc/vsftpd/vusers

        ↑             ↑                   ↑

       认证         认证的操作            所需要的认证的库

       授权        授权的操作              授权所需要的库




4.在vsftpd.conf中添加支持配置


     vim  /etc/vsftpd/vsftpd.conf

     anonymous_enable=NO

     local_enable=YES

     write_enable=YES

     anon_umask=022

     guest_enable=YES  

     guest_username=virtual

     pam_service_name=vsftpd.vu


               


5.为个别虚拟用户建立独立的配置文件


    在vsftpd.conf中添加用户配置目录支持

    user_config_dir=/etc/vsftpd/vusers_dir


 

    为用户mike john建立独立的配置目录及文件


    mkdir /etc/vsftpd/vusers_dir/

    cd /etc/vsftpd/vusers_dir

    touch mike

    vim john

     anon_upload_enable=YES

     anon_mkdir_write_enable=YES

     max_clients    ##限制客户端最大请求

     max_per_ip     ##限制每个ipd


 


6.重新加载 vsftpd 配置


    service vsftpd restart



 

六.用Openssl实现对传输数据加密。


        对于FTP而言,由于它协议的古老,这就直接导致它的安全性是非常的差的,所以我们就需要使用SSL的方式对其传输的数据进行加密,在这里,我们不列出详细的解释,只将操作直接写入。希望大家能自行研究加密的方式。


 


1.先给我们的服务器制作CA:


  cd /etc/pki/CA

       mkdir crets newcerts crl

       touch index.txt serial

       echo 01 > serial

       openssl genrsa 1024 > private/cakey.pem

       chmod 600 private/cakey.pem

       openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655


 


2.进入 cd/etc/vsftpd/制作属于自己的证书并让CA颁发授权


     mkdir ssl

     cd ssl/

     openssl genrsa 1024 > vsftpd.key

     openssl req -new -key vsftpd.key -out vsftpd.csr

     openssl ca -in vsftpd.csr -out vsftpd.crt


                 


3.证书办好了,但是还要支持SSL


    在vsftpd的配置文件中


    vim /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_cert.pem   #证书

     rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem    #私钥



        验证一下。这里要用一点高级一点的客户端访问:


                   我们选择基于TLS认证的FlashFXP软件进行验证。


        这时候访问FTP的时候已经出现了需要进行公钥交换的认证了。则我们的通过OpenSSL加密的方式就这样实现了。


 


七.总结


      FTP是一种大家最常用的协议,了解它,并且努力的掌握它可以帮助我们做好很多工作,而它的安全又是自己的一大隐患,所以我们在使用它的同时一定不能忘了将它的安全措施做到最好。


      如果作为读者的你发现了什么写作的漏洞或者错误的话,欢迎给予批评,我会快速纠正的。也希望大家共同进步。




本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1853605,如需转载请自行联系原作者
相关文章
|
12天前
|
安全 Java Linux
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
37 0
|
1月前
|
关系型数据库 应用服务中间件 Linux
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
48 1
Linux云服务器如何搭建LNMP环境
|
14天前
|
负载均衡 JavaScript Linux
做网站如何选择云服务器?(一)配置篇
选择服务器需考虑网站规模、技术需求和地理位置。个人博客适合基础配置,企业官网需4核CPU、8GB内存,电商平台则需更高配置并配备负载均衡。技术上,展示型网站用PHP+MySQL,互动社区需Node.js/Python环境,视频类网站要大带宽。地理位置影响服务器选择,国内用户选腾讯云/阿里云,海外用户选AWS等。主流服务器类型包括虚拟主机(入门级)、云服务器(推荐)和物理服务器(高端需求)。云服务商普遍提供免费试用,便于评估性能。
44 1
|
16天前
|
存储 运维 监控
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
19天前
|
弹性计算
【已解决】Matomo本地SMTP配置可以发邮件,但部署到阿里云ECS就发不了邮件
在阿里云ECS上使用Matomo和PHPMailer发送邮件时遇到问题,邮件无法发出且接口调用Pending。经过排查,发现是ECS安全组未开放25/465端口,导致SMTP请求无法正常通信。解决方法为在安全组中配置并开放25/465端口,从而恢复邮件发送功能。
|
21天前
|
弹性计算 运维 Ubuntu
在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
本文介绍了在阿里云ECS上使用Ubuntu系统安装和配置Docker及Docker Compose的详细步骤。通过这些工具,可以快速部署、弹性扩展和高效管理容器化应用,满足开发和运维需求。内容涵盖Docker的安装、镜像源配置、创建Web程序镜像以及使用Docker Compose部署WordPress等实际操作,并分享了使用体验,展示了阿里云实例的高性能和稳定性。
220 4
|
21天前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
80 1
|
1月前
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
80 5
|
1月前
|
存储 安全 网络安全
阿里云国际站:阿里云服务器端口配置
悟空云@CloudWuKong阿里云是全球领先的云计算服务提供商,为用户提供弹性计算、数据库、存储、网络安全等一系列云计算服务。在使用阿里云服务器时,合理配置端口非常重要,可以提高服务器安全性和稳定性。
|
14天前
|
Windows
Windows系统云服务器配置多用户登录
本教程介绍了在Windows云服务器上配置远程桌面服务的详细步骤,包括安装桌面会话主机和远程桌面授权、允许多用户远程连接以及配置新用户并加入远程桌面用户组。通过添加角色和功能、设置组策略以及管理用户权限,实现多用户同时登录和远程访问。按照指引操作,可顺利完成服务器的远程访问配置,提升管理和使用效率。
32 0

热门文章

最新文章