当前位置: 首页 > news >正文

以普通用户身份启动pure-ftpd服务端

Pureftp的优点包括 :

  • 高性能,适用于大容量数据传输。
  • 安全性强,通过SSL/TLS加密和身份验证机制保证文件传输安全。
  • 易用性高,具有直观的用户界面。
  • 灵活性强,支持多种文件存储方式。
  • 没有漏洞,便于维护

基于Centos 9的pureftp的RPM包在EPEL仓库上。RPM版本不支持以普通用户启动后台进程。
因此从源码编译时,使用--with-nonroot参数,以便以普通用户启动

下面以pureftp 1.0.52为例

前置任务 :

  • 安装EPEL仓库源

1.编译源码

https://github.com/jedisct1/pure-ftpd/下载源码

tar -zvxf pure-ftpd-1.0.52.tar.gz
cd pure-ftpd-1.0.52

./autogen.sh
 
./configure \
--prefix=/usr/bin/pure-ftpd-1.0.52 --sysconfdir=/etc/pure-ftpd \
--with-everything --with-tls --with-nonroot --with-pam

make install

# 清理编译结果
make uninstall

2.查看版本

pure-ftpd --help

我已经打包为RPM : pure-ftpd-1.0.52-1.el9.x86_64.rpm
下载地址是 : https://github.com/mosaicwang/myrpm/releases/download/pure-ftpd-1.0.52/pure-ftpd-1.0.52-1.el9.x86_64.rpm

3.安装
使用打包好的RPM文件:

dnf install ./pure-ftpd-1.0.52-1.el9.x86_64.rpm -y

输出如下 :

=====================================================================================================================================
 Package                                   Architecture          Version                           Repository                   Size
=====================================================================================================================================
Installing:
 pure-ftpd                                 x86_64                1.0.52-1.el9                      @commandline                261 k
