PureFTPd+Mysql+PHP_Manager实现虚拟用户磁盘限额

linux服务器搭建 专栏收录该内容
41 篇文章 0 订阅
前几天为了让公司内的FTP,决定在centos5下装支持虚拟用户带磁盘限额的FTP软件。
在安装PureFTPd以前,要做好以下准备工作:
二、 安装PureFTPd
1.下面我们开始安装PureFTPd,同样以FreeBSD的Ports方式安装。
#tar zxfv pure-ftpd-1.0.21.tar.gz -C /usr/local/
#cd /usr/local/pure-ftpd-1.0.21/
#./configure \
--prefix=/usr/local/pureftpd \
--with-mysql \
--with-puredb \
--with-paranoidmsg \
--with-peruserlimits \
--with-shadow \
--with-welcomemsg \
--with-uploadscript \
--with-quotas \
--with-cookie \
--with-pam \
--with-virtualhosts \
--with-virtualroot \
--with-virtualchroot \
--with-diraliases \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling \
--with-largefile \
--with-language=simplified-chinese \
--with-altlog \
--with-iplogging \
--without-usernames
#make
# make check
# make install  
下面配置pureftpd:
# mkdir –pv /usr/local/pureftpd/etc
#cp pureftpd-mysql.conf /usr/local/pureftpd/etc
# cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/ (生成配置文档)
# cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/
# chmod 755 /usr/local/pureftpd/sbin/pure-config.pl
# cd contrib
编辑 redhat.init 文档。找到语句
找到语句: "pureftpwho=/usr/local/sbin/pure-ftpwho",
将其改为: "pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho"
找到语句: ”$fullpath /usr/local/etc/pure-ftpd.conf –daemonize”
将其改为: ”$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize”
执行以下命令将文档 redhat.init 复制到 /etc 目录中重命名为 pure-ftpd,并将其配置为可执行。
# cp redhat.init /etc/rc.d/init.d/pureftpd
# chmod  u+x /etc/rc.d/init.d/pureftpd
# /sbin/chkconfig --add pureftpd  ( 将 pure-ftpd 服务添加到系统中 )
# /sbin/chkconfig –level 2345 pureftpd on
#serv        ice pureftpd start
解释:
注明:)
在README中[ADVANCED COMPILATION]的段落中,有对上面的使用的
      周详说明.在这里对常用的做简略的解释.
      --without-standalone 不能以standalone的方式执行ftpd.
      --without-inetd           不能以inetd的方式执行ftpd.
      --without-iplogging           做log時不将IP 地址给log下來.
      --without-shadow           不做shadow.除非是用PAM, LDAP or SQL.不然极不建议拿掉.
      --without-usernames           文档列表只会列出UID & GID,不列出实际user or group name.
      --without-humor           嘿嘿嘿....
      --without-ascii           不支持7-bits transfers(ASCII).
      --with-paranoidmsg           唔....不知该怎么说.算是能够给特定人的信息吧.
      --with-sysquotas           吃系统的quota设定.
      --with-minimal           最小化安裝.
      --with-pam
      --with-puredb
      --with-ldap
      --with-mysql
      --with-pgsql           以上五种都是存储资料的格式?.看您比较习惯什么.
      --with-altlog           留log了....
      --with-cookie           使用者进站看到的东东.类似进站画面.
      --with-ratios           上下传比.
      --with-throttling           频宽可设限.
      --with-ftpwho           可用pure-ftpwho來看线上使用者.像是Serv-u的线上状态.
      --with-uploadscript   当一个文档被完整上传完后自动呼叫某一script去对这个文档处理.当然.这个script得您自己写.
      --with-largefile           支持下载超过2G的文档.
      --with-virtualhosts           跟http的virtualhost有异曲同工之妙.
      --with-virtualchroot           配合上面的chroot.
      --with-diraliases           跟Serv-U上面的link功能相同.
      --with-nonroot           不需root权限.一般user即可启动ftpd.
      --with-quotas           使用quota.(非系统下的quota)
      --with-peruserlimits         每个账号最多可登入几次:Anonymous最多可同時登入几次
      --with-everything          任何功能全上.
      --with-language=simplified-chinese           显示出来的信息的语言.缺省为英语.
