热门标签 | 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调试模式,加入开机启动,中文用户名登录暂未测试,可能会有问题,最好用英文。

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
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社区 版权所有