Installing dependencies:
 libsodium                                 x86_64                1.0.18-8.el9                      epel                        161 k
 mariadb-connector-c-config                noarch                3.2.6-1.el9                       appstream                    11 k
 mysql-common                              x86_64                8.0.41-2.el9                      appstream                    73 k
 mysql-libs                                x86_64                8.0.41-2.el9                      CRB                         1.2 M
 perl-AutoLoader                           noarch                5.74-481.el9                      baseos                       21 k
 perl-B                                    x86_64                1.80-481.el9                      baseos                      180 k
 perl-Carp                                 noarch                1.50-460.el9                      baseos                       30 k
 perl-Class-Struct                         noarch                0.66-481.el9                      baseos                       22 k
 perl-Data-Dumper                          x86_64                2.174-462.el9                     baseos                       56 k
 perl-Digest                               noarch                1.19-4.el9                        baseos                       26 k
 perl-Digest-MD5                           x86_64                2.58-4.el9                        baseos                       37 k
 perl-Encode                               x86_64                4:3.08-462.el9                    baseos                      1.7 M
 perl-Errno                                x86_64                1.30-481.el9                      baseos                       14 k
 perl-Exporter                             noarch                5.74-461.el9                      baseos                       32 k
 perl-Fcntl                                x86_64                1.13-481.el9                      baseos                       20 k
 perl-File-Basename                        noarch                2.85-481.el9                      baseos                       17 k
 perl-File-Path                            noarch                2.18-4.el9                        baseos                       36 k
 perl-File-Temp                            noarch                1:0.231.100-4.el9                 baseos                       60 k
 perl-File-stat                            noarch                1.09-481.el9                      baseos                       17 k
 perl-FileHandle                           noarch                2.03-481.el9                      baseos                       15 k
 perl-Getopt-Long                          noarch                1:2.52-4.el9                      baseos                       61 k
 perl-Getopt-Std                           noarch                1.12-481.el9                      baseos                       15 k
 perl-HTTP-Tiny                            noarch                0.076-462.el9                     baseos                       54 k
 perl-IO                                   x86_64                1.43-481.el9                      baseos                       88 k
 perl-IO-Socket-IP                         noarch                0.41-5.el9                        baseos                       43 k
 perl-IO-Socket-SSL                        noarch                2.073-2.el9                       baseos                      217 k
 perl-IPC-Open3                            noarch                1.21-481.el9                      baseos                       22 k
 perl-MIME-Base64                          x86_64                3.16-4.el9                        baseos                       31 k
 perl-Mozilla-CA                           noarch                20200520-6.el9                    baseos                       13 k
 perl-Net-SSLeay                           x86_64                1.94-1.el9                        baseos                      414 k
 perl-POSIX                                x86_64                1.94-481.el9                      baseos                       96 k
 perl-PathTools                            x86_64                3.78-461.el9                      baseos                       88 k
 perl-Pod-Escapes                          noarch                1:1.07-460.el9                    baseos                       21 k
 perl-Pod-Perldoc                          noarch                3.28.01-461.el9                   baseos                       87 k
 perl-Pod-Simple                           noarch                1:3.42-4.el9                      baseos                      225 k
 perl-Pod-Usage                            noarch                4:2.01-4.el9                      baseos                       41 k
 perl-Scalar-List-Utils                    x86_64                4:1.56-462.el9                    baseos                       71 k
 perl-SelectSaver                          noarch                1.02-481.el9                      baseos                       11 k
 perl-Socket                               x86_64                4:2.031-4.el9                     baseos                       56 k
 perl-Storable                             x86_64                1:3.21-460.el9                    baseos                       96 k
 perl-Symbol                               noarch                1.08-481.el9                      baseos                       14 k
 perl-Term-ANSIColor                       noarch                5.01-461.el9                      baseos                       49 k
 perl-Term-Cap                             noarch                1.17-460.el9                      baseos                       23 k
 perl-Text-ParseWords                      noarch                3.30-460.el9                      baseos                       17 k
 perl-Text-Tabs+Wrap                       noarch                2013.0523-460.el9                 baseos                       24 k
 perl-Time-Local                           noarch                2:1.300-7.el9                     baseos                       34 k
 perl-URI                                  noarch                5.09-3.el9                        baseos                      121 k
 perl-base                                 noarch                2.27-481.el9                      baseos                       16 k
 perl-constant                             noarch                1.33-461.el9                      baseos                       24 k
 perl-if                                   noarch                0.60.800-481.el9                  baseos                       14 k
 perl-interpreter                          x86_64                4:5.32.1-481.el9                  baseos                       71 k
 perl-libnet                               noarch                3.13-4.el9                        baseos                      130 k
 perl-libs                                 x86_64                4:5.32.1-481.el9                  baseos                      2.2 M
 perl-mro                                  x86_64                1.23-481.el9                      baseos                       28 k
 perl-overload                             noarch                1.31-481.el9                      baseos                       45 k
 perl-overloading                          noarch                0.02-481.el9                      baseos                       12 k
 perl-parent                               noarch                1:0.238-460.el9                   baseos                       15 k
 perl-podlators                            noarch                1:4.14-460.el9                    baseos                      114 k
 perl-subs                                 noarch                1.03-481.el9                      baseos                       11 k
 perl-vars                                 noarch                1.05-481.el9                      baseos                       13 k
Installing weak dependencies:
 perl-NDBM_File                            x86_64                1.15-481.el9                      appstream                    22 k

安装完成后 : :

  • pure-ftpd安装到/usr/bin/pure-ftpd-1.0.52目录下,可执行文件在binsbin目录中
  • 创建了新的操作系统用户pure-ftpd,此用户设置为禁止登录
  • 有2个系统服务文件 : pure-ftpd.servicepure-ftpd-non-root.service
  • 有一个PAM文件 : /etc/pam.d/pure-ftpd
  • 配置文件在 : /etc/pure-ftpd/pure-ftpd.conf

4.安装过程修改了~/.bashrc,新增了环境变量,因此执行如下命令,使环境变量生效

