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

CentOS5.3系统安装ProFTPd1.3.2并配置MySQL虚拟用户

利用Mysql做FTP校验,即通过数据库管理FTP用户信息,检验登录等......,进入正题.一、安装Mysql软件包(64位):MySQL-server-community-5.1.38-0.rhel5.x86_64.rpmMySQL-shared-community-5.1.38-0.rhel5.x86_64.rp
利用Mysql做FTP校验,即通过数据库管理FTP用户信息,检验登录等......,进入正题.>>

一、           安装Mysql软件包(64)
MySQL-server-community-5.1.38-0.rhel5.x86_64.rpm
MySQL-shared-community-5.1.38-0.rhel5.x86_64.rpm
MySQL-client-community-5.1.38-0.rhel5.x86_64.rpm
MySQL-devel-community-5.1.38-0.rhel5.x86_64.rpm
资源包可以在http://ftp.up.ac.za/pub/windows/MySQL/Downloads/MySQL-5.1/下载,本教程对Mysql的rpm方式安装省略,需要注意的是devel包是必须安装的,只有安装devel包后才能生成/usr/include/mysql,32位机器安装的lib路径要注意一下是/usr/lib/mysql即可,关于msyql的安装网上很多资料都可以参考。

二、        安装proftpd
下载proftpd-1.3.2.tar.gz
wget http://ftp.ntu.edu.tw/proftpd/distrib/source/proftpd-1.3.2.tar.gz
cd /usr/local #这是我放置proftpd-1.3.2.tar.gz的目录
tar zxvf proftpd-1.3.2.tar.gz
cd proftpd-1.3.2
./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/include/mysql --with-libraries=/usr/lib64/mysql
make
make install
首先需要声明的是以下的配置会跟你的安装目录有关,安装成功后则会生成/usr/local/etc/目录,其中包含核心配置文件proftpd.conf,同时在/usr/local/sbin下有proftpd可执行文件,通常用来启动服务用的,其中pid文件文件是自启动脚本中创建的,这部分在后面会讲到。对以上两个目录做查看,如下图所示:
说明:若在make或make install中有错则需要注意是否是gcc方面的问题导致。

三、        配置Mysql认证
认证这部分主要是配置proftpd.conf文件,在修改配置文件之前最好养成先备份一个文件的习惯,否则修改出错后没有办法找到原来的版本。并在proftpd.conf中加入以下内容,

1.修改组信息

# Set the user and group under which the server will run.

User                           nobody
Group                  nogroup
将Group对应的nogroup修改为如下的nobody

# Set the user and group under which the server will run.

User                                                nobody

Group                                             nobody

2.加入数据校验配置

# 屏蔽服务器版本信息
ServerIdent off

# 数据库连接的信息,ftpusers是数据库名, localhost是主机名,3306是端口号,root是连接数据库的用户名,123456是密码。

SQLConnectInfo ftpusers@localhost:3306 root 123456

# 数据的认证方式

# Backend表示用户认证方式为MySQL数据库的认证方式 
# Plaintext表示明文认证方式,排在最前面的为最先使用的方式

SQLAuthTypes Backend Plaintext

#指定用来做用户认证的表的有关信息。("users"和"grps"是数据表名字,其后为字段信息)

SQLUserInfo users userid passwd uid gid home shell

SQLGroupInfo grps grpname gid members

#设置如果shell为空时允许用户登录:

RequireValidShell off  

#数据库的鉴别                                      

SQLAuthenticate users groups usersetfast groupsetfast

#如果home目录不存在,则系统会为根据它的home项新建一个目录:

#注意SQLHomedirOnDemand已经在1.3.2以后的版本中改名为CreateHome
CreateHome on

#设置系统运行日志和文件传输日志

SystemLog /var/log/proftpd.syslog

TransferLog /var/log/proftpd.transferlog

3.建立相应的系统用户
在本例中,只整个FTP服务只提供一个有效的系统用户ftpuser和组ftpgrp,当然你也可以设置多个系统用户。但出于安全的考虑,我只设一个,用他来启动FTP daemon,并把所有的FTP用户映射过这个用户。
先建立ftpgrp组:
groupadd -g 5500 -r ftpgrp    //增加一个组ID为5500的ftpgrp组
建立ftpuser用户:
useradd -u 5501 -g 5500 -d /home/ftp -s /bin/bash -r ftpuser
为ftpuser建立home,把所有的FTP user 活动空间全放在此目录下:
mkdir /home/ftp
chown ftpuser /home/ftp
chgrp ftpgrp  /home/ftp

4.初始化数据库
1)创建数据库和表
create database ftpusers;
use ftpusers;
建立一个用户表USERS,这个表是必须的:
create table USERS ( userid TEXT NOT NULL,
passwd TEXT NOT NULL,
uid INT NOT NULL,
gid INT NOT NULL,
home TEXT,
shell TEXT
);
此表是为了用户认证所需要的,其中userid、passwd是必不可少的,userid是用做FTP服务的用户名;passwd是指此用户的密码;uid是系统用户的ID,也就是所映射的系统用户;gid是所属系统组的ID;home是该用户所在的HOME目录;shell可以为该用户指定相应的shell。当然你可以建立更多的字段,例如:用来记录用户登录次数的count,或者是日期的date,如果你对配置熟悉了之后,你可以根据自己的喜欢添加更多的功能。
另外,若需要对组成员管理之类的功能则需要添加GRPS表:
create table GRPS (
grpname TEXT NOT NULL,
gid SMALLINT NOT NULL,
members TEXT NOT NULL
);
其中grpname是组的名称,gid是系统组的ID,members是组的成员。注意:多成员,他们之间要用逗号隔开,不能使用空格。
2)增加用户,在数据库USERS表和GRPS表中插入数据:
INSERT INTO USERS (userid, passwd, uid, gid, home, shell) values ('allen', '123456', '5501', '5500', '/home/ftp/allen', "/usr/local/test.sh"); INSERT INTO USERS (userid, passwd, uid, gid, home, shell) values ('kitty', '222222', '5502', '5500', '/home/ftp/kitty', "/usr/local/test2.sh");
INSERT INTO GRPS (grpname,gid,members) values ('ftpgrp','5500','allen,kitty');
flush privileges;   //刷新数据库

四、        配置自启动服务
从编译安装路径中拷贝proftpd.init.d文件到/etc/rc.d/init.d/中,并重命名为proftpd,授予可执行权限后,通过chkconfig --add命令将其加为自启动服务即可,具体操作如下:  
cp /usr/local/proftpd-1.3.2/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/
cd /etc/rc.d/init.d
mv proftpd.init.d proftpd
chmod +x proftpd
#加入为服务
chkconfig --add proftpd
chkconfig --level 3 proftpd on
#这样,就可以分别通过以下方式来完成启动、停止、重启Proftpd的工作了
service profptd start
service proftpd stop
service proftpd restart
常用指令:
pgrep proftpd 注:查看服务器是不是启动起来了;如果没有进程,说明失败;
pkill proftpd 注:杀死proftpd的进程;也就是关掉服务器;
查看proftpd日志:tail -f /var/log/proftpd.syslog
查看proftpd传输文件日志:tail -f /var/log/proftpd.transferlog

五、        配置磁盘限额
-------------其他磁盘配额的限制---------------
还是修改proftp.conf文件
在用户认证后面增加:
QuotaDirectoryTally on
QuotaDisplayUnits "Mb"
QuotaEngine on
QuotaLog "/var/log/proftp/prfto_quato.log"
QuotaShowQuotas on
SQLNamedQuery get-quota-limit SELECT "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 FROM quotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
保存退出
建立数据表
CREATE TABLE quotalimits (
name VARCHAR(30),
quota_type ENUM("user", "group", "class", "all") NOT NULL,
per_session ENUM("false", "true") NOT NULL,
limit_type ENUM("soft", "hard") NOT NULL,
bytes_in_avail FLOAT NOT NULL,
bytes_out_avail FLOAT NOT NULL,
bytes_xfer_avail FLOAT NOT NULL,
files_in_avail INT UNSIGNED NOT NULL,
files_out_avail INT UNSIGNED NOT NULL,
files_xfer_avail INT UNSIGNED NOT NULL
);
CREATE TABLE quotatallies (
name VARCHAR(30) NOT NULL,
quota_type ENUM("user", "group", "class", "all") NOT NULL,
bytes_in_used FLOAT NOT NULL,
bytes_out_used FLOAT NOT NULL,
bytes_xfer_used FLOAT NOT NULL,
files_in_used INT UNSIGNED NOT NULL,
files_out_used INT UNSIGNED NOT NULL,
files_xfer_used INT UNSIGNED NOT NULL
);
insert into quotalimits (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 ('myname','user','true','hard','10485760','10485760','10485760','5','5','5');
以上是测试10M空间,文件数不超过5个(文件数似乎意义不大,因为一次传的文件多于5个时就会提示空间不够,建议设置大一些)


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 优化版Windows 10 LTSC 21H2企业版:适用于低内存设备
    此版本为经过优化的Windows 10 LTSC 21H2企业版,特别适合低内存配置的计算机。它基于官方版本进行了精简和性能优化,确保在资源有限的情况下依然能够稳定运行。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
author-avatar
fade2010_480
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有