由于很久都没有接触过 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
文章写的不错,加油~