热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

配置ProFTPd并支持MySQL用户

Linux/UNIX下ftp服务器种类繁多,比如vsftp,wu-ftp,proftp,pure-ftp,最常用的,大概就这几种,不过,对比来对比去,vsftp是最简单的,如果是做一个提供外网可以直接匿名访问下载的服务器,vsftp最适合,wu-ftp因为经常爆出漏洞,所以,已经逐渐不被推荐,p
Linux/UNIX下ftp服务器种类繁多,比如vsftp,wu-ftp, proftp, pure-ftp,最常用的,大概就这几种,不过,对比来对比去,vsftp是最简单的,如果是做一个提供外网可以直接匿名访问下载的服务器,vsftp最适合,wu-ftp因为经常爆出漏洞,所以,已经逐渐不被推荐,pure-ftp应该是功能最强大的,可惜这个服务器有乱码问题,而且还不是很好解决,现在pure-ftp基本上已经停止UNIX版本的更新了,proftp发展的势头比较好,功能上和pure-ftp不相上下,和pure-ftp一样,proftp也支持mysql数据库来校验用户账户,成为搭建一个用户数比较多的ftp服务器首选,按照基本的搭建方法来阐述一个搭建proftp的过程。
proftp官方最新版本:1.3.3e,对于FreeBSD,可以先通过ports升级一下,port到最新版本:cvsup -g -L 2 ports-supfile ,然后make install clean,CentOS或Debian可以下载源码编译安装,也可以通过yum -y install/apt-get install proftpd来安装,如果由源码编译安装,默认没有启动脚本,需要自己写,这个比较麻烦,所以最好用系统安装软件的办法来安装。
配置:首选是能保证proftp正常工作,启动:/usr/local/etc/rc.d/proftpd start,Linux系统:/etc/init.d/proftpd start,如果没有启动脚本也可以直接通过 /usr/local/sbin/proftpd,Linux:/usr/sbin/proftpd 启动。
并使用系统的帐号登录,如果登录正常。则可以开始配置mysql。
基本数据库:
# proftp 数据库
CREATE DATABASE IF NOT EXISTS proftp CHARACTER SET UTF8 COLLATE utf8_general_ci;
USE proftp;
#
# 创建 用户组和用户,用来虚拟ftp用户组
#
# Table structure for table `ftpgroup`
#
CREATE TABLE IF NOT EXISTS ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE IF NOT EXISTS ftpquotalimits (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail int(10) unsigned NOT NULL default '0',
bytes_out_avail int(10) unsigned NOT NULL default '0',
bytes_xfer_avail int(10) unsigned NOT NULL default '0',
files_in_avail int(10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE IF NOT EXISTS ftpquotatallies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used int(10) unsigned NOT NULL default '0',
bytes_out_used int(10) unsigned NOT NULL default '0',
bytes_xfer_used int(10) unsigned NOT NULL default '0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE IF NOT EXISTS ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';
# quit;
# 插入sql的语句部分,插入一个用户,然后测试,用户名密码都为test
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 5501, 'ftpuser');
INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('jesse', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (10001, 'test', 'test', 5501, 5501, '/var/ftproot/10001', '/sbin/nologin', 0, '2011-05-03 16:08:36', '2011-05-03 16:08:54');
现在,修改配置文件,不过,在这之前,最好是停止proftp的运行,/etc/init.d/proftpd stop ,然后打开debug模式运行,这样,可以很直观的看到ftp配置问题。
# FreeBSD
/usr/local/sbin/proftpd -n -d 20
# Linux
/usr/sbin/proftpd -n -d 20
开启MySQL支持:
对于最新版本,在安装的时候会同时安装上 mysql模块,如果你是手动编译安装,编译的时候,记得加上mysql模块支持:
确认mysql 库位置,里面有很多.a结尾的文件,比如 libmysqld.a:
      /usr/lib/mysql/
确认mysql 头文件 mysql.h 的位置:
    /usr/include/mysql/mysql.h
 ./configure \
    --with-modules=mod_sql:mod_sql_mysql \
    --with-includes=/usr/include/mysql \
    --with-libraries=/usr/lib/mysql
make & make install
如果是用ports或deb或rpm安装,则默认就是安装上mysql模块的,现在看看如何启用,
如果是最新的1.3以后的版本,应该是没有 modules.conf这个文件,如果有的话,开启里面的mysql模块,即去掉前面的#号注释:如果是最新版本,则无须使用 LoadModule指令加载 mysql ,默认已经集成到一起。
# 启用 mysql
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
# 启用 mysql
现在根据你的系统,新建一个 proftpd-mysql.conf的空文件,路径可以随意,按照通常的配置,一般配置文件路径是,FreeBSD在/usr/local/etc/目录下,Linux在 /etc/目录下,在 proftpd.conf 文件里添加一行代码,引进mysql 配置:
#FreeBSD
Include /usr/local/etc/proftpd-mysql.conf
#Linux
Include /etc/proftpd-mysql.conf
这个文件的位置可以任意,但Include一定要修改成你自己的配置路径。
# proftpd-mysql.conf  ,这个文件内,除了数据库配置文件那一行需要修改,
# 其他直接拷贝即可。文件内容如下:
RootLogin                       off
RequireValidShell               off
DefaultRoot                     ~
IdentLookups                    off
UseReverseDns                   off
CreateHome              on
# 强制使用 mysql 验证登录用户
SQLBackend                      mysql
# sql数据库中,密码加密的类型,这里我以明文存储,所以是 Plaintext,其他加密方法可参考官方文档
SQLAuthTypes                 Plaintext
# 注意,老版本的配置文件里有 SQLAuthenticate                 users* groups* ,新版本已经没有这个指令了
# 取代的是用 AuthOrder 这个指令,指定以mysql为唯一校验方法。
AuthOrder                    mod_sql.c
# 连接数据库的字符串格式,记住这里,修改成你的数据配置,
# databasename@host database_user user_password
SQLConnectInfo  proftp@localhost  proftpd  proftpd_pwd
# 指定使用的列,不需要修改。
SQLUserInfo     ftpuser userid passwd uid gid homedir shell
SQLGroupInfo    ftpgroup groupname gid members
# 记录用户登录次数
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
# 记录用户上传或删除文件的时间。
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
好,现在打开 debug模式,测试是否连接正常,我在这个过程中遇到很多 421 Service not available 错误,打开debug后,发现有些是应为数据连接不上,有些则是因为目录不存在引起的,总之,正常配置后,不会遇到很多问题,debug的信息还算够用的,调试完毕后,可以关闭proftp调试模式,加入开机启动,中文用户名登录暂未测试,可能会有问题,最好用英文。

推荐阅读
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文介绍了MySQL窗口函数的基本概念、应用场景及常见函数的使用方法。窗口函数在处理复杂查询时非常有用,例如计算每个用户的订单排名、环比增长率、以及动态聚合等。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 如何处理PHP缺少扩展的问题
    本文将详细介绍如何解决PHP环境中缺少扩展的问题,包括检查当前环境、修改配置文件以及验证修改是否生效的具体步骤,帮助开发者更好地管理和使用PHP扩展。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 本文详细介绍了如何在 CentOS 7 及其衍生发行版(如 Red Hat, Oracle, Scientific Linux 7)上安装和完全卸载 GitLab。包括安装必要的依赖关系、配置防火墙、安装 GitLab 软件包以及常见问题的解决方法。 ... [详细]
  • 本文详细介绍了在尝试启动MySQL服务时,如果遇到错误提示‘MySQL未运行,但锁定文件(/var/lock/subsys/mysql)存在’应如何处理,包括具体的操作步骤和可能的原因分析。 ... [详细]
author-avatar
倍儿傻的叶子奇太_900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有