vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

论 vsftpd 限制用户目录空间大小

18:25 , vkill
刚和群里的 lxmxn quay776 讨论了下vsftpd 中怎么限制用户目录空间大小的问题
问题起源于 虚拟主机提供商 他们是怎么限制用户 虚拟空间 大小的

讨论的结果大致有下面方法:

1、磁盘配额:如果你想使用系统用户,那么这个方法是最好的,如果你使用mysql中的虚拟用户,那么另寻它径吧,还有这个方法的不好是将来用户多了管理是个很头疼的问题
2、换其他ftpd:proftpd 它自身就提供了这功能,但配置麻烦;pure-ftpd 配置简单,我喜欢。但是这两个都存在一个问题,你ftp限制了,那我web上传哪?总可以吧
3、使用loop设备:原理就是你可以用dd命令创建一个你需要限制的最大字节数的文件,然后用该文件创建loop设备,然后将该设备挂接到你需要限制的目录就行了

$ dd if=/dev/zero of=/mnt/point1/file.img bs=1k count=1000
$ losetup /dev/loop1 /mnt/point1/file.img
$ mke2fs -c /dev/loop1 1000
$ mkdir /mnt/point2
$ mount -t ext2 /dev/loop1 /mnt/point2

详细参见此文10楼:http://topic.csdn.net/u/20080320/08/75552a46-0da0-48c5-9167-7f211c88db07.html
此方法的唯一不好就是如果你想升级用户虚拟空间的大小,得 新建一个,转移数据
4、脚本定时检查:写个计划任务,每1个小时,就去查目录大小,如超过限制,直接把 mysql 中的 status 列给重置,这个方法的不好就是不能实时的阻止用户非法占用空间
5、pam:修改下pam_mysql 源码,加入一个字段,用来存储空间大小的值,再在认证用户前先检查他目录是否超过使用限制,不过这个的可行性不高,只能算是一种方法。

另:好像还可以试试 pam_exec,这个我没研究过,我这几天花些时间研究下 pam_exec,成不成再来说
2010.5.14 pam_exec查了资料也试了,能把像用户名和密码这些记录到本地文件,好像就只是用来执行一下外部shell,不会理你 shell 逻辑的,所以这个方法也pass

后记:
以上方法只是我们几个讨论的结果,难免会出错,如果你觉得有更好的方法,欢迎交流
当然,实际使用中可以依个人情况选择使用哪种
Last modified by vkill on2010/05/14 22:24
类别:linux system | Tags: , , , , , , | 1 条评论, 1811 次阅读
网友评论(1):
shadowmin
2010/05/20 14:54
使用 Linux 2.6 内核的 inotify 监控 Linux 文件系统事件,被监听目录下如果有文件发生修改, 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件,并且支持多线程同步,因此效率非常高。
根据内核的inotify 特性,应该很容实现,空间限制。
vkill replied on 2010/05/20 16:39
我觉得原理上有个难题,捕获到用户空间大小超出限制后怎么断开用户的ftp连接哪?
Pages: 1/1 First page 1 Final page
发表评论:

Nickname: 
Email:
Site URI: