4

使用Pure-ftpd和Pure-ftpd-mysql进行FTP权限和磁盘配额管理

 2 years ago
source link: https://blogread.cn/it/article/1190?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用Pure-ftpd和Pure-ftpd-mysql进行FTP权限和磁盘配额管理

浏览:2480次  出处信息

在上一篇文章里边,我们已经完成了利用mod-myvhost动态的添加web用户.这里我们接着来完成文件上传的管理.

我们选用Pure-ftpd作为工具.

Pure-ftpd是一个成熟的ftp工具,apt-get已经有打好的包了.我们直接通过apt-get就能很方便的安装.

apt-get install pure-ftpd-mysql

在数据库里边建一个库,这里用之前的hosting数据库.用以下语句创建一张表:

CREATE TABLE users(
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

这张表将用来存放ftp用户的相关信息.

然后我们需要修改pure-ftpd-mysql的配置文件,告诉pure-ftpd数据库的相关信息.
这里假设大家已经配置好了mysql,并有一个可用的账号.

vim /etc/pure-ftpd/db/mysql.conf

放入以下配置

#账号信息 按自己情况修改
MYSQLServer 127.0.0.1
MYSQLPort 3306
MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser easy
MYSQLPassword ******
MYSQLDatabase hosting

#加密方式
MYSQLCrypt md5

#取得数据的SQL语句

#用户授权
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"

#文件大小和个数限制
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"

#上行和下行带宽限制
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"

这样pure-ftpd就知道如何从mysql里边取数据了.
为了得到上边出现的GID和UID,我们需要为ftp创建一个虚拟账号.FTP的全部用户共用这一个虚拟账号的UID和GID,而不需要为每个FTP用户创建系统用户.


groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

我们创建了GID为2001的ftpgroup组和UID为2001的ftpuser用户.现在可以往数据表中添加数据了.QuotaSize的单位是M,目录指向我们在mod-myvhost同样的路径.

然后我们将用户锁定在他自己的目录下,不允许他通过ftp访问到别人的目录:


echo yes > /etc/pure-ftpd/conf/ChrootEveryone

当指定目录不存在时,自动创建目录

echo yes > /etc/pure-ftpd/conf/CreateHomeDir

设置完成.重启pure-ftpd.

/etc/init.d/pure-ftpd-mysql restart

全部配置都完成了.我们上传文件试试.
登陆成功,上传文件提示没权限.这是因为/data0/myapphost的属性设定造成的.将整个目录改为ftpuser的就可以了


chown -R ftpuser:ftpgroup /data0/myapphost

修改属性后,已经可以上传文件了.试试配额限制:


错误:> [2010-1-27 22:47:12] 无法写入数据 socket。Socket 错误 = #10054。
[2010-1-27 22:47:12] 550-Quota exceeded: abc.zip won't be saved
550-6 files used (120%) - authorized: 5 files
550 6974 Kbytes used (681%) - authorized: 1024 Kb
错误:> [2010-1-27 22:47:12] 请求的操作未执行(如,文件或目录未找到,不能访问)。

错误:> [2010-1-27 22:47:43] 无法写入数据 socket。Socket 错误 = #10054。
[2010-1-27 22:47:43] 550-Quota exceeded: abc.zip won't be saved
550-4 files used (80%) - authorized: 5 files
550 3954 Kbytes used (386%) - authorized: 1024 Kb
错误:> [2010-1-27 22:47:43] 请求的操作未执行(如,文件或目录未找到,不能访问)。

从错误信息可以看出,配额已经生效了.当配置修改后,已经登录的ftp用户需要重新登陆后才会生效.

到这里为止,我们已经完成了一个单服务器的应用管理平台的基本功能.再添加一个用于申请应用和开通账号的web管理前端,整个平台即可投入使用了.

下次我们将讨论,对于作为这个平台上的服务的Mysql,如何进行配额的限制.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK