系统级磁盘限额方案

网络上介绍的FTP空间限额方案,一般采用proftpd-mod-quotatab+mysql来实现,其实并不能限制目前主流的FTP空间增长方式,通过PHP来上传文件可以轻松绕过这个限制。与这种方式配套的方案一般来说会把所有虚拟主机用户虚拟成一个UNIX系统用户,实际上使得PHP的safe_mode形同虚设,对安全性也有一定影响。 比较纯粹的系统级方案是使用UNIX系统帐号来作为FTP帐号,然后搭配Suexec特性,使PHP真正可以做到UID检测,同时web服务器生成的文件也是真正的用户属主,彻底避免权限问题。 这个方案在UNIX环境实现时候需要启动Disk Quota特性,之前的日志FreeBSD内核维护日志[三] 增加QUOTA支持已经有过实践,增加了Quota特性后,使用edquota来给每个用户设定限额。 然后增加一个脚本来实现客户端的quota值汇报,这个跟我的方案有关,假设每个用户的FTP根目录位于/var/www/$username,那么脚本可以是这样。
  1. #!/bin/sh
  2. IF=/tmp/quotas
  3. CDir=/var/www/user
  4. /bin/date > $IF && /usr/sbin/repquota -au >> $IF
  5. for i in $(ls $CDir); do
  6.   DDir=$CDir/$i/ftp/welcome.msg
  7.   cat $IF | awk /$i/'{printf "FTP \xca\xb9\xd3\xc3\xc7\xe9\xbf\xf6: %s \xca\xb9\xd3\xc3\xc1\xcb %d MB \xd7\xdc\xb9\xb2 %d MB \xca\xb9\xd3\xc3\xc1\xcb %d%%\n", $1,$3/1024,$5/1024,100*$3/$5}' > $DDir
  8. done
然后在proftpd.conf中启用DisplayLogin welcome.msg就可以看到登陆FTP时候的提示语。
  1. FTP 使用情况: leo.leoneo.com 使用了 8 MB 总共 200 MB 使用了 4%