热门标签 | 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个时就会提示空间不够,建议设置大一些)


推荐阅读
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社区 版权所有