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

推荐阅读
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 如何查看电脑系统版本_腾讯云服务器系统版本怎么看?Windows和Centos版本怎么选?...
    腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 如何将CentOS8转换为CentOSStream
    CentOS Stream是一个持续交付的Linux发行版,它在RHEL之前处于领先地位。它将具有滚动发布,即不断进行更改。CentOS将成为一个上游版本,它将具有测试补丁和更新。 ... [详细]
  • 系统安装Debian系统的安装方式和Ubuntu系统的安装方式几乎是一样的,毕竟Ubuntu系统是基于Debian的,就如同CentOS基于Redhat ... [详细]
  • 阿里云服务器iis设置方法与上千种Linux桌面版本相比,Linux服务器只有可怜的十几种。但想要选对适合你的企业需要的仍然不是件容易的事情,选Linux服务器首先要 ... [详细]
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社区 版权所有