热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ProFTPD与MySQL和mod_quota的整合配置过程

前言:本文的描述平台为RedHatLinux/x868.0(Psyche),适用于RedHatLinux/x869.0(Shrike)。一、软件获取(本文以proftpd-1.2.7、mod_quota-1.28和MySQL-3.23.56为例)1.ProFTPDproftpd-1.2.7.tar.gzproftpd-

前言:

本文的描述平台为Red Hat Linux/x86 8.0 (Psyche),适用于Red Hat Linux/x86 9.0 (Shrike)。

一、软件获取(本文以proftpd-1.2.7、mod_quota-1.28和MySQL-3.23.56为例)
1. ProFTPD
proftpd-1.2.7.tar.gz
proftpd-1.2.7-1.i386.rpm
proftpd-standalone-1.2.7-1.i386.rpm 下载: http://www.mysql.com/

二、安装ProFTPD
1. 卸载wu-ftpd
rpm -e anonftp
rpm -e wu-ftpd 2. 安装ProFTPD
rpm -ivh proftpd-1.2.7-1.i386.rpm
rpm -ivh proftpd-standalone-1.2.7-1.i386.rpm
3. 编译ProFTPD
tar -zxvf proftpd-1.2.7.tar.gz
cp mod_quota.c_for_1.2.7 ./proftpd-1.2.7/contrib/mod_quota.c
vi ./proftpd-1.2.7/contrib/mod_quota.c
# 将其中的“/* #define QUOTA_MYSQL *' target="_blank">http://www.proftpd.org
proftpd.conf 配置详情:http://www.proftpd.org/docs/configuration.html
2. mod_quota v1.28
mod_quota.c_for_1.2.7
下载: ftp://pooh.urbanrage.com/pub/c/
3. MySQL
MySQL-3.23.56-1.i386.rpm
MySQL-client-3.23.56-1.i386.rpm
MySQL-devel-3.23.56-1.i386.rpm
MySQL-shared-3.23.56-1.i386.rpm
下载: http://www.mysql.com/

二、安装ProFTPD
1. 卸载wu-ftpd
rpm -e anonftp
rpm -e wu-ftpd 2. 安装ProFTPD
rpm -ivh proftpd-1.2.7-1.i386.rpm
rpm -ivh proftpd-standalone-1.2.7-1.i386.rpm
3. 编译ProFTPD
tar -zxvf proftpd-1.2.7.tar.gz
cp mod_quota.c_for_1.2.7 ./proftpd-1.2.7/contrib/mod_quota.c
vi ./proftpd-1.2.7/contrib/mod_quota.c
# 将其中的“/* #define QUOTA_MYSQL */ ”改为“#define QUOTA_MYSQL”
cd ../proftpd-1.2.7
./configure --prefix=/usr --syscOnfdir=/etc --localstatedir=/var/run --mandir=/usr/man --with-libraries=/usr/lib/mysql --with-includes=/usr/include/mysql --with-modules=mod_sql:mod_sql_mysql:mod_quota
make
make install