source ~/.bashrc

5.开放防火墙

# 因为普通用户无法启用<1024的端口号,因此使用2121作为FTP的端口号
firewall-cmd --permanent --add-port=2121/tcp

# 如下端口号段为passive模式下的端口段
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload

6.修改配置文件 : /etc/pure-ftpd/pure-ftpd.conf

  • 设置监听端口为2121 : Bind 0.0.0.0,2121
  • 取消PIDFile的注释,且将PID文件放到/home/pure-ftpd目录 : PIDFile /home/pure-ftpd/pure-ftpd.pid
  • 取消PassivePortRange的注释,且设置端口范围是40000-40100 : PassivePortRange 40000 40100
  • 设置noanonymous为yes,则禁止匿名登陆 : NoAnonymous yes
  • (可选)设置MaxDiskUsage为85,即磁盘空闲低于85%,则不允许上载
  • 设置AltLogstats:/home/pure-ftpd/log/pureftpd.log.注意:日志文件的路径必须是绝对路径
  • 设置puredb为 : PureDB /etc/pure-ftpd/pureftpd.pdb
  • 取消CreateHomeDir的注释 : CreateHomeDir yes
  • 显示详细日志 : VerboseLog yes
  • 设置MinUID为1000 : MinUID 1000

6.1 创建日志文件的目录

mkdir -p /home/pure-ftpd/log
chown pure-ftpd -R /home/pure-ftpd/log

7.启动pure-ftpd服务 :

systemctl start pure-ftpd-non-root

说明 :

  • 使用ps -ef|grep pure可以看到此进程是以pure-ftpd用户启动的

8.创建虚拟用户

mkdir -p $HOME/temp

# 虚拟用户user1的密码存放在文本文件中,这样方便用命令创建用户
cat >$HOME/temp/user1-pwd.txt <<EOF
hello
hello
EOF

# 创建虚拟用户 : user1 ,密码为hello(密码存放在$HOME/temp/user1-pwd.txt中)
pure-pw useradd user1 -c "User1 " \
-u pure-ftpd \
-d /storage/pure-ftpd-root/user1 <$HOME/temp/user1-pwd.txt

命令参数说明 :

  • useradd user1 : 新增虚拟用户user1
  • -c "User1" : 为虚拟用户user1设置全名(full name)。此选项为可选
  • -u pure-ftpd : 指定虚拟用户映射的操作系统账号
  • -d /storage/pure-ftpd-root/user1 : 指定虚拟用户user1HOME目录

命令执行成功后,在/etc/pure-ftpd目录下得到pureftpd.passwd文件。此文件为文本格式

9.查看创建的虚拟用户user1

pure-pw show user1

输出如下 :

Login              : user1
Password           : $argon2id$v=19$m=8192,t=255,p=1$ZUIxc5SjhAAUEDDRob2TIQ$WaLzK11Ec+TYHe6XM14qp6MZq7vTrN95CSHDzawZWFs
UID                : 1000 (pure-ftpd)
GID                : 1000 (pure-ftpd)
Directory          : /storage/pure-ftpd-root/user1/./
Full name          : User1
Download bandwidth : 0 Kb (unlimited)
Upload   bandwidth : 0 Kb (unlimited)
Max files          : 0 (unlimited)
Max size           : 0 Mb (unlimited)
Ratio              : 0:0 (unlimited:unlimited)
Allowed local  IPs :
Denied  local  IPs :
Allowed client IPs :
Denied  client IPs :
Time restrictions  : 0000-0000 (unlimited)
Max sim sessions   : 0 (unlimited)

10.将文本格式的密码文件转换为二进制格式

pure-pw mkdb

命令执行成功后,在/etc/pure-ftpd目录下得到pureftpd.pdb文件

11.设置密码文件的权限为644

chmod 644 /etc/pure-ftpd/pureftpd.p*

12.为虚拟用户创建HOME目录

mkdir -p /storage/pure-ftpd-root/user1
chown -R pure-ftpd /storage/pure-ftpd-root
chmod o+rX -R /storage

