热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS使用ProFTPd部署FTP服务器

FTP服务被广泛的应用着,常见的,一些大学、组织、机构等等,都有通过FTP服务器向外发布数据…但在这里,我们将要构建的FTP服务器将主要针对用于用户更新自己的网站。也就是说,让用户(root除外)只可以访问自己的Web目录(本站前面介绍的HTTP服务器构建中
  FTP服务被广泛的应用着,常见的,一些大学、组织、机构等等,都有通过FTP服务器向外发布数据…但在这里,我们将要构建的FTP服务器将主要针对 用于用户更新自己的网站。也就是说,让用户(root除外)只可以访问自己的Web目录(本站前面介绍的HTTP服务器构建中以public_html为 例)。

  另外,为了避免通过平文传输时,数据被截获,从而泄漏隐私与密码,我们采用TLS方式,加密FTP传输过程中的数据,以确保安全。

(构建FTP服务器,您将有多种选择,比如通过vsftpd等等FTP服务器软件。但ProFTPD在一些方面,更能够符合我们的实际条件,尤其对于ADSL方式接入网络的服务器,ProFTPD能够很好的应对不断变化的IP地址造成的问题。)


  由于ProFTPD不存在于CentOS中yum的官方库中,所以用yum安装ProFTPD需要定义非官方的库。请先确认相应非官方库文件的存在。
[root@sample ~]# ls -l /etc/yum.repos.d/dag.repo  ← 确认相应库文件的存在性

-rw-r--r-- 1 root root 143 Oct 1 21:33 /etc/yum.repos.d/dag.repo ← 确认其存在(否则不能通过yum安装ProFTPD)

  如果以上,dag.repo文件不存在,则不能通过yum安装ProFTPD,需要定义非官方库。定义非官方库的方法请见 “CentOS的下载、安装及初始环境设置”一节中yum的相关设置。而且,在此前提下也要保证所定义的dag.repo文件的语法的正确性。

  然后,通过yum来在线安装ProFTPD。

[root@sample ~]# yum -y install proftpd  ← 安装ProFTPD

Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Reducing Dag RPM Repository for Red Hat Enterprise Linux to included packages only
Finished
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for proftpd to pack into transaction set.
proftpd-1.2.10-10.2.el4.r 100% |=========================| 15 kB 00:00
---> Package proftpd.i386 0:1.2.10-10.2.el4.rf set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
proftpd i386 1.2.10-10.2.el4.rf dag 699 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 699 k
Downloading Packages:
(1/1): proftpd-1.2.10-10. 100% |=========================| 699 kB 00:03
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: proftpd ######################### [1/1]

Installed: proftpd.i386 0:1.2.10-10.2.el4.rf
Complete!



  然后,通过修改相应配置文件配置ProFTPD。
[root@sample ~]# vi /etc/proftpd.conf  ← 修改ProFTPD的配置文件

ServerType        standalone   ← 找到这一行,在行首添加“#”
 ↓
#ServerType        standalone   ← 变为此状态,不使用常驻模式

#ServerType       inetd   ← 找到这一行,去掉行首的“#”
 ↓
ServerType       inetd   ← 变为此状态,通过超级服务器来启动ProFTPD

DefaultRoot        ~ !adm   ← 找到这一行,将“ !adm”改为“/public_html !wheel”
 ↓
DefaultRoot        ~/public_html !wheel   ← 变为此状态,使除wheel组用户的根目录为public_html

找到TLS设置的语句群,如下:
# TLS
# Explained at http://www.castaglia.org/proftpd/modules/mod_tls.html
----------------------------------------------------------------
#TLSEngine         on
#TLSRequired        on
#TLSRSACertificateFile   /usr/share/ssl/certs/proftpd.pem
#TLSRSACertificateKeyFile /usr/share/ssl/certs/proftpd.pem
#TLSCipherSuite      ALL:!ADH:!DES
#TLSOptions        NoCertRequest
#TLSVerifyClient       off
##TLSRenegotiate     ctrl 3600 data 512000 required off timeout 300
#TLSLog           /var/log/proftpd/tls.log
----------------------------------------------------------------

 ↓将以上水平线间部分的语句,每行行首的“#”都去掉,变为下面水平线间的状态:

----------------------------------------------------------------
TLSEngine          on
TLSRequired         on  ← 只允许TLS方式的连接(如果将on改为off,普通方式也被允许)
TLSRSACertificateFile    /usr/share/ssl/certs/proftpd.pem
TLSRSACertificateKeyFile  /usr/share/ssl/certs/proftpd.pem
TLSCipherSuite       ALL:!ADH:!DES
TLSOptions         NoCertRequest
TLSVerifyClient       off
#TLSRenegotiate      ctrl 3600 data 512000 required off timeout 300
TLSLog            /var/log/proftpd/tls.log
----------------------------------------------------------------

然后在配置文件的末尾填如下几行:

ExtendedLog        /var/log/proftpd/access.log WRITE,READ default  ← 记录连接日志到相应日志文件
ExtendedLog        /var/log/proftpd/auth.log AUTH auth  ← 记录认证日志到相应日志文件
MasqueradeAddress    digeast.no-ip.info  ← 定义服务器域名
PassivePorts        50000 50030  ← 为PASV模式连接时指定端口号(1024以后存在的任意端口号)


  然后,为服务器建立证书。
[root@sample ~]# cd /usr/share/ssl/certs  ← 进入相应的目录

[root@sample certs]# make proftpd.pem  ← 建立服务器证书

umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 ; \
cat $PEM1 > proftpd.pem ; \
echo "" >> proftpd.pem ; \
cat $PEM2 >> proftpd.pem ; \
rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
.........++++++
............++++++
writing new private key to '/tmp/openssl.sG3126'
-----
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) [GB]:CN  ← 输入国家简写
State or Province Name (full name) [Berkshire]:Hei Long Jiang  ← 输入省份
Locality Name (eg, city) [Newbury]:Harbin  ← 输入城市
Organization Name (eg, company) [My Company Ltd]:www.centospub.com  ← 输入组织名(任意)
Organizational Unit Name (eg, section) []:  ← 直接回车跳过
Common Name (eg, your name or your server's hostname) []:www.centospub.com   ← FTP服务器名反馈 
Email Address []:yourname@yourserver.com  ← 输入E-mail地址



  启动之前,先对超级服务器的ProFTPD的启动脚本做一些修改。
[root@sample certs]# vi /etc/xinetd.d/xproftpd  ← 编辑ProFTPD启动脚本

log_on_success += DURATION USERID  ← 找到此行,将“DURATION USERID”改为“HOST PID”
 ↓
log_on_success += HOST PID   ← 变为此状态,防止登录时要等待30秒

log_on_failure += USERID  ← 找到此行,将“USERID”改为“HOST”
 ↓
log_on_failure += HOST   ← 变为此状态,防止登录时要等待30秒

disable = yes  ← 找到此行,将yes改为no
 ↓
disable = no   ← 变为此状态,让ProFTPD通过超级服务器启动


  然后,通过重新启动超级服务器间接启动ProFTPD。
[root@sample certs]# chkconfig xproftpd on  ← 设置ProFTPD自启动

[root@sample certs]# chkconfig --list xproftpd  ← 查看ProFTPD自启动

xproftpd on  ← 确认为on的状态就OK

[root@sample certs]# /etc/rc.d/init.d/xinetd restart  ← 重新启动超级服务器

Stopping xinetd:                [ OK ]
Starting xinetd:                 [ OK ]



  当我们成功的启动了FTP服务之后,就可以通过客户端软件连接到服务器进行文件的上传和下载了。但由于,本站介绍的方法,把安全、传输的保密性放在了 第一位,这也就使得好多不支持TSL的FTP软件无法连接到服务器。支持TSL的FTP客户端软件,比较有代表性的有Staff-FTP, SmartFTP。本站将以SmartFTP为例(下一节),介绍如何从客户端通过FTP连接到服务器的方法。

推荐阅读
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 访问一个网页的全过程
    准备:DHCPUDPIP和以太网启动主机,用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连.学校的这台路由器与一个ISP链接,此ISP(Intern ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 深入理解动态链接库及其应用
    本文将探讨动态链接库的基本概念,包括Windows下的动态链接库(DLL)和Linux下的共享库(Shared Library),并详细介绍如何在Linux环境中创建和使用这些库。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 苹果系统频繁弹窗提示无法验证服务器身份?竟是网易邮箱证书过期所致
    近日,众多苹果用户发现iOS、iPadOS和macOS系统频繁弹出无法验证服务器身份的警告。问题根源在于网易邮箱未能及时更新其数字证书,导致原证书过期后无法被信任。 ... [详细]
  • CentOS 系统管理基础
    本文介绍了如何在 CentOS 中查询系统版本、内核版本、位数以及磁盘分区的相关知识。通过这些命令,用户可以快速了解系统的配置和磁盘结构。 ... [详细]
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
author-avatar
潜水的飞机537
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有