三、安装MySQL和建立数据库
1. 安装MySQL
rpm -ivh MySQL-3.23.56-1.i386.rpm
rpm -ivh MySQL-client-3.23.56-1.i386.rpm
rpm -ivh MySQL-devel-3.23.56-1.i386.rpm
rpm -ivh MySQL-shared-3.23.56-1.i386.rpm
2. 建立数据库
#建立数据库proftpd
CREATE DATABASE proftpd;
#选定使用的数据(proftpd)
USE proftpd
#建立组表
DROP TABLE IF EXISTS `groups`;
CREATE TABLE `groups` (
`groupname` varchar(255) binary NOT NULL default '',
`gid` int(11) NOT NULL default '0',
`members` text NOT NULL,
PRIMARY KEY (`groupname`)
)TYPE=MyISAM;
#建立用户表
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`userid` varchar(255) binary NOT NULL default '',
`passwd` varchar(255) binary NOT NULL default '',
`uid` int(11) default NULL,
`gid` int(11) default NULL,
`homedir` varchar(255) default NULL,
`shell` varchar(255) default NULL,
`count` int(11) default NULL,
`used` double(10,1) default '0.0',
`quota` double(10,1) default '104857600.0',
PRIMARY KEY (`userid`)
) TYPE=MyISAM;
#建立数据库用户及初始化用户密码(数据库用户名:proftpd , 密码: 12345678)
grant all privileges on proftpd.* to proftpd@localhost identified by '12345678';
flush privileges;
四、设置proftpd ( 配置文件 /etc/proftpd.conf )
#将“User nobody”改为“User ftp”
User ftp #将“Group nogroup”改为“Group ftp”
Group ftp
#关闭proftpd的反向解析查询, 从而加速ftp连线登录
UseReverseDNS off
#将用户限制自己的目录下
DefaultRoot ~
#不使用shell
RequireValidShell no
#打开磁盘配额限制
Quotas on
QuotaCalc on
#硬性限制,将上传超出配额限制的文件删除
QuotaType hard
#默认的配额(100MB)
DefaultQuota 102400
#将默认的单位由“byte”改为“KB”
QuotaBlockSize 1024
QuotaBlockName "K bytes"
#Disable ident protocol (RFC1413)
IdentLookups off
#MySQL的连接参数:数据库@主机名 用户名 密码
SQLConnectInfo proftpd@localhost proftpd 12345678
#指定认证方式
SQLAuthenticate users
#用户密码类型(本文的设置把持Backend、Crypt加密密码和不加密码)
SQLAuthTypes Backend Crypt Plaintext
#用户表信息:表名“user”, 字段名“passwd uid gid 用户目录 shell”
SQLUserInfo users userid passwd uid gid homedir shell
#组表信息: 表名 组名字段 组值字段 成员字段
SQLGroupInfo groups groupname gid members
#用户登录后,将用户的登录次数+1
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE userid='%u'" users
#用户登录后,显示已经登录过的次数
SQLNamedQuery count SELECT "count FROM users WHERE userid='%u'"
SQLShowInfo PASS "230" "You've logged on %{count} times, %u"
#如果用户目录不存在,自动创建用户目录
SQLHomedirOnDemand on
#Quota信息的表名
SQLQuotaTable users
#MySQL的连接参数: 主机名 用户名 密码 数据库
SQLQuotaInfo localhost proftpd 12345678 proftpd
#用户的字段名
SQLQuotaName userid
#用户已经使用空间的字段名
SQLQuotaUsed used
#用户磁盘配额的字段名
SQLQuotaQuota quota

五、测试
1. 启动Proftd
/etc/rc.d/init.d/proftpd start
2. 建立测试用户
测试用户: test
密码(加密): 87654321
uid: 14
gid: 50
目录:/home/ftp/test
shell: /sbin/nologin
已登录数: 0
已使用空间: 0
磁盘限额: 100MB
方法一: 命令行方式创建
shell> mysql -u proftpd -p
mysql> USE proftpd
mysql> INSERT INTO users VALUES ("test", PASSWORD( "87654321" ) , 14, 50, "/home/ftp/test", "/sbin/nologin", 0, 0, 10240000);
方法二: 用phpMyAdmin方式创建(在选定proftpd数据库的情况执行下列SQL语句)
INSERT INTO users VALUES ("test", PASSWORD( "87654321" ) , 14, 50, "/home/ftp/test", "/sbin/nologin", 0, 0, 10240000);
ceiba
2003-05-18
补充: 常用设置参数
ServerIdent on ftp.abc.com # ftp登录时,显示指的域名ftp.abc.com, 而不显示默认的主机名(域名)
UseReverseDNS off # 关闭proftpd的反向解析查询, 从而加速ftp连线登录
DefaultRoot ~ # 把ftp用户强制限定在自己目录下 ? 加强系统安全
TimesGMT off # 关闭GMT与本地时区绑定 ? 使用目录和文件的时间显示与系统一致
调试proftpd:
/usr/sbin/proftpd -c /etc/proftpd.conf -d 5 -n
参考:
Proftpd+mysql+quota的实现方法
http://www.eduhr.com/edu/2002-12-30/149.htm
以下是/etc/proftpd.conf的一个配置实例
--------------------------------------------------------------------------------
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon. ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30
# Set the user and group under which the server will run.
User ftp
Group ftp
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
UseReverseDNS off
TimesGMT off
DefaultRoot ~
RequireValidShell no
Quotas on
QuotaCalc on
QuotaType hard
DefaultQuota 102400
QuotaBlockSize 1024
QuotaBlockName "K bytes"
IdentLookups off
SQLConnectInfo proftpd@localhost proftpd 12345678
SQLAuthenticate users
SQLAuthTypes Backend Crypt Plaintext
SQLUserInfo users userid passwd uid gid homedir shell
SQLGroupInfo groups groupname gid members
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE userid='%u'" users
SQLNamedQuery count SELECT "count FROM users WHERE userid='%u'"
SQLShowInfo PASS "230" "You've logged on %{count} times, %u"
SQLHomedirOnDemand on
SQLQuotaTable users
SQLQuotaInfo localhost proftpd 12345678 proftpd
SQLQuotaName userid
SQLQuotaUsed used
SQLQuotaQuota quota
# Normally, we want files to be overwriteable.

AllowOverwrite on

# A basic anonymous configuration, no upload directories. If you do not
# want anonymous users, simply delete this entire section.

User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot

DenyAll

 


推荐阅读
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
author-avatar
htqdw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有