目 录CONTENT

文章目录

Pure-FTPd快速部署

简中仙
2024-06-12 / 0 评论 / 0 点赞 / 236 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-06-12,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

一、简介

Pure-FTPd 是一款快速、高质量、符合标准的 FTP 服务器,基于Troll-FTPd。

服务器在默认配置下是安全的,它没有已知的漏洞,设置起来非常简单,而且特别专为现代内核而设计。它已成功移植到 Linux、FreeBSD、Dragonfly BSD、NetBSD、OpenBSD、OSX、AIX 等等。

功能包括 chroot() 和/或虚拟 chroot() 主目录,虚拟域,内置“ls”,反盗版系统,可配置端口被动下载、FXP 协议、带宽限制、比率、基于 LDAP / MySQL / PostgreSQL 的身份验证、财富文件、类似 Apache日志文件、快速独立模式、文本/HTML/XML 实时状态报告、虚拟用户、虚拟配额、权限分离、TLS 等。

官网:https://www.pureftpd.org/project/pure-ftpd/

二、安装

1、制作签名证书

# openssl genrsa -out server.key 2048
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
# cat server.key server.crt > pure-ftpd.pem

2、安装依赖环境及软件

echo 2000 > /proc/sys/fs/super-max 
echo 60000 > /proc/sys/fs/file-max 
ulimit -n 60000 
echo 30000 65534 > /proc/sys/net/ipv4/ip_local_port_range 
echo 0 > /proc/sys/net/ipv4/tcp_syncookies 
echo 0 > /proc/sys/net/ipv4/tcp_ecn 
echo 0 > /proc/sys/net/ipv4/tcp_timestamps 
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling 
# vim /etc/fstab				# 通过noatime调整系统性能
",noatime"
# vim /boot/loader.conf
hw.ata.wc="1" 
kern.ipc.nmbclusters="60000"
# vim /etc/sysctl.conf
vfs.vmiodirenable=1 
kern.ipc.maxsockbuf=2097152 
kern.ipc.somaxconn=8192 
kern.ipc.maxsockets=16424 
kern.maxfiles=65536 
kern.maxfilesperproc=32768 
net.inet.tcp.rfc1323=1 
net.inet.tcp.delayed_ack=0 
net.inet.tcp.sendspace=65535 
net.inet.tcp.recvspace=65535 
net.inet.udp.recvspace=65535 
net.inet.udp.maxdgram=57344 
net.local.stream.recvspace=65535 
net.local.stream.sendspace=65535

3、编译软件

# mkdir -p /usr/local/pureftpd/log                              # 创建FTP日志存放目录
# touch /usr/local/pureftpd/log/pureftpd.log
# mkdir /usr/local/pureftpd/cert                              	# 创建FTP证书存放目录
# mv /root/pure-ftpd.pem /usr/local/pureftpd/cert
# mv /root/server.key /usr/local/pureftpd/cert/pure-ftpd.key
# yum -y groupinstall "Development Tools"
# yum install -y openssl openssl-devel gcc gcc-c++
# cd /usr/local/src
# wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.51.tar.gz
# tar zxf pure-ftpd-1.0.51.tar.gz
# cd pure-ftpd-1.0.51
# ./configure --prefix=/usr/local/pureftpd --without-inetd --with-altlog --with-puredb --with-throttling --with-peruserlimits --with-tls --with-everything --with-certfile=/usr/local/pureftpd/cert/pure-ftpd.pem --with-language=english,simplified-chinese --without-usernames --with-largefile
# make -j && make install
参数说明
--prefix更改安装前缀
--without-inetd构建系统不要使服务依赖于inetd或xinetd守护进程来启动
--with-altlog除了 syslog 输出外,还支持以替代格式记录到特定文件中。目前, 已实现 CLF、Stats、W3C 和xferlog 格式。
--with-puredb支持虚拟用户,即独立于系统帐户的本地用户数据库
--with-throttling启用带宽限制
--with-peruserlimits启用每个用户的并发限制
--with-tls启用 TLS 支持
--with-everything启用所有功能
--with-certfile指定带有 TLS 证书的文件
--with-language更改服务器消息的语言
--without-usernames不在目录列表中输出用户名和组名 ,只输出 UID 和 GID
--with-largefile支持大于2G的文件

