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

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

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

Pureftp的优点包括 :

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

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

下面以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-ldap --with-mysql --with-pgsql \
--with-nonroot --with-puredbmake 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 kmariadb-connector-c-config                noarch                3.2.6-1.el9                       appstream                    11 kmysql-common                              x86_64                8.0.41-2.el9                      appstream                    73 kmysql-libs                                x86_64                8.0.41-2.el9                      CRB                         1.2 Mperl-AutoLoader                           noarch                5.74-481.el9                      baseos                       21 kperl-B                                    x86_64                1.80-481.el9                      baseos                      180 kperl-Carp                                 noarch                1.50-460.el9                      baseos                       30 kperl-Class-Struct                         noarch                0.66-481.el9                      baseos                       22 kperl-Data-Dumper                          x86_64                2.174-462.el9                     baseos                       56 kperl-Digest                               noarch                1.19-4.el9                        baseos                       26 kperl-Digest-MD5                           x86_64                2.58-4.el9                        baseos                       37 kperl-Encode                               x86_64                4:3.08-462.el9                    baseos                      1.7 Mperl-Errno                                x86_64                1.30-481.el9                      baseos                       14 kperl-Exporter                             noarch                5.74-461.el9                      baseos                       32 kperl-Fcntl                                x86_64                1.13-481.el9                      baseos                       20 kperl-File-Basename                        noarch                2.85-481.el9                      baseos                       17 kperl-File-Path                            noarch                2.18-4.el9                        baseos                       36 kperl-File-Temp                            noarch                1:0.231.100-4.el9                 baseos                       60 kperl-File-stat                            noarch                1.09-481.el9                      baseos                       17 kperl-FileHandle                           noarch                2.03-481.el9                      baseos                       15 kperl-Getopt-Long                          noarch                1:2.52-4.el9                      baseos                       61 kperl-Getopt-Std                           noarch                1.12-481.el9                      baseos                       15 kperl-HTTP-Tiny                            noarch                0.076-462.el9                     baseos                       54 kperl-IO                                   x86_64                1.43-481.el9                      baseos                       88 kperl-IO-Socket-IP                         noarch                0.41-5.el9                        baseos                       43 kperl-IO-Socket-SSL                        noarch                2.073-2.el9                       baseos                      217 kperl-IPC-Open3                            noarch                1.21-481.el9                      baseos                       22 kperl-MIME-Base64                          x86_64                3.16-4.el9                        baseos                       31 kperl-Mozilla-CA                           noarch                20200520-6.el9                    baseos                       13 kperl-Net-SSLeay                           x86_64                1.94-1.el9                        baseos                      414 kperl-POSIX                                x86_64                1.94-481.el9                      baseos                       96 kperl-PathTools                            x86_64                3.78-461.el9                      baseos                       88 kperl-Pod-Escapes                          noarch                1:1.07-460.el9                    baseos                       21 kperl-Pod-Perldoc                          noarch                3.28.01-461.el9                   baseos                       87 kperl-Pod-Simple                           noarch                1:3.42-4.el9                      baseos                      225 kperl-Pod-Usage                            noarch                4:2.01-4.el9                      baseos                       41 kperl-Scalar-List-Utils                    x86_64                4:1.56-462.el9                    baseos                       71 kperl-SelectSaver                          noarch                1.02-481.el9                      baseos                       11 kperl-Socket                               x86_64                4:2.031-4.el9                     baseos                       56 kperl-Storable                             x86_64                1:3.21-460.el9                    baseos                       96 kperl-Symbol                               noarch                1.08-481.el9                      baseos                       14 kperl-Term-ANSIColor                       noarch                5.01-461.el9                      baseos                       49 kperl-Term-Cap                             noarch                1.17-460.el9                      baseos                       23 kperl-Text-ParseWords                      noarch                3.30-460.el9                      baseos                       17 kperl-Text-Tabs+Wrap                       noarch                2013.0523-460.el9                 baseos                       24 kperl-Time-Local                           noarch                2:1.300-7.el9                     baseos                       34 kperl-URI                                  noarch                5.09-3.el9                        baseos                      121 kperl-base                                 noarch                2.27-481.el9                      baseos                       16 kperl-constant                             noarch                1.33-461.el9                      baseos                       24 kperl-if                                   noarch                0.60.800-481.el9                  baseos                       14 kperl-interpreter                          x86_64                4:5.32.1-481.el9                  baseos                       71 kperl-libnet                               noarch                3.13-4.el9                        baseos                      130 kperl-libs                                 x86_64                4:5.32.1-481.el9                  baseos                      2.2 Mperl-mro                                  x86_64                1.23-481.el9                      baseos                       28 kperl-overload                             noarch                1.31-481.el9                      baseos                       45 kperl-overloading                          noarch                0.02-481.el9                      baseos                       12 kperl-parent                               noarch                1:0.238-460.el9                   baseos                       15 kperl-podlators                            noarch                1:4.14-460.el9                    baseos                      114 kperl-subs                                 noarch                1.03-481.el9                      baseos                       11 kperl-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,此用户设置为禁止登录
  • 系统服务文件 : pure-ftpd-non-root.service
  • PAM文件 : /etc/pam.d/pure-ftpd.由于普通用户无法读取/etc/shadow,因此此文件暂时没什么用处
  • 配置文件 : /etc/pure-ftpd/pure-ftpd.conf

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

source ~/.bashrc

说明 :

  • 新增了环境变量PURE_PASSWDFILEPURE_DBFILE
  • 将pure-ftpd的bin和sbin目录增加到PATH

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

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 -m <$HOME/temp/user1-pwd.txt

命令参数说明 :

  • useradd user1 : 新增虚拟用户user1
  • -c "User1" : 为虚拟用户user1设置全名(full name)。此选项为可选
  • -u pure-ftpd : 指定虚拟用户映射的操作系统账号
  • -d /storage/pure-ftpd-root/user1 : 指定虚拟用户user1HOME目录
  • -m : 生成/更新二进制数据库文件/etc/pure-ftpd/pureftpd.pdb

命令执行成功后,在/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)

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

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

说明 :

  • 缺省属性是600,导致普通用户无法读取此文件

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

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

说明 :

  • /storage/pure-ftpd-root是虚拟用户的根目录。配置文件启用了自动创建HOME目录

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

说明 :

  • 在HOME目录下(即/storage/pure-ftpd-root/user1)能看到上载的anaconda-ks.cfg

14.设置服务为开机启动

systemctl enable pure-ftpd-non-root

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

问题二:登录FTP服务端报错为530 Login authentication failed
Q : 由于编译时使用了--with-noroot参数,因此不建议以root用户启动进程。解决方法是:将配置文件/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服务


http://www.mrgr.cn/news/97811.html

相关文章:

  • js chrome 插件,下载微博视频
  • 蓝桥杯备赛学习笔记:高频考点与真题预测(C++/Java/python版)
  • 开源的7B参数OCR视觉大模型:RolmOCR
  • 【论文精读】Multi-scale Neighbourhood Feature Interaction Network
  • windows使用cmake安装openvdb-12.0.0库
  • IDEA遇到问题汇总
  • 【UE5】RTS游戏的框选功能+行军线效果实现
  • 机器学习之PCA主成分分析详解
  • 面试如何应用大模型
  • 算法训练之动态规划(一)
  • 在 Jupyter Notebook 中使用 Pandas 进行数据操作
  • 【语法】C++的list
  • 算法训练之位运算
  • 408 计算机网络 知识点记忆(6)
  • Java 面向对象(构造类、对象)
  • Java服务端开发基石:深入理解Spring IoC与依赖注入 (DI)
  • 41、web前端开发之Vue3保姆教程(五 实战案例)
  • 五种IO模型与select和poll分别实现多路转接
  • 用户画像(https://github.com/memodb-io/memobase)应用
  • Xilinx虚拟输入/输出(VIO)IP核详细介绍及使用示例