
一、安装 pure-ftp
#默认的yum源不包含pure-ftpd,需先安装epel扩展源yum install -y epel-releaseyum install -y pure-ftpd
二、配置 pure-ftp
1、创建 ftp 系统用户
# 创建用户 ftpuseradd ftp -s /sbin/nologin
2、配置FTP存储根目录
# 创建 FTP 存储根目录mkdir /data/ftp# 设置 FTP 根目录权限chown -R ftp.ftp /data/ftp/
3、编辑 pure-ftp 配置文件
编辑 pure-ftp 配置文件 /etc/pure-ftpd/pure-ftpd.conf 部分参数如下:
# PureDB 用户数据库路径(重要)PureDB /etc/pure-ftpd/pureftpd.pdb# 锁定所有用户到家目录中ChrootEveryone yes# 如果虚拟用户的目录不存在则自动创建CreateHomeDir yes# 兼容不同客户端BrokenClientsCompatibility yes# 显示隐藏文件DisplayDotFiles no# 防止命令误操作CustomerProof yes# 被动模式端口范围PassivePortRange 30000 50000# 被动模式 IPForcePassiveIP 192.168.1.100# 只允许匿名用户访问AnonymousOnly no# 不允许匿名用户访问(为 no 时允许)NoAnonymous yes# 不允许匿名用户上传文件(为 no 时允许)AnonymousCantUpload yes# 不允许匿名用户创建目录(为 no 时允许)AnonymousCanCreateDirs yes# 仅运行认证用户进行FXP传输AllowUserFXP no# 对匿名用户和非匿名用户允许进行匿名 FXP 传输AllowAnonymousFXP no# 设置日志的告警级别,默认为 ftp,none 是禁止记录日志SyslogFacility none
4、创建 ftp 虚拟用户
# 创建 ftp 用户 aaa 家目录mkdir /data/ftp/aaachown -R ftp.ftp /data/ftp/aaa/# 创建 ftp 用户 aaa, -u 是将虚拟用户 aaa 与系统用户 ftp 关联在一起,aaa 账号登录后是以 ftp 的身份来读取和下载文件,-d 是指定ftp_usera账户的家目录,这样可以使用户 aaa 只能访问其家目录 /data/ftp/aaa/。pure-pw useradd aaa -u ftp -d /data/ftp/aaa/# 创建用户信息数据库文件,这一步很关键。pure-pw mkdb# 查看已创建的账号列表pure-pw list
5、启动 pure-ftp 服务
# 启动 pure-ftp 服务systemctl start pure-ftpd.service# 添加开机启动项systemctl enable pure-ftpd.service# 或使用systemctl enable --now pure-ftpd.service
6、使用客户端测试连接
使用 Windows 或 Linux 客户端登录 FTP 测试服务是否正常。
三、配置文件 /etc/pure-ftpd/pure-ftpd.conf 完整参数说明
############################################################# ## Configuration file for pure-ftpd wrappers ## ############################################################## If you want to run Pure-FTPd with this configuration# instead of command-line options, please run the# following command :## /usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf## Please don't forget to have a look at documentation at# http://www.pureftpd.org/documentation.shtml for a complete list of# options.# Cage in every user in his home directory# 锁定所有用户到家目录中ChrootEveryone yes# If the previous option is set to "no", members of the following group# won't be caged. Others will be. If you don't want chroot()ing anyone,# just comment out ChrootEveryone and TrustedGID.# 信任组ID100,可以不锁定# TrustedGID 100# Turn on compatibility hacks for broken clients# 兼容不同客户端BrokenClientsCompatibility no# Maximum number of simultaneous users# 最大的客户端数量MaxClientsNumber 50# Fork in background# 后台运行Daemonize yes# Maximum number of sim clients with the same IP address# 每个ip最大连接数MaxClientsPerIP 8# If you want to log all client commands, set this to "yes".# This directive can be duplicated to also log server responses.# 记录日志VerboseLog no# List dot-files even when the client doesn't send "-a".# 显示隐藏文件DisplayDotFiles no# Don't allow authenticated users - have a public anonymous FTP only.# 只允许匿名用户访问AnonymousOnly no# Disallow anonymous connections. Only allow authenticated users.# 不允许匿名用户NoAnonymous yes# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)# The default facility is "ftp". "none" disables logging.# 设置日志的告警级别,默认为ftp,none是禁止记录日志SyslogFacility ftp# Display fortune cookies# 定制用户登陆后的显示信息# FortunesFile /usr/share/fortune/zippy# Don't resolve host names in log files. Logs are less verbose, but# it uses less bandwidth. Set this to "yes" on very busy servers or# if you don't have a working DNS.# 是否在日志文件中进行主机名解析,不进行客户端DNS解析DontResolve yes# Maximum idle time in minutes (default = 15 minutes)# 最大空闲时间MaxIdleTime 30# LDAP configuration file (see README.LDAP)# LDAP 配置文件路径# LDAPConfigFile /etc/pureftpd-ldap.conf# MySQL configuration file (see README.MySQL)# MySQL 配置文件路径MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf# Postgres configuration file (see README.PGSQL)# Postgres 配置文件路径# PGSQLConfigFile /etc/pureftpd-pgsql.conf# PureDB user database (see README.Virtual-Users)# PureDB 用户数据库路径PureDB /usr/local/pureftpd/etc/pureftpd.pdb# Path to pure-authd socket (see README.Authentication-Modules)# pure-authd 的socket 路径# ExtAuth /var/run/ftpd.sock# If you want to enable PAM authentication, uncomment the following line# 如果你要启用 PAM 认证方式, 去掉下面行的注释# PAMAuthentication yes# If you want simple Unix (/etc/passwd) authentication, uncomment this# 如果你要启用 简单的 Unix系统 认证方式(/etc/passwd), 去掉下面行的注释# UnixAuthentication yes# Please note that LDAPConfigFile, MySQLConfigFile, PAMAuthentication and# UnixAuthentication can be used only once, but they can be combined# together. For instance, if you use MySQLConfigFile, then UnixAuthentication,# the SQL server will be asked. If the SQL authentication fails because the# user wasn't found, another try # will be done with /etc/passwd and# /etc/shadow. If the SQL authentication fails because the password was wrong,# the authentication chain stops here. Authentication methods are chained in# the order they are given.# 'ls' recursion limits. The first argument is the maximum number of# files to be displayed. The second one is the max subdirectories depth# 'ls' 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。LimitRecursion 10000 8# Are anonymous users allowed to create new directories ?# 是否允许匿名用户创建新目录AnonymousCanCreateDirs no# If the system is more loaded than the following value,# anonymous users aren't allowed to download.# 超出负载后禁止下载MaxLoad 4# Port range for passive connections replies. - for firewalling.# 被动模式的端口范围# PassivePortRange 30000 50000# Force an IP address in PASV/EPSV/SPSV replies. - for NAT.# Symbolic host names are also accepted for gateways with dynamic IP# addresses.# 强制一个IP地址使用被动响应# ForcePassiveIP 192.168.0.1# Upload/download ratio for anonymous users.# 匿名用户的上传/下载的比率# AnonymousRatio 1 10# Upload/download ratio for all users.# This directive superscedes the previous one.# 所有用户的上传/下载的比率# UserRatio 1 10# Disallow downloading of files owned by "ftp", ie.# files that were uploaded but not validated by a local admin.# 禁止下载匿名用户上传但未经验证的文件AntiWarez yes# IP address/port to listen to (default=all IP and port 21).# 服务监听的IP 地址和端口。(默认是所有IP地址和21端口)# Bind 127.0.0.1,21# Maximum bandwidth for anonymous users in KB/s# 匿名用户带宽限制(KB)# AnonymousBandwidth 8# Maximum bandwidth for *all* users (including anonymous) in KB/s# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.# 所有用户的最大带宽(KB/s),包括匿名用户。UserBandwidth 1024# File creation mask. <umask for files>:<umask for dirs> .# 177:077 if you feel paranoid.# 新建目录及文件的属性掩码值Umask 133:022# Minimum UID for an authenticated user to log in.# 认证用户允许登陆的最小组ID(UID)MinUID 100# Allow FXP transfers for authenticated users.# 仅允许认证用户进行 FXP 传输。AllowUserFXP no# Allow anonymous FXP for anonymous and non-anonymous users.# 对匿名用户和非匿名用户允许进行匿名 FXP 传输AllowAnonymousFXP no# Users can't delete/write files beginning with a dot ('.')# even if they own them. If TrustedGID is enabled, this group# will have access to dot-files, though.# 不能删除/写入隐藏文件ProhibitDotFilesWrite no# Prohibit *reading* of files beginning with a dot (.history, .ssh...)# 禁止读取隐藏文件ProhibitDotFilesRead no# Never overwrite files. When a file whose name already exist is uploaded,# it get automatically renamed to file.1, file.2, file.3, ...# 有同名文件时自动重新命名AutoRename no# Disallow anonymous users to upload new files (no = upload is allowed)# 不允许匿名用户上传文件AnonymousCantUpload no# Only connections to this specific IP address are allowed to be# non-anonymous. You can use this directive to open several public IPs for# anonymous FTP, and keep a private firewalled IP for remote administration.# You can also only allow a non-routable local IP (like 10.x.x.x) to# authenticate, and keep a public anon-only FTP server on another IP.# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP,# 而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外# 一个IP上提供纯匿名的FTP服务。##TrustedIP 10.1.1.1# If you want to add the PID to every logged line, uncomment the following# line.# 如果你要为日志每一行添加 PID 去掉下面行的注释#LogPID yes# Create an additional log file with transfers logged in a Apache-like format :# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338# This log file can then be processed by www traffic analyzers.# 使用类似于Apache的格式创建一个额外的日志文件# AltLog clf:/var/log/pureftpd.log# Create an additional log file with transfers logged in a format optimized# for statistic reports.# 使用优化过的格式为统计报告创建一个额外的日志文件# AltLog stats:/var/log/pureftpd.log# Create an additional log file with transfers logged in the standard W3C# format (compatible with most commercial log analyzers)# 使用标准的W3C格式创建一个额外的日志文件# AltLog w3c:/var/log/pureftpd.log# Disallow the CHMOD command. Users can't change perms of their files.# 不接受 CHMOD 命令。用户不能更改他们文件的属性#NoChmod yes# Allow users to resume and upload files, but *NOT* to delete them.# 允许用户恢复和上传文件,却不允许删除他们#KeepAllFiles yes# Automatically create home directories if they are missing# 用户主目录不存在的话,自动创建CreateHomeDir yes# Enable virtual quotas. The first number is the max number of files.# The second number is the max size of megabytes.# So 1000:10 limits every user to 1000 files and 10 Mb.# 限制用户可以创建的最大文件数和用户空间大小Quota 10000:10240# If your pure-ftpd has been compiled with standalone support, you can change# the location of the pid file. The default is /var/run/pure-ftpd.pid# PID文件位置#PIDFile /var/run/pure-ftpd.pid# If your pure-ftpd has been compiled with pure-uploadscript support,# this will make pure-ftpd write info about new uploads to# /var/run/pure-ftpd.upload.pipe so pure-uploadscript can read it and# spawn a script to handle the upload.# Don't enable this option if you don't actually use pure-uploadscript.# 如果你的 pure-ftpd 编译时加入了 pure-uploadscript 支持,这个指令将会使 pure-ftpd# 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,这样 pure-uploadscript# 就能读然后调用一个脚本去处理新的上传##CallUploadScript yes# This option is useful with servers where anonymous upload is# allowed. As /var/ftp is in /var, it save some space and protect# the log files. When the partition is more that X percent full,# new uploads are disallowed.# 文件所在磁盘的最大使用率MaxDiskUsage 99# Set to 'yes' if you don't want your users to rename files.# 是否允许重命名文件(默认不允许)#NoRename yes# Be 'customer proof' : workaround against common customer mistakes like# 'chmod 0 public_html', that are valid, but that could cause ignorant# customers to lock their files, and then keep your technical support busy# with silly issues. If you're sure all your users have some basic Unix# knowledge, this feature is useless. If you're a hosting service, enable it.# 打开以防止用户犯常识性错误CustomerProof yes# Per-user concurrency limits. It will only work if the FTP server has# been compiled with --with-peruserlimits (and this is the case on# most binary distributions) .# The format is : <max sessions per user>:<max anonymous sessions># For instance, 3:20 means that the same authenticated user can have 3 active# sessions max. And there are 20 anonymous sessions max.# 单个用户限制:每一个用户最大允许的进程;最大的匿名用户进程# PerUserLimits 3:20# When a file is uploaded and there is already a previous version of the file# with the same name, the old file will neither get removed nor truncated.# Upload will take place in a temporary file and once the upload is complete,# the switch to the new version will be atomic. For instance, when a large PHP# script is being uploaded, the web server will still serve the old version and# immediatly switch to the new one as soon as the full file will have been# transfered. This option is incompatible with virtual quotas.# NoTruncate yes# This option can accept three values :# 0 : disable SSL/TLS encryption layer (default).# 1 : accept both traditional and encrypted sessions.# 2 : refuse connections that don't use SSL/TLS security mechanisms,# including anonymous sessions.# Do _not_ uncomment this blindly. Be sure that :# 1) Your server has been compiled with SSL/TLS support (--with-tls),# 2) A valid certificate is in place,# 3) Only compatible clients will log in.# TLS 1# List of ciphers that will be accepted for SSL/TLS connections# Prefix with -S: in order to totally disable SSL but not TLS.# TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3# Listen only to IPv4 addresses in standalone mode (ie. disable IPv6)# By default, both IPv4 and IPv6 are enabled.# IPV4Only yes# Listen only to IPv6 addresses in standalone mode (ie. disable IPv4)# By default, both IPv4 and IPv6 are enabled.# IPV6Only yes# UTF-8 support for file names (RFC 2640)# Define charset of the server filesystem and optionnally the default charset# for remote clients if they don't use UTF-8.# Works only if pure-ftpd has been compiled with --with-rfc2640# FileSystemCharset big5# ClientCharset big5