4、修改软件配置及启动

# vim /usr/local/pureftpd/etc/pure-ftpd.conf
ChrootEveryone               yes
BrokenClientsCompatibility   no
MaxClientsNumber             50
Daemonize                    yes
MaxClientsPerIP              8
VerboseLog                   yes
DisplayDotFiles              no
AnonymousOnly                no
NoAnonymous                  yes
SyslogFacility               ftp
DontResolve                  yes
MaxIdleTime                  15
PureDB                       /usr/local/pureftpd/etc/pureftpd.pdb
LimitRecursion               2000 10
AnonymousCanCreateDirs       no
MaxLoad                      4
AntiWarez                    yes
Umask                        133:022
MinUID                       1000
AllowUserFXP                 no
AllowAnonymousFXP            no
ProhibitDotFilesWrite        no
ProhibitDotFilesRead         no
AutoRename                   no
AnonymousCantUpload          yes
AltLog                       clf:/usr/local/pureftpd/log/pureftpd.log
KeepAllFiles                 yes
CreateHomeDir                no
MaxDiskUsage                 99
CustomerProof                yes
NoTruncate                   yes
TLS                          1
TLSCipherSuite               HIGH
CertFile                     /usr/lcal/pureftpd/cert/server.pem
CertFileAndKey               "/usr/lcal/pureftpd/cert/server.pem" "/usr/lcal/pureftpd/cert/pure-ftpd.key"
# vim /etc/systemd/system/pure-ftpd.service
[Unit] 
Description=Pure-FTPd FTP server 
After=network.target 
[Service] 
ExecStart=/usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf
Restart=always 
[Install] 
WantedBy=multi-user.target
# systemctl enable pure-ftpd.service 
# systemctl start pure-ftpd.service

三、添加用户

# useradd pure-ftp     #创建系统账户
# chown -R pure-ftp:pure-ftp /data/ftp          #创建FTP主目录
# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp         #用 pure-pw useradd 命令创建一个用户
# pure-pw mkdb  #生成账户信息数据
# pure-pw list       #查看所有FTP的账号及主目录
# pure-pw userdel test    #删除test账号
# pure-pw passwd test    							#修改test密码

四、配置说明

# 若想使用此配置运行Pure-FTPd,而非命令行选项,
# 请执行以下命令:
#
# ${exec_prefix}/sbin/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf
#
# 在线文档:
# https://www.pureftpd.org/project/pure-ftpd/doc

# 限制用户仅能访问其主目录
ChrootEveryone               yes

# 如果先前的选项设置为“no”,则以下组的成员将不受限制。其他用户将受到限制。如不想对任何人应用chroot(),只需注释掉ChrootEveryone和TrustedGID。
# 受信任的组ID,其成员不受chroot限制
TrustedGID                   100

# 为了解决某些客户端的兼容性问题,开启此选项
BrokenClientsCompatibility   no

# 同时在线的最大用户数
MaxClientsNumber             50

# 以后台进程方式运行
Daemonize                    yes

# 来自同一IP地址的同时最大连接数
MaxClientsPerIP              8

# 若要记录所有客户端命令,请设置为"yes"。
# 此指令可指定两次,以便同时记录服务器响应。
VerboseLog                   no

# 即使客户端未发送"-a",也显示以点开头的文件。
DisplayDotFiles              yes

# 仅作为公共FTP服务器运行,不允许认证用户登录。
AnonymousOnly                no

# 禁止匿名连接。只接受已认证的用户。
NoAnonymous                  no

# 设置syslog日志设施(auth, authpriv, daemon, ftp, security, user, local*)
# 默认设施为"ftp"。设置为"none"则禁用日志记录。
SyslogFacility               ftp

# 显示幸运饼干信息(需要配置FortunesFile路径)
# FortunesFile                 /usr/share/fortune/zippy

# 日志文件中不解析主机名。除非你完全信任反向主机名解析,
# 并且不在乎DNS解析可能带来的延迟,否则建议启用此选项。
DontResolve                  yes

# 最大空闲时间(单位:分钟,默认为15分钟)
MaxIdleTime                  15

# LDAP配置文件路径(参见README.LDAP)
# LDAPConfigFile               /etc/pureftpd-ldap.conf

