刚和群里的 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
问题起源于 虚拟主机提供商 他们是怎么限制用户 虚拟空间 大小的
讨论的结果大致有下面方法:
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



根据内核的inotify 特性,应该很容实现,空间限制。