制作 pure-ftp 的离线编译移植包适用于 CentOS 平台

由于很久都没有接触过 ftp 了,这次安装踩了很多坑,很多教程都是复制粘贴而且内容不全。这里整理一些我完整安装的过程。

pure-ftp 是通过编译的方式安装的,因为尝试过  rpm 安装,会有特别特别多的依赖等着你处理,不如直接编译,竟然不需要一个依赖。

编译及运行

打包的过程参考上文关于 PHP 的移植包制作过程以及移植还原方式的大概流程。这里只记录比较重要的地方。

你可能需要安装一些基础编译库,我复制上文的贴在这里。

yum install -y gcc gcc-c++ automake autoconf libtool make

下载 pure-ftp

直接从 GitHub 下载最新的源码包进行编译

wget https://github.com/jedisct1/pure-ftpd/releases/download/1.0.49/pure-ftpd-1.0.49.tar.gz --no-check-certificate

编译参数

比较完整的编译选项,不过 --with-everything 已经可以概括基本的大部分功能。

./configure --prefix=/usr/local/pure-ftpd --with-everything --with-puredb  --with-ftpwho  –with-throttling –with-ratios –with-quotas –with-virtualhosts  –with-virtualchroot –with-sysquotas –with-cookie --with-rfc2640  --with-language=simplified-chinese

太多用不上的功能,我去除了 mysql 那些还是有些多,一般我们选用下面两个就够了。

这个是基础大部分功能以及中文语言包

./configure --prefix=/usr/local/pure-ftpd --with-everything --with-rfc2640  --with-language=simplified-chinese

这个是仅 puredb 的虚拟用户功能和中文语言包

./configure --prefix=/usr/local/pure-ftpd --with-puredb --with-rfc2640  --with-language=simplified-chinese

编译

make
make install

用户权限

在系统中创建用户和组,名称均为:pureftp 方便记忆和操作。这个是为了给以后要开放 ftp 功能的目录设置权限,就需要用到所属权。

-d 的选项是代表用户的所属目录,建议为你的 ftp 根目录,我这里为 /home/ftp ,没有就需要创建。并给这个用户指定了 nologin,使得禁止直接登录。

groupadd -g 2000 pureftp
useradd -u 2000 -g pureftp -d /home/ftp -s/sbin/nologin pureftp

配置文件

编辑配置文件 /usr/local/pure-ftpd/etc/pure-ftpd.conf ,修改 PureDB 的路径。

找到 PureDB 并此行修改为:

PureDB /usr/local/pure-ftpd/etc/pureftpd.pdb

运行

你可以尝试通过 "pure-ftpd  pure-ftpd.conf" 的方式运行。很多教程都没有单程序运行办法,都直接给个服务运行或者干脆装完了,就结束。

例如:

/usr/local/pure-ftpd/sbin/pure-ftpd /usr/local/pure-ftpd/etc/pure-ftpd.conf

写入服务:vi /etc/init.d/pure-ftpd

#!/bin/bash  
#chkconfig: 2345 85 15  
  
PURE_FTPD="/usr/local/pure-ftpd/sbin/pure-ftpd"  
PURE_CONF="/usr/local/pure-ftpd/etc/pure-ftpd.conf"  
PURE_PID="/var/run/pure-ftpd.pid"  
PROG="Pure-FTPd"  
RETVAL=0  
  
start() {  
    echo -n $"Starting $PROG... "  
    $PURE_FTPD $PURE_CONF  
    if [ "$?" = 0 ] ; then  
        echo " done"  
    else  
        echo " failed"  
    fi  
}  
  
stop() {  
    echo -n $"Stopping $PROG...  "  
    if [ ! -e $PURE_PID ]; then  
        echo -n $"$PROG is not running."  
        exit 1  
    fi  
    kill `cat $PURE_PID`  
    if [ "$?" = 0 ] ; then  
        echo " done"  
    else  
        echo " failed"  
    fi  
}  
  
restart(){  
    echo $"Restarting $PROG..."  
    $0 stop  
    sleep 2  
    $0 start  
}  
  
status(){  
    if [ -e $PURE_PID ]; then  
        echo $"$PROG is running."  
    else  
        echo $"$PROG is not running."  
    fi  
}  
  
case "$1" in  
    start)  
        start  
        ;;  
    stop)  
        stop  
        ;;  
    restart)  
        restart  
        ;;  
    status)  
        status  
        ;;  
  *)  
        echo $"Usage: $0 {start|stop|restart}"  
esac

赋值权限

chmod +x /etc/init.d/pure-ftpd

操作选项

# 启动
service pure-ftpd start

# 停止
service pure-ftpd stop

# 重启
service pure-ftpd restart

# 加入开机自启
systemctl enable pure-ftpd

# 移除开机自启
systemctl disable pure-ftpd

虚拟用户

来到 pure-pw 的目录运行

cd /usr/local/pure-ftpd/bin/

或者你嫌麻烦可以直接软连接到系统环境变量的目录

ln -s /usr/local/pure-ftpd/bin/pure-pw /usr/local/bin/pure-pw

创建用户

pure-pw useradd test -u pureftp -d /home/ftp/test -m

参数解释:

  •  test 被创建的虚拟用户名

  • -u pureftp 指定的系统用户组

  • -d /home/ftp/test 虚拟用户的根目录

  • -m 更新到 puredb

更新用户

选项可以根据上面创建的参数指定其修改为新的值。

pure-pw usermod test -d /home/ftp/test2

修改密码

pure-pw passwd test

删除用户

pure-pw userdel test

查看用户

pure-pw show test

查看用户列表

pure-pw list

生成 puredb 文件

更新完操作记得通过这个命令更新数据库文件并重启 pure-ftpd 才会生效。

pure-pw mkdb

更多细节查看 ./pure-pw --help

移植打包

以上在外网机器测试无误后,再将其移植到内网。

只需要将 /usr/local/pure-ftpd 目录打包,并还原到内网机器中的这个目录即可。

复制完毕后,还需要将服务文件写入系统中,赋予执行权限以及创建用户等操作。

故障参考

1.如果 21 端口不通,尝试关闭防火墙

systemctl disable firewalld.service

2.如果没有上传文件权限

设置目录所属权限,如果你和我的目录不一样,注意修改。

chown -R pureftp:pureftp /home/ftp

如果还是不行,请关闭 selinux

Comments

  • avatar
    金石热点网

    文章写的不错,加油~

    2020-09-25 01:40