# MySQL配置文件路径(参见README.MySQL)
# MySQLConfigFile              /etc/pureftpd-mysql.conf

# PostgreSQL配置文件路径(参见README.PGSQL)
# PGSQLConfigFile              /etc/pureftpd-pgsql.conf

# PureDB用户数据库文件路径(用于虚拟用户认证,参见README.Virtual-Users)
# PureDB                       /etc/pureftpd.pdb

# 外部认证模块pure-authd的socket路径(参见README.Authentication-Modules)
# ExtAuth                      /var/run/ftpd.sock

# 如需启用PAM认证,请取消以下行的注释
# PAMAuthentication            yes

# 如需使用简单的Unix风格认证(/etc/passwd),请取消以下行的注释
# UnixAuthentication           yes

# 请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和 UnixAuthentication
# 配置可以单独使用,也可以组合使用。例如,如果你同时使用MySQLConfigFile和UnixAuthentication,
# 则首先尝试SQL服务器进行认证。如果SQL认证失败(因为用户未找到),
# 将尝试使用系统认证进行第二次尝试。如果SQL认证因密码不匹配而失败,
# 认证链将在此处停止。认证方法按给出的顺序串联。

# 'ls'命令的递归限制。第一个参数是最多显示的文件数,
# 第二个参数是最大子目录深度。
LimitRecursion               10000 8

# 允许匿名用户创建新目录吗?
AnonymousCanCreateDirs       no

# 当系统负载大于给定值时,禁止匿名用户下载。
MaxLoad                      4

# 被动模式连接的端口范围,尽可能保持宽泛。
# PassivePortRange             30000 50000

# 在PASV/EPSV响应中强制使用特定的IP地址。适用于NAT环境。
# 也可以接受符号主机名,用于具有动态IP地址的网关。

# ForcePassiveIP               192.168.0.1

# 匿名用户的上传/下载比率。
# AnonymousRatio               1 10

# 所有用户的上传/下载比率。
# 此指令会覆盖前面的设置。
# UserRatio                    1 10

# 禁止下载属于"ftp"系统用户的文件;
# 这些文件可能是上传的但未经本地管理员验证。
AntiWarez                    yes

# 监听的IP地址和端口(默认为所有IP地址,端口21)。
# Bind                         127.0.0.1,21

# 匿名用户的最大带宽限制,单位为KB/s
# AnonymousBandwidth           8

# 所有用户(包括匿名用户)的最大带宽限制,单位为KB/s
# 使用AnonymousBandwidth或UserBandwidth之一,不要同时使用。
# UserBandwidth                8

# 文件创建掩码。格式为:<文件的umask>:<目录的umask>。
# 如感到需要严格安全,可设置为177:077。
Umask                        133:022

# 经过身份验证的用户登录所需的最小UID。
# 例如,设置为100意味着UID低于100的所有用户都无法登录。
# 如果希望允许"root"登录,应设置为0。
MinUID                       100

# 允许认证用户进行FXP传输。
AllowUserFXP                 no

# 是否允许匿名用户及非匿名用户进行匿名FXP传输。
AllowAnonymousFXP            no

# 用户不能删除或写入以点('.')开始的文件,
# 即使他们是这些文件的所有者。但如果启用了TrustedGID,
# 则该组例外地可以访问点文件。
ProhibitDotFilesWrite        no

# 禁止读取以点开始的文件(如.history, .ssh...)。
ProhibitDotFilesRead         no

# 不允许文件覆盖。当上传的文件名已存在时,
# 文件会自动重命名为file.1, file.2, file.3, ...
AutoRename                   no

# 允许匿名用户上传新文件(no = 允许上传)。
AnonymousCantUpload          no

# 只允许来自特定IP地址的连接是非匿名的。
# 你可以用这个指令来为匿名FTP开放多个公共IP,
# 并保留一个私有的防火墙IP用于远程管理。
# 你还可以只为认证用户允许非路由本地IP(如10.x.x.x),
# 并在另一个IP上运行一个只允许匿名的公共FTP服务器。
# TrustedIP                    10.1.1.1
# 若要在日志条目中添加PID,取消以下行的注释。
# LogPID                       yes

# 创建一个以Apache类似格式记录传输的日志文件:
# fw.c9x.org - jedi [13/Apr/2017:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件可以由常见的HTTP流量分析器处理。
# AltLog                       clf:/var/log/pureftpd.log