安装完后,就会在/usr/local目录下生成一个pureftpd目录,我们要使用的文档都在这个目录中。
2.下面我们开始配置pure-ftpd.conf文档
在这里我全使用默认值,修改下面内容以支持MYSQL。(注:Pureftpd能够同时支持ldap,mysql,pgsql,puredb认证)
# MySQL configuration file (see README.MySQL)
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
修改不然无法执行 #service pureftpd stop)
# If your pure-ftpd has been compiled with standalone support, you can change
# the location of the pid file. The default is /var/run/pure-ftpd.pid
#PIDFile                     /var/run/pure-ftpd.pid
#去掉上面的注释
PIDFile                     /var/run/pure-ftpd.pid
修改不允许名登陆
NoAnonymous                 yes
# Allow FXP transfers for authenticated users.
AllowUserFXP                yes
# Allow users to resume and upload files, but *NOT* to delete them.
KeepAllFiles                yes
# Automatically create home directories if they are missing
CreateHomeDir               yes
3.配置文档详解(摘自网上陈景峰所著《Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To》)
ChrootEveryone yes
chroot每一个用户,等同于Proftpd 中的DefaultRoot~ , 能够限制用户在某个地方活动,增强服务器的安全性。使用过wu-ftpd的使用都应该知道cd /会发生什么!
TrustedGID 50
#以上两者要一起用
BrokenClientsCompatibility no
MaxClientsNumber 50
#最大链接数
Daemonize yes
#Fork in background 以守护进程方式在后台运行
MaxClientsPerIP 5
#每个ip最多链接数,最好设小点。
VerboseLog no
#是否要把任何client端的指令都log下来
DisplayDotFiles no
#显示开头的文档
AnonymousOnly no
#是否只让匿名登录
NoAnonymous no
#不开放匿名登入
SyslogFacility ftp
#应该是对日志做一下过滤 (auth, authpriv, daemon, ftp, security, user, local*)能够让日志只记录想要的信息
DontResolve yes
#不反向解释客户端的ip
MaxIdleTime 5
#最大闲置時間
#LDAPConfigFile /usr/local/pureftpd/etc/pureftpd-ldap.conf
#使用LDAP认证,
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
#使用MySQL认证
#PGSQLConfigFile /usr/local/pureftpd/etc/pureftpd-pgsql.conf
#使用PGSQL认证
#PureDB /ftp/etc/pureftpd.pdb
#使用者资料的DB存放地点 [由于我是用PureFTPD的內建DB.固有此选项]
#ExtAuth /var/run/ftpd.sock
#pure-authd socket 路径 (周详请看 README.Authentication-Modules)
#PAMAuthentication yes
#开启PAM认证
#UnixAuthentication yes
#假如您想要有简单的Unix(/etc/passwd)的认证的話
FortunesFile /usr/local/pureftpd/etc/.welcome
#显示的欢迎信息文档,您能够创建该文档,输入一些文字,然后您重启您的FTP服务,就会有意外的发现。
LimitRecursion 2000 8
#ls最多列出3000个文档.最深8层
AnonymousCanCreateDirs no
#匿名用户能够创建目录
MaxLoad 4
#当system load超过4時.使用者将不能再下载
PassivePortRange 30000 50000
#被动连接应答范围
ForcePassiveIP 192.168.0.1
#不会译:(
AnonymousRatio 1 10
#Anonymous连接上传/下载比率
UserRatio 1 10
#用户上传/下载比率(注:假如使用ldap,mysql,pgsql,pam不要启用该功能,否则您在ldap等中配置的Ratio无校)
AntiWarez no
#上传的文档不能被下载(owner is ftp).等到local admin确认
Bind 127.0.0.1,8021
#要绑定和ip/port,在您的系统中有两个FTP Server这样您其中一个FTP就要使用其他端口。
#格式-> 127.0.0.1,21 假如只写port表All ip,port
AnonymousBandwidth 8
#Anonymous 带宽,单位KB/s
UserBandwidth 8
#用户带宽,单位KB/s
Umask 133:022
#上传文档的Umask.(: )
MinUID 1000
# UID至少多少才能登录
AllowUserFXP yes
#支不支持FXP
AllowAnonymousFXP no
#Anonymous支不支持FXP
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
#(”.”)开头的文档能不能被读/写,UNIX Like下以点开头的文档是隐藏文档ls –a才能列出
#Pureftpd Quota模式下做产生” .ftpquota”文档。
AutoRename no
#上传文档若有相同文档名自动改名(file.1,file.2...)
AnonymousCantUpload no
#匿名用户上传文档
#TrustedIP 10.1.1.1
#锁IP.
LogPID
#Log文档添加PID
AltLog stats:/ftp/etc/log/pureftpd.log
#log存放地点,注日志有几种常用的格式
#clf 类似apache格式,stats UNIX log格式,w3c 标准W3C格式,可能是HTML格式
NoChmod yes
#不给Chmod指令的权限
KeepAllFiles no
#使用者可续传.但不可刪除文档
CreateHomeDir yes
#假如user的home不存在自动建立(我把这个设为YES)
Quota 1000:10
#Quota :,FTP限制10M空间,能够上传1000个文档(注:假如使用ldap,mysql,pgsql,pam不要启用该功能,否则您在ldap等中配置的Quota无校)
PIDFile /ftp/etc/log/pure-ftpd.pid
#记录pure-ftpd的PID文档
CallUploadScript yes      
#呼叫UploadScript
MaxDiskUsage 99
#当硬盘使用率到多少時将停止上传
NoRename yes
#用户不能重命名文档名
CustomerProof yes
PerUserLimits 3:20
#
4. 创建Mysql数据库中的FTP虚拟用户管理数据库ftpusers
将以下内容存为script.mysql文档
INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update
_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Proces
s_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES
('127.0.0.1','ftp',PASSWORD('123456'),'Y','Y','Y','Y','N','N','N','N','N','N
','N','N','N','N');
FLUSH PRIVILEGES;
CREATE DATABASE ftpusers;
USE ftpusers;
CREATE TABLE admin (
Username varchar(35) NOT NULL default '',
Password char(32) binary NOT NULL default '',
PRIMARY KEY (Username)
) TYPE=MyISAM;
INSERT INTO admin VALUES ('Administrator',MD5('123456'));
CREATE TABLE users (
User char(16) NOT NULL default '',
Password char(32) binary NOT NULL default '',
Uid int(11) NOT NULL default '2000',
Gid int(11) NOT NULL default '2000',
Dir char(12 NOT NULL default '',
QuotaFiles int(10) NOT NULL default '500',
QuotaSize int(10) NOT NULL default '30',
ULBandwidth int(10) NOT NULL default '80',
DLBandwidth int(10) NOT NULL default '80',
status enum('0','1') NOT NULL default '1',
ipaccess varchar(15) NOT NULL default '*',
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;
INSERT INTO `users` VALUES ('kevin',MD5('123456'),1001,2000,'/home/kevin',500,30,
80,5);
先在Mysql数据库建立一个对数据库有操作权限的用户ftp,密码为123456。
再创建新数据库ftpusers,并新建两个表admin和users,往admin表中加入管理用户帐号,往users表中加入新的FTP用户kevin,密码为123456。
然后我们运行以下命令来生成数据库ftpusers。
# mysql -u root -ppassword 
恭喜您,您的FTP服务已正常工作了。
三、 使用PHP_Manager进行用户管理
下载最新的PHP_Manager软件
http://
# tar zxvf ftp_v2.5.tar.gz
# mv ftp_v2.5 /var/www/pureftpadmin
# cd  /var/www/pureftpadmin
# vim config.php
修改config.php配置文档
$LANG = “chinese”; //您的PHP_Manager所用的语言
$DBHost = “localhost”; //您的Mysql服务器的Host
$DBLogin = “ftp”; //登录数据库的用户
$DBPassword = “123456”; //登录数据库的用户密码
$DBDatabase = “ftpusers”; //实现虚拟用户管理的数据库的名字
$FTPAddress = “192.168.8.18:21”; //您的FTP服务的IP地址和端口号
#chown –R root.root /var/www/pureftpadmin
然后使用网页方式登录管理。
配置apache2:
#vim /etc/httpd/conf.d/pureftpdadmin.conf
内容为:
Alias /ftpadmin /var/www/pureftpd_manager
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    #Allow from ::1
    Allow from 192.168.8.0/24
    Allow from 192.168.9.0/24
# service httpd reload
http://IP/ftpadmin
管理员是administrator,密码是123456,这在前面建数据库的时候能够修改的。进入之后全是中文(繁体)。
有关其他系统下的安装方法,能够参照陈景峰所著《Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To》
http://home.9812.net/linux/article/pureftpd/pureftpd_II.htm
补:
============================= pure-ftpd 的简单改进 =============================
   pure-ftpd 是个很不错的 ftp server,但是在用IE直接进入FTP目录的时候,假如系统没有提供匿名登录,IE不会弹出登录界面,而是弹出不提供匿名登录的警告对话框,在这种情况下,如何让IE能够直接弹出登录对话框呢?通过分析IE和pure-ftpd对话过程,发现原来简单更改就能够实现。找到 src/ftpd.c 文档, 修改如下:
if (broken_client_compat != 0) {
   addreply(331, MSG_USER_OK, username);
   return;
} else {
//    die(530, LOG_DEBUG, MSG_NO_ANONYMOUS_LOGIN);   // 注释掉该行
  addreply(331, MSG_USER_OK, account);           // 修改为这行
}
发现一个PureFTPd的缺点,就是使用了磁盘限额后,虽然已起作用了,但是会有以下情况发生。
在连接后只能看到限的文档数,无法正常显示用了多少磁盘空间。
解决方法:
修改源代码
/src/quotas.c
在第71行有一条语句为:
*bufpnt=0;这一条语句会将用户根目录下的.ftpquota文档中得到的第二个使用空间数清为0,将该语句注释掉,不影响使用。
在第73行有一条语句为:
old_quota.size = quota->size = strtoull(bufpnt + 1, NULL, 10);
读出并传给quota->size的值有错误,不应该是bufpnt+1,而应该是buf+1,或是bufpnt,修改好后,重新编译安装即可。
当然在网页上传时还是看不到,但是用命令行或是FTP工具能够正常看到显示磁盘配额信息。
为了对访问
http://ip/ftpadmin
限制,我们做如下修改:
前提条件是我们安装了:
#rpm –ivh auth_mysql…..
在mysql中运行:
    CREATE DATABASE auth;
    USE auth;
    CREATE TABLE users (
      user_name CHAR(30) NOT NULL,
      user_passwd CHAR(20) NOT NULL,
      PRIMARY KEY (user_name)
    );
    CREATE TABLE groups (
      user_name CHAR(30) NOT NULL,
      user_group CHAR(20) NOT NULL,
      PRIMARY KEY (user_name, user_group)
    );
    GRANT SELECT
      ON auth.users
      TO 
[email=authuser@localhost]authuser@localhost[/email]
      IDENTIFIED BY 'PaSsW0Rd';
    GRANT SELECT
      ON auth.groups
      TO 
[email=authuser@localhost]authuser@localhost[/email]
      IDENTIFIED BY 'PaSsW0Rd';
    INSERT INTO users VALUES ('testuser',  ENCRYPT('testpass'));
    INSERT INTO groups VALUES ('testuser', 'user');
    INSERT INTO users VALUES ('testadmin', ENCRYPT('testpass'));
    INSERT INTO groups VALUES ('testadmin', 'admin');
    INSERT INTO groups VALUES ('testadmin', 'user');
#vi /etc/httpd/conf.d/pureftpdadmin.conf
内容变为:
pureftpdadminAlias /ftpadmin /var/www/pureftpd_manager
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    Allow from 192.168.8.0/24
Allow from 192.168.9.0/24
#加入对mysql的认证
AuthName "MySQL group authenticated zone"
    AuthType Basic
    AuthMYSQLEnable on
    AuthMySQLUser authuser
    AuthMySQLPassword PaSsW0Rd
    AuthMySQLDB auth
    AuthMySQLUserTable users
    AuthMySQLNameField user_name
    AuthMySQLPasswordField user_passwd
    AuthMySQLGroupTable groups
    AuthMySQLGroupField user_group
#
    require group user
我们再次输入
http://ip/ftpadmin
时就会弹出对话框,输入用户和密码后才可登入。



文件:
pureftpd_php_manager.zip
大小:
17KB
下载:
下载



本文来自ChinaUnix博客,如果查看原文请点: http://blog.chinaunix.net/u/249/showart_1680311.html
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

flyear_cn

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值