13.用客户端验证

# 安装FTP客户端软件
dnf install -y ftp

# 连接到本机的2121端口
ftp -p localhost 2121

命令参数说明:

  • -p : 以passive模式连接服务端

输出如下 :

Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220---------- Welcome to Pure-FTPd ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 15:23. Server port: 2121.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (localhost:root): user1	# 输入虚拟用户的用户名user1
331 User user1 OK. Password required
Password:						# 输入user1的密码hello
230 OK. Current directory is /	# 成功登陆
Remote system type is UNIX.
Using binary mode to transfer files.

13.1测试上载

ftp>put anaconda-ks.cfg

输出如下 :

local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (127,0,0,1,156,92)
150 Accepted data connection
226-File successfully transferred			# 上载成功
226 0.032 seconds (measured here), 36.40 Kbytes per second
1177 bytes sent in 0.0311 secs (37.79 Kbytes/sec)

13.2查看HOME目录

ftp> ls

输出如下 :

227 Entering Passive Mode (127,0,0,1,156,111)
150 Accepted data connection
drwxr-x---    2 1000       0                  29 Apr  9 14:57 .
drwxr-x---    2 1000       0                  29 Apr  9 14:57 ..
-rw-r--r--    1 1000       pure-ftpd        1177 Apr  9 14:57 anaconda-ks.cfg
226-Options: -a -l
226 3 matches total

14.设置服务为开机启动

systemctl enable pure-ftpd-non-root

15.常见问题 :
问题一:登录FTP服务端报错为421 Login authentication failed
Q:则说明编译时没有--with-puredb选项,即不支持虚拟用户

问题二:登录FTP服务端报错为530 Login authentication failed
Q : 将配置文件/etc/pure-ftpd/pure-ftpd.conf中的MinUID设置为0,然后重启pure-ftpd-non-root.service服务

问题三:以root启动pure-ftpd.service,然后登录FTP服务端报错为I cann't trust Your
Q : 将配置文件/etc/pure-ftpd/pure-ftpd.conf中的MinUID设置为0,然后重启pure-ftpd.service服务

相关文章:

  • windows使用命令查看占用8080端口的进程
  • CCF - GESP Python三级考试题目示例
  • STM32_HAL库提高中断执行效率
  • 采矿业中的无人机-通过无人机勘测完实现 99% 的精确测量和 30 倍以上的加速数据采集
  • [随笔] nn.Embedding的前向传播与反向传播
  • Spring Boot项目中结合MyBatis实现MySQL的自动主从切换
  • 快排算法 (分治实现)
  • 11. Langchain输出解析(Output Parsers):从自由文本到结构化数据
  • 【后端开发】Spring MVC-常见使用、Cookie、Session
  • 分析下HashMap容量和负载系数,它是怎么扩容的?
  • 底盘---全向轮(Omni Wheel)
  • 重温Java - Java基础二
  • 无人设备遥控器之通信链路管理篇
  • C++ 创建静态数组出现栈满程序崩溃的问题
  • 【虚拟机栈中的栈帧是什么?有什么作用?局部变量表、操作数栈、动态链接和方法返回地址是什么?有什么作用?为什么要放在栈帧里?】
  • Ubuntu24.04 编译 Qt 源码
  • 一个可以在Android手机上运行的Linux高仿window10的应用
  • Python中的AdaBoost分类器:集成方法与模型构建
  • VT01N/VT02N进行交货的时候,对装运点加权限控制的增强
  • 原生SSE实现AI智能问答+Vue3前端打字机流效果
  • wordpress搭建商城网站/交换链接营销
  • 建立问答类的网站/seo代理
  • 密云区住房和城乡建设委员会网站/网站seo优化服务商
  • 南宁月嫂网站建设/优化网站快速排名软件
  • 网站上的网站地图怎么做/制作网页的步骤
  • 长沙网站建设服务商/爱站网 关键词挖掘工具