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

ProFTPd配置通过数据库方式的虚拟用户认证登录

一、安装proftpd+postgresql数据库方式认证./configure\--prefix/usr/local/proftpd\--with-modulesmod_sql:mod_sql_postgres\--with-includes/usr/include\--with-libraries/usr/lib/

一、安装proftpd + postgresql数据库方式认证

./configure \
--prefix=/usr/local/proftpd \
--with-modules=mod_sql:mod_sql_postgres \
--with-includes=/usr/include \
--with-libraries=/usr/lib/postgresql/8.4/lib

make
make install

注:安装postgresql时编译时可能会出现错误,主要可能缺少libpq-fe.h/postgres_ext.h头文件和libpq.so.5.2库文件,我已将其重新打包到proftpd-1.3.5rc2安装包中的postgres目录中,可供下载参考


二、安装proftpd + mysql数据库方式认证
./configure \
--prefix=/usr/local/proftpd  \
--with-modules=mod_sql:mod_sql_mysql  \
--with-includes=/usr/include/mysql  \
--with-libraries=/usr/lib/mysql


make
make install

注:--with-includes和--with-libraries需要正确填写机器中所安装的mysql头文件和库文件路径,如不知道可使用locate mysql查找,Ubuntu中使用apt-get install方式安装mysql的默认路径如上

三、proftpd数据库配置文件(/usr/local/proftpd/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 Server LZG"
ServerType   standalone
DefaultServer   on

# Port 21 is the standard FTP port.
Port    21

# Don't use IPv6 support by default.
UseIPv6    off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask    022
MaxLoginAttempts  3
TimeoutLogin   120
TimeoutIdle   600
TimeoutNoTransfer  900
MaxClients   100
MaxClientsPerHost  5

RequireValidShell  off


# 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    nobody
Group    nogroup

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~

# Normally, we want files to be overwriteable.
AllowOverwrite  on

# Bar use of SITE CHMOD by default

  DenyAll

DefaultRoot ~
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users* groups*
SQLConnectInfo proftpd@10.253.102.12 postgres 123
SQLUserInfo users userid passwd uid gid homedir shell
SQLGroupInfo groups groupname gid members
SQLMinID 500
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1 where userid='%u'" users
SQLLog STOR,DELE modified


四、这里就不介绍数据库表的详细创建步骤了,网上一大堆,我创建了一个users和groups表,下面为postgres的proftpd表创建语句,mysql更简单不再介绍



-- Table: users
-- DROP TABLE users;
CREATE TABLE users
(
  userid character varying(256) NOT NULL,
  passwd character varying(256),
  uid integer DEFAULT (1000)::numeric,
  gid integer DEFAULT (1000)::numeric,
  homedir character varying(256),
  shell character varying(256),
  count integer DEFAULT (0)::numeric,
  used double precision DEFAULT 0.0,
  quote double precision DEFAULT 0.0,
  CONSTRAINT ftpusers_pkey PRIMARY KEY (userid)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE users
  OWNER TO postgres;
-- Table: groups
-- DROP TABLE groups;
CREATE TABLE groups
(
  groupname character varying(256) NOT NULL,
  gid integer DEFAULT (1000)::numeric,
  members character varying(256),
  CONSTRAINT ftpgroups_pkey PRIMARY KEY (groupname)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE groups
  OWNER TO postgres;


数据表创建完成后,配置文件修改后,重启proftpd进程,在数据库中创建一个用户然后登录就可以了。

五、可能遇到的问题
root@liuzhigong-Vostro-230:~# ftp 127.0.0.1
Connected to 127.0.0.1.
220 ProFTPD 1.3.5rc2 Server (ProFTPD Server LZG) [127.0.0.1]
Name (127.0.0.1:root): lzgtest
331 Password required for lzgtest
Password:
421 Service not available, remote server has closed connection
Login failed.
No control connection for command: No such file or directory

可能会遇到下面这个问题,我google和baidu了好久,查了好多方法不行,最后才发现是配置文件后面sql语句写错导致,可供大家参考,如果大家创建的表名不是users,是ftpusers,则配置文件中的对应sql语句的地方要做相应修改才行


SQLUserInfo users(根据实际情况修改表名) userid passwd uid gid homedir shell
SQLGroupInfo groups(根据实际情况修改表名) groupname gid members
SQLMinID 500
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1 where userid='%u'" users(根据实际情况修改表名)
SQLLog STOR,DELE modified


还有一个问题是可能直接使用IP连接proftpd服务器时感觉连接速度非常慢,要等很久服务器才会返回信息,经常导致ftp连接超时,这时可在配置文件中关闭proftpd的域名反向解析以加快服务器响应时间:

# 不显示服务器相关信息, 如proftpd版本
ServerIdent off
# 禁用反向域名解析
UseReverseDNS off


推荐阅读
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
author-avatar
mobiledu2502908197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有