# 创建一个优化用于统计报告的传输日志文件格式。
# AltLog                       stats:/var/log/pureftpd.log

# 创建一个符合W3C标准格式的日志文件(与许多HTTP日志分析器兼容)
# AltLog                       w3c:/var/log/pureftpd.log

# 禁止CHMOD命令。用户不能更改他们自己的文件权限。
# NoChmod                      yes

# 允许用户恢复/上传文件,但**不允许**删除它们。
# KeepAllFiles                 yes

# 如果缺失,自动创建家目录。
# CreateHomeDir                yes

# 启用虚拟配额。第一个值是最大文件数。
# 第二个值是最大大小,以兆字节为单位。
# 所以1000:10限制每个用户最多1000个文件和10MB。
# Quota                        1000:10

# 如果你的pure-ftpd编译支持独立模式,你可以更改PID文件的位置。
# 默认位置是/var/run/pure-ftpd.pid
# PIDFile                      /var/run/pure-ftpd.pid

# 如果你的pure-ftpd编译支持pure-uploadscript,
# 这将使pure-ftpd将新上传的信息写入/var/run/pure-ftpd.upload.pipe,
# 以便pure-uploadscript可以读取并启动脚本处理上传。
# 如果你实际上不使用pure-uploadscript,不要启用此选项。
# CallUploadScript             yes

# 当分区使用率超过百分比时,禁止新的上传。
# 对于允许匿名上传的服务器,这个选项很有用。
MaxDiskUsage                   99

# 设置为'yes'以防止用户重命名文件。
# NoRename                     yes

# 设置为'yes'以防止用户做出可能导致意外问题的操作,
# 如'chmod 0 public_html',虽然这是有效的,但可能会让用户无意中导致自身问题。
CustomerProof                yes

# 用户并发限制。只有在FTP服务器编译时带有--with-peruserlimits选项时才有效。
# 格式为:<每个用户最大会话数>:<匿名用户最大会话数>
# 例如,3:20意味着认证用户最多可以有3个活动会话,而匿名用户最多允许20个会话。
# PerUserLimits                3:20

# 当上传文件时,如果已有同名旧版本文件,
# 旧文件既不会被删除也不会被截断。
# 文件将以临时名称存储,上传完成后,会原子地重命名。
# 例如,当上传大型PHP脚本时,Web服务器会继续提供旧版本,
# 并在完整文件传输完成后立即切换到新版本。
# 此选项与虚拟配额不兼容。
# NoTruncate                   yes

# 此选项接受三个值:
# 0:禁用SSL/TLS加密层(默认)。
# 1:接受明文和加密会话。
# 2:拒绝不使用TLS安全机制的连接,包括匿名会话。
# 不要盲目取消注释此选项。请确保:
# 1)服务器已编译支持TLS(--with-tls),
# 2)已放置有效的证书,
# 3)只有兼容的客户端可以登录。
# TLS                          1

# TLS会话的密码套件。
# 默认套件是安全的,设置此属性通常仅用于降低安全性以适应旧版客户端。
# 前缀为-C:以要求有效的客户端证书。
# 如果使用-C:,请确保客户端的公钥在服务器上可用。
# TLSCipherSuite               HIGH

# TLS会话的证书文件。
# 证书本身和密钥可以打包到同一个文件中,也可以分为两个文件。
# CertFile用于捆绑的cert+key,CertFileAndKey用于单独的文件。
# 只使用其中一个。
# CertFile                     /etc/ssl/private/pure-ftpd.pem
# CertFileAndKey               "/etc/pure-ftpd.pem" "/etc/pure-ftpd.key"

# 外部证书处理器的Unix套接字,用于TLS
# ExtCert                      /var/run/ftpd-certs.sock
# 在独立模式下仅监听IPv4地址(即禁用IPv6)
# 默认情况下,启用IPv4和IPv6。
# IPV4Only                     yes

# 在独立模式下仅监听IPv6地址(即禁用IPv4)
# 默认情况下,启用IPv4和IPv6。
# IPV6Only                     yes

# 如果文件存在,附加另一个文件的内容。
# 如果文件不存在,该指令将被忽略。
# 可以递归包含更多文件。
# Include                      additional_configuration.conf
0

评论区