{"id":116,"date":"2004-08-16T07:38:00","date_gmt":"2004-08-15T23:38:00","guid":{"rendered":"http:\/\/blog.zhouhonghe.com\/?p=116"},"modified":"2004-08-16T07:38:00","modified_gmt":"2004-08-15T23:38:00","slug":"proftpd%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/blog.zhouhonghe.com\/?p=116","title":{"rendered":"proftpd\u5b66\u4e60\u7b14\u8bb0"},"content":{"rendered":"<p>\uff08\u4e00\uff09<br \/>\u8fd9\u51e0\u5929\uff0c\u516c\u53f8\u7ec8\u4e8e\u653e\u5047\u4e86\uff0c\u7ec8\u4e8e\u53ef\u4ee5\u5b89\u4e0b\u5fc3\u6765\u597d\u597d\u5b66\u4e9bproftp+mysql+quota\u3002<\/p>\n<p>\u5b89\u88c5proftp\u4e4b\u524d\uff0c\u5fc5\u987b\u5148\u505a\u4e00\u4e2a\u5de5\u4f5c\uff0c\u5047\u5982\u4f60\u7684mysql\u662f\u81ea\u5df1\u7f16\u8bd1\u7684\uff0c\u90a3\u5c31\u5fc5\u987b\u5148\u4fee\u6539\/etc\/ld.so.conf\uff0c\u5426\u5219\u540e\u9762\u8fd0\u884cproftp\u4f1a\u62a5\u9519\u3002<br \/>vi \/etc\/ld.so.conf<\/p>\n<p>\u6dfb\u52a0\u4e0b\u9762\u4e00\u884c:<\/p>\n<p>\/usr\/local\/mysql\/lib\/mysql<\/p>\n<p>\u6ce8\u610f\u5927\u5bb6\u5982\u679cmysql\u7684\u5b89\u88c5\u8def\u5f84\u4e8e\u6211\u4e0d\u4e00\u6837\uff0c\u5219\u586b\u5199\u76f8\u5e94\u7684\u8def\u5f84\uff0c\u6709\u5173mysql\u7684\u7f16\u8bd1\u5b89\u88c5\u8bf7\u53c2\u8003\u300aLinux+Apache+Mysql+PHP\u5178\u578b\u914d\u7f6e\u300b\u3002 <\/p>\n<p>1\u3002\u4e0b\u8f7d\u76f8\u5173\u8f6f\u4ef6<\/p>\n<p>wget <a href=\"ftp:\/\/ftp.proftpd.org\/distrib\/source\/proftpd-1.2.9.tar.gz\">ftp:\/\/ftp.proftpd.org\/distrib\/source\/proftpd-1.2.9.tar.gz<\/a><br \/>\u4e0b\u8f7dproftp\u7684\u6700\u65b0\u7248\u672c1.2.9 <\/p>\n<p>wget <a href=\"http:\/\/www.castaglia.org\/proftpd\/modules\/proftpd-mod-quotatab-1.2.11.tar.gz\">http:\/\/www.castaglia.org\/proftpd\/modules\/proftpd-mod-quotatab-1.2.11.tar.gz<\/a><br \/>\u8fd9\u662f\u914d\u5408proftp\u7684\u78c1\u76d8\u9650\u989d\u7684\u6a21\u5757 <\/p>\n<p>2\u3002\u89e3\u538b\u7f16\u8bd1<\/p>\n<p>tar zvxf proftpd-1.2.9.tar.gz<br \/>tar zvxf proftpd-mod-quotatab-1.2.11.tar.gz<br \/>cp mod_quotatab\/*.c proftpd-1.2.9\/contrib\/<br \/>cp mod_quotatab\/*.h proftpd-1.2.9\/contrib\/<br \/>vi proftpd-1.2.9\/contrib\/mod_sql_mysql.c<\/p>\n<p>\u627e\u5230#include \u8fd9\u4e00\u884c\uff0c\u5c06mysql.h\u6539\u6210\u4f60\u7684\u7cfb\u7edf\u4e2d\u6b64\u6587\u4ef6\u6240\u5728\u7684\u8def\u5f84\uff0c\u5982\/usr\/local\/mysql\/include\/mysql\/mysql.h <\/p>\n<p>\u7f16\u8bd1\uff1a<\/p>\n<p>.\/configure \\<br \/>--prefix=\/usr\/local\/proftpd \\<br \/>--with-modules=mod_sql:mod_sql_mysql:mod_quotatab\\<br \/>:mod_quotatab_sql:mod_ratio \\<br \/>--with-includes=\/usr\/local\/mysql\/include\/mysql \\<br \/>--with-libraries=\/usr\/local\/mysql\/lib\/mysql<br \/>make <br \/>make install<\/p>\n<p>\u8fd9\u91cc\u6211\u4eec\u7f16\u8bd1\u7684\u65f6\u5019\u5df2\u7ecf\u52a0\u8fdb\u4e86mysql,quota,ratio\u7b49\u6a21\u5757\u7684\u652f\u6301\uff0c\u6211\u4f1a\u5728\u540e\u9762\u8bb2\u4ed6\u4eec\u7684\u5e94\u7528<\/p>\n<p>ok, \u73b0\u5728\u6211\u4eec\u53ef\u4ee5\u6765\u542f\u52a8proftp\u4e86\uff0c\u53ea\u8981<\/p>\n<p>\/usr\/local\/proftpd\/sbin\/proftpd<br \/>\u7528\u4f60\u7684ftp\u5ba2\u6237\u7aef\u8bd5\u9a8c\u4ee5\u4e0b\uff0c\u5e94\u8be5\u53ef\u4ee5\u6b63\u5e38\u767b\u9646\uff0c\u5305\u62ec\u533f\u540d\u548clinux\u7528\u6237\u540d\u53ef\u4ee5\u3002<\/p>\n<p>\u5176\u5b9e\u9ed8\u8ba4\u7684proftp\u6ee1\u8db3\u65e5\u5e38\u7684\u670d\u52a1\u5668\u7ba1\u7406\u7528\u8fd8\u662f\u7ef0\u7ef0\u6709\u4f59\u7684\uff0c\u6709\u4e2a\u5730\u65b9\u8fd8\u662f\u8981\u4fee\u6539\u4e00\u4e0b\uff0c\u5c31\u662f\u9ed8\u8ba4proftp\u7684\u914d\u7f6e\u6587\u4ef6\u4e0d\u652f\u6301ftp\u7eed\u4f20\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u8981<\/p>\n<p>vi \/usr\/local\/proftpd\/etc\/proftpd.conf<br \/>\u6dfb\u52a0\u4ee5\u4e0b\u4e24\u884c<\/p>\n<p>AllowRetrieveRestart on<br \/>AllowStoreRestart on<br \/>\u91cd\u65b0\u542f\u52a8\u4ee5\u4e0bproftp\uff0c\u5c31\u53ef\u4ee5\u6b63\u5e38\u7eed\u4f20\u6587\u4ef6\u4e86\u3002<\/p>\n<p>\u521b\u5efaproftpd\u811a\u672c<\/p>\n<p>\u53ea\u8981\u5728proftp\u7684\u6e90\u4ee3\u7801\u76ee\u5f55<\/p>\n<p>cp proftpd-1.2.9\/contrib\/dist\/rpm\/proftpd.init.d \/etc\/rc.d\/init.d\/proftpd<\/p>\n<p>\u8bb0\u5f97\u4fee\u6539proftpd\u6587\u4ef6\uff0c\u4e00\u822c\u8981\u4fee\u6539proftpd\u7684\u5b9e\u9645\u8def\u5f84<\/p>\n<p>chmod 755 \/etc\/rc.d\/init.d\/proftpd<br \/>ok<\/p>\n<p>\u4ee5\u540e\u5c31\u53ef\u4ee5\u7528\u8fd9\u4e2a\u6559\u672c\u6765\u542f\u52a8\uff0c\u505c\u6b62\uff0c\u91cd\u542fproftp<\/p>\n<p>\u5475\u5475\uff0c\u4eca\u5929\u5c31\u8bb2\u8fd9\u4e9b\uff0c\u660e\u5929\u8bb2\u4e9bproftp\u7684\u4e00\u4e9b\u57fa\u7840\u914d\u7f6e\uff1a\uff09<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\uff08\u4e8c\uff09<\/p>\n<p>\u4e0a\u6b21\u6211\u4eec\u8bb2\u4e86proftp\u7684\u57fa\u672c\u5b89\u88c5\uff0c\u7531\u4e8e\u6211\u4eec\u540e\u9762\u6709\u5173\u4e8emysql\u548cquota\u7684\u8bbe\u7f6e\uff0c\u6240\u4ee5\u7f16\u8bd1\u7684\u65f6\u5019\u628a\u76f8\u5e94\u7684\u6a21\u5757\u90fd\u7f16\u8bd1\u8fdb\u53bb\u4e86\uff0c\u5982\u679c\u4f60\u4e0d\u9700\u8981mysql\u548c\u78c1\u76d8\u9650\u989d\u7684\u529f\u80fd\uff0c\u5b8c\u5168\u53ef\u4ee5\u4e0d\u9700\u8981\u8fd9\u4e48\u7f16\u8bd1\u3002<\/p>\n<p>\u8fd9\u91cc\u8981\u8bb2\u4e00\u4e2a\u975e\u5e38\u5b9e\u7528\u7684\u547d\u4ee4\uff0c<\/p>\n<p>\/usr\/local\/proftpd\/sbin\/ftpshut<br \/>\u8fd9\u4e2a\u547d\u4ee4\u8fd8\u662f\u6bd4\u8f83\u5b9e\u7528\u7684\uff0c\u56e0\u4e3a\u4f60\u53ef\u80fd\u9700\u8981\u4e0d\u65ad\u7684\u8c03\u6574\u4f60\u7684\u670d\u52a1\u5668\uff0c\u800c\u8fd9\u4e2a\u547d\u4ee4\u5c31\u975e\u5e38\u7075\u6d3b\uff0c\u53ef\u4ee5\u5728\u4e0d\u505c\u6b62proftpd\u8fdb\u7a0b\u7684\u524d\u63d0\u4e0b\uff0c\u5b9a\u65f6\u505c\u6b62ftp\u8fde\u63a5\uff0c\u8fd9\u91cc\u5c06\u4f1a\u8be6\u7ec6\u8bf4\u5b83\u662f\u600e\u4e48\u4f7f\u7528\u7684\u3002<\/p>\n<p>ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]<\/p>\n<p>-l min: \u5728ftp\u5173\u95ed\u670d\u52a1\u4e4b\u524d\u7684\u51e0\u5206\u949f\u5185\uff0c\u5c1d\u8bd5\u5efa\u7acb\u65b0\u7684ftp\u8fde\u63a5\u5747\u4e0d\u88ab\u63a5\u53d7<br \/>-d min: \u5728ftp\u5173\u95ed\u670d\u52a1\u4e4b\u524d\u7684\u51e0\u5206\u949f\u5185\uff0c\u5df2\u7ecf\u5efa\u7acb\u7684ftp\u8fde\u63a5\u5c06\u88ab\u4e2d\u6b62<br \/>time: \u5728\u591a\u5c11\u65f6\u95f4\u540e\uff0c\u670d\u52a1\u5668\u5c06\u5173\u95edftp\u670d\u52a1\uff0c\u683c\u5f0f\u6709\u4e24\u79cd<br \/>\uff0bnumber \u7ecf\u8fc7number\u5206\u949f\u540e\u5173\u95ed<br \/>MMHH \u5728\u4eca\u5929MM\uff1aHH\u670d\u52a1\u5668\u5c06\u5173\u95ed<\/p>\n<p>\u6ce8\u610f\uff0c\u8fd9\u91cc\u6211\u4eec\u7528\u8fd9\u4e2a\u547d\u4ee4\u662f\u628aftp\u670d\u52a1\u7ed9\u505c\u4e86\uff0c\u4f46\u5b9e\u9645\u7684proftpd\u8fdb\u7a0b\u8fd8\u6ca1\u505c\u6b62\uff0c\u6240\u4ee5\u4e00\u822c\u8c03\u8bd5ftp\u4f1a\u4f7f\u7528\u5230\u8fd9\u4e2a\u547d\u4ee4\u3002<\/p>\n<p>\u4e3e\u4f8b\uff1a<br \/>\u518d\u7ecf\u8fc730\u5206\u949f\u540e\uff0cFTP\u670d\u52a1\u5c06\u5173\u95ed\uff0c\u5728\u8fd9\u4e4b\u524d\u768420\u5206\u949f\u4e0d\u53ef\u63a5\u53d7\u4efb\u4f55\u65b0\u7684ftp\u8fde\u63a5\uff0c\u5df2\u7ecf\u5efa\u7acb\u7684\u5728\u670d\u52a1\u5173\u95ed\u524d10\u5206\u949f\u5f3a\u5236\u65ad\u7ebf\uff0c\u5e76\u5728\u5ba2\u6237\u7aef\u663e\u793a&#8220;FTP Server Will shutdown at time&#8221;<\/p>\n<p>ftpshut -l 20 -d 10 +30 \"FTP Server Will shutdown at time\"<\/p>\n<p>\u5176\u5b9eftpshut\u5c31\u662f\u4ea7\u751f\/etc\/shutmsg ,\u4f60\u53ea\u8981\u5220\u9664\u8fd9\u4e2a\u6587\u4ef6ftp\u53c8\u53ef\u4ee5\u91cd\u65b0\u670d\u52a1\uff0c\u6216\u8005<br \/>\u76f4\u63a5<\/p>\n<p>ftpshut -R<\/p>\n<p>\u597d\u4e86\uff0c\u5f00\u59cb\u8bb2\u4e00\u4e9bproftpd\u7684\u57fa\u672c\u914d\u7f6e\u5427\uff0c\u5176\u5b9e\u5927\u5bb6\u5982\u679c\u719f\u6089apache\u7684\u914d\u7f6e\u7684\u8bdd\uff0c\u4f60\u4f1a\u53d1\u73b0proftpd\u7684\u8bbe\u7f6e\u57fa\u672c\u90fd\u662f\u7c7b\u4f3c\u7684\uff0c\u5b83\u7684\u914d\u7f6e\u57fa\u672c\u683c\u5f0f\u662f<\/p>\n<p>\uff03\u5168\u5c40\u8bbe\u7f6e<br \/>\u8bbe\u7f6e\u9879\u76ee1 \u53c2\u65701<br \/>\u8bbe\u7f6e\u9879\u76ee2 \u53c2\u65702<\/p>\n<p>\uff03\u67d0\u4e2a\u76ee\u5f55\u7684\u8bbe\u7f6e<br \/>&lt;Directory \"\u8def\u5f84\u540d\"&gt;<br \/>...<br \/>...<br \/>&lt;\/Directory&gt;<\/p>\n<p>\uff03\u5173\u4e8e\u533f\u540d\u7528\u6237\u7684\u8bbe\u7f6e<br \/>&lt;Anonymous \"\u533f\u540d\u767b\u9646\u7684\u76ee\u5f55\"&gt;<br \/>...<br \/>...<br \/>&lt;Limit \u9650\u5236\u52a8\u4f5c&gt;<br \/>...<br \/>...<br \/>&lt;\/Limit&gt;<br \/>&lt;\/Anonymous&gt;<\/p>\n<p>\u6211\u4eec\u7528\u5230\u7684\u6bd4\u8f83\u591a\u7684\u53ef\u80fd\u662fLimit\u7684\u4f7f\u7528\uff0cLimit\u5927\u81f4\u6709\u4ee5\u4e0b\u52a8\u4f5c\uff0c\u57fa\u672c\u80fd\u8986\u76d6\u5168\u90e8\u7684\u6743\u9650\u4e86\uff0c\u5927\u5bb6\u7075\u6d3b\u4f7f\u7528\u5c31\u662f\u4e86\u3002<\/p>\n<p>CMD\uff1aChange Working Directory \u6539\u53d8\u76ee\u5f55<br \/>MKD\uff1aMaKe Directory \u5efa\u7acb\u76ee\u5f55\u7684\u6743\u9650<br \/>RNFR\uff1a ReName FRom \u66f4\u6539\u76ee\u5f55\u540d\u7684\u6743\u9650<br \/>DELE\uff1aDELEte \u5220\u9664\u6587\u4ef6\u7684\u6743\u9650<br \/>RMD\uff1aReMove Directory \u5220\u9664\u76ee\u5f55\u7684\u6743\u9650<br \/>RETR\uff1aRETRieve \u4ece\u670d\u52a1\u7aef\u4e0b\u8f7d\u5230\u5ba2\u6237\u7aef\u7684\u6743\u9650<br \/>STOR\uff1aSTORe \u4ece\u5ba2\u6237\u7aef\u4e0a\u4f20\u5230\u670d\u52a1\u7aef\u7684\u6743\u9650<br \/>READ\uff1a\u53ef\u8bfb\u7684\u6743\u9650\uff0c\u4e0d\u5305\u62ec\u5217\u76ee\u5f55\u7684\u6743\u9650\uff0c\u76f8\u5f53\u4e8eRETR\uff0cSTAT\u7b49<br \/>WRITE\uff1a\u5199\u6587\u4ef6\u6216\u8005\u76ee\u5f55\u7684\u6743\u9650\uff0c\u5305\u62ecMKD\u548cRMD<br \/>DIRS\uff1a\u662f\u5426\u5141\u8bb8\u5217\u76ee\u5f55\uff0c\u76f8\u5f53\u4e8eLIST\uff0cNLST\u7b49\u6743\u9650\uff0c\u8fd8\u662f\u6bd4\u8f83\u5b9e\u7528\u7684<br \/>ALL\uff1a\u6240\u6709\u6743\u9650<br \/>LOGIN\uff1a\u662f\u5426\u5141\u8bb8\u767b\u9646\u7684\u6743\u9650<br \/>\u9488\u5bf9\u4e0a\u9762\u8fd9\u4e2aLimit\u6240\u5e94\u7528\u7684\u5bf9\u8c61\uff0c\u53c8\u5305\u62ec\u4ee5\u4e0b\u8303\u56f4 <\/p>\n<p>AllowUser \u9488\u5bf9\u67d0\u4e2a\u7528\u6237\u5141\u8bb8\u7684Limit<br \/>DenyUser \u9488\u5bf9\u67d0\u4e2a\u7528\u6237\u7981\u6b62\u7684Limit<br \/>AllowGroup \u9488\u5bf9\u67d0\u4e2a\u7528\u6237\u7ec4\u5141\u8bb8\u7684Limit<br \/>DenyGroup \u9488\u5bf9\u67d0\u4e2a\u7528\u6237\u7ec4\u7981\u6b62\u7684Limit<br \/>AllowAll \u9488\u5bf9\u6240\u6709\u7528\u6237\u7ec4\u5141\u8bb8\u7684Limit<br \/>DenyAll \u9488\u5bf9\u6240\u6709\u7528\u6237\u7981\u6b62\u7684Limit<br \/>\u5173\u4e8e\u9650\u5236\u901f\u7387\u7684\u53c2\u6570\u4e3a\uff1a <\/p>\n<p>TransferRate STOR|RETR \u901f\u5ea6\uff08Kbytes\/s\uff09 user \u4f7f\u7528\u8005<\/p>\n<p>\u4e0b\u9762\u6211\u4eec\u4ee5\u4f8b\u5b50\u6765\u89e3\u8bf4proftp\u7684\u914d\u7f6e\uff0c\u8fd9\u6837\u5927\u5bb6\u53ef\u80fd\u66f4\u52a0\u5bb9\u6613\u7406\u89e3\u3002<\/p>\n<p>1\u3002ftp\u670d\u52a1\u5668\u652f\u6301\u65ad\u70b9\u7eed\u4f20\uff0c\u4e14\u6700\u5927\u652f\u6301\u540c\u65f610\u4eba\u5728\u7ebf\uff0c\u6bcf\u4e2aip\u53ea\u5141\u8bb8\u4e00\u4e2a\u8fde\u63a5\uff1b<br \/>2\u3002\u5141\u8bb8ftpusers\u7528\u6237\u7ec4\u53ea\u80fd\u8bbf\u95ee\u81ea\u5df1\u7684\u76ee\u5f55\uff0c\u800c\u4e0d\u80fd\u8bbf\u95ee\u4e0a\u7ea7\u6216\u8005\u5176\u4ed6\u76ee\u5f55\uff1b<br \/>3\u3002\u7528\u6237\u767b\u9646\u670d\u52a1\u5668\u65f6\u4e0d\u663e\u793aftp\u670d\u52a1\u5668\u7248\u672c\u4fe1\u606f\uff0c\u4ee5\u589e\u52a0\u5b89\u5168\u6027\uff1b<br \/>4\u3002\u5efa\u7acb\u4e00\u4e2akaoyan\u7684ftp\u5e10\u6237\uff0c\u5c5e\u4e8eftpusers\u7ec4\uff0ckaoyan\u7528\u6237\u53ea\u5141\u8bb8\u4e0b\u8f7d\uff0c\u6ca1\u6709\u53ef\u5199\u7684\u6743\u9650\u3002\u4e0b\u8f7d\u901f\u7387\u9650\u5236\u572850Kbytes\/s\u3002<br \/>5\u3002\u5efa\u7acb\u4e00\u4e2aupload\u7528\u6237\uff0c\u4e5f\u5c5e\u4e8eftpusers\u7ec4\uff0c\u540ckaoyan\u7528\u6237\u7684\u5bbf\u4e3b\u76ee\u5f55\u4e00\u6837\uff0c\u5141\u8bb8upload\u7528\u6237\u4e0a\u4f20\u6587\u4ef6\u548c\u521b\u5efa\u76ee\u5f55\u7684\u6743\u9650\uff0c\u4f46\u4e0d\u5141\u8bb8\u4e0b\u8f7d\uff0c\u5e76\u4e14\u4e0d\u5141\u8bb8\u5220\u9664\u76ee\u5f55\u548c\u6587\u4ef6\u7684\u6743\u9650\uff0c\u4e0a\u4f20\u7684\u901f\u7387\u63a7\u5236\u5728100Kbytes\/s<\/p>\n<p>\u5148\u662f\u524d\u671f\u7684\u7528\u6237\u548c\u7ec4\u6dfb\u52a0\u4ee5\u53ca\u76ee\u5f55\u7684\u6743\u9650\u8bbe\u7f6e<\/p>\n<p>group add ftpusers<br \/>useradd -d \/home\/kaoyan -g ftpusers -s \/bin\/fales kaoyan<br \/>useradd -d \/home\/kaoyan -g ftpusers -s \/bin\/fales upload<br \/>chown -R kaoyan:upload \/home\/kaoyan<br \/>chmod -R 775 \/home\/kaoyan<br \/>\u5982\u679c\u4f60\u53ea\u60f3ftpusers\u7ec4\u7684\u7528\u6237\u8bbf\u95ee\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u6210770\u90fd\u884c\u3002<br \/>\u8bbe\u7f6e\/usr\/local\/proftpd\/etc\/proftpd.conf<\/p>\n<p>\u6ce8\u610f#\u8868\u793a\u6ce8\u91ca\uff0c\u5bf9\u8bbe\u7f6e\u6ca1\u5f71\u54cd\uff0c\u53ef\u4ee5\u4e0d\u5199<\/p>\n<p>ServerName \"Frank's FTP Server\"<br \/>ServerType standalone<br \/>DefaultServer on<br \/>Port 21<br \/>Umask 022<br \/>MaxInstances 30 #\u6700\u591a\u670930\u4e2aproftpd\u7684PID<br \/>User nobody<br \/>Group nobody<br \/>TimeoutStalled 10<br \/>MaxClients 10 #\u6700\u591a\u5141\u8bb810\u4e2a\u7528\u6237\u5728\u7ebf<br \/>MaxClientsPerHost 1 \"\u5bf9\u4e0d\u8d77\uff0c\u4e00\u4e2aIP\u53ea\u5141\u8bb8\u4e00\u4e2a\u8fde\u63a5\"<br \/>AllowStoreRestart on <br \/>#\u5141\u8bb8\u65ad\u70b9\u7eed\u4f20\uff08\u4e0a\u4f20\uff09\uff0c\u65ad\u70b9\u7eed\u7eed\uff08\u4e0b\u8f7d\uff09\u662f\u9ed8\u8ba4\u652f\u6301\u7684\uff0c\u4e0d\u7528\u8bbe\u7f6e<br \/>DisplayLogin welcome.msg #\u6b22\u8fce\u8bcd\u6587\u4ef6<br \/>ServerIdent off #\u5c4f\u853d\u670d\u52a1\u5668\u7248\u672c\u4fe1\u606f<br \/>DefaultRoot ~ ftpusers #\u8bbe\u7f6eftpusers\u7ec4\u53ea\u80fd\u8bbf\u95ee\u81ea\u5df1\u7684\u76ee\u5f55<\/p>\n<p>&lt;Directory \/&gt;<br \/>AllowOverwrite on<br \/>&lt;\/Directory&gt;<br \/>&lt;Directory \/home\/kaoyan&gt;<br \/>&lt;Limit WRITE&gt; #\u4e0d\u5141\u8bb8\u5199<br \/>DenyUser kaoyan<br \/>&lt;\/Limit&gt;<br \/>&lt;Limit RMD RNFR DELE RETR&gt; #\u4e0d\u5141\u8bb8\u5220\u9664\uff0c\u6539\u540d\uff0c\u4e0b\u8f7d<br \/>DenyUser upload<br \/>&lt;\/Limit&gt;<br \/>TransferRate RETR 50 user kaoyan<br \/>TransferRate STOR 100 user upload<br \/>&lt;\/Directory&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>\u6211\u8fd9\u91cc\u5b9e\u73b0\u7684\u65b9\u5f0f\u8fd8\u53ef\u4ee5\u901a\u8fc7<\/p>\n<p>&lt;Anonymous ~kaoyan&gt;<\/p>\n<p>...<\/p>\n<p>...<\/p>\n<p>&lt;\/Anonymous&gt;<\/p>\n<p>&lt;&gt;&lt;Anonymous ~upload&gt;<\/p>\n<p>...<\/p>\n<p>...<\/p>\n<p>&lt;\/Anonymous&gt;<\/p>\n<p>\u800c\u4e14\u66f4\u52a0\u7075\u6d3b\uff0c\u5177\u4f53\u7528\u90a3\u79cd\u65b9\u5f0f\uff0c\u770b\u5927\u5bb6\u4e86\uff0c\u6211\u53ea\u662f\u7ed9\u5927\u5bb6\u5165\u4e2a\u95e8\u800c\u5df2<\/p>\n<p>\u597d\u4e86\uff0c\u4eca\u5929\u5c31\u8bb2\u5230\u8fd9\u91cc\uff0c\u660e\u5929\u7ee7\u7eed\u8bb2\u4e00\u4e9bproftp\u7684\u5176\u4ed6\u914d\u7f6e<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\uff08\u4e09\uff09<\/p>\n<p>\u524d\u9762\u7684\u4e24\u4e2a\u7b14\u8bb0\uff0c\u6211\u60f3\u5927\u5bb6\u5bf9proftp\u7684\u8bbe\u7f6e\u5e94\u8be5\u6709\u4e9b\u8ba4\u8bc6,\u662f\u4e0d\u662f\u8ddfapache\u7684\u914d\u7f6e\u5dee\u4e0d\u591a\u5427\u3002\u6211\u60f3\u914d\u7f6e\u8fc7Serv_U\u670d\u52a1\u5668\u7684\uff0c\u518d\u7a0d\u5fae\u770b\u4e00\u4e0bproftp\u7684\u914d\u7f6e\u89c4\u5219\uff0c\u5e94\u8be5\u80fd\u9a6c\u4e0a\u80fd\u914d\u7f6e\u51fa\u4e00\u4e2a\u5f3a\u5927\u7684proftp\u670d\u52a1\u5668\u3002<\/p>\n<p>\u8fd9\u91cc\u6211\u4eec\u518d\u8bb2\u4e00\u4e9bproftp\u7684\u5176\u4ed6\u53c2\u6570\u914d\u7f6e\uff1a<\/p>\n<p>MaxHostsPerUser 1 \"\u5bf9\u4e0d\u8d77\uff0c\u6bcf\u4e2a\u5e10\u6237\u6700\u591a\u5141\u8bb8\u6765\u6e90ip\u4e3a1\u4e2a\"<br \/>#MaxHostsPerUser \u5bf9\u9632\u6b62ftp\u5e10\u53f7\u8fd8\u662f\u6bd4\u8f83\u6709\u7528\u7684\u3002<\/p>\n<p>MaxClientsPerUser 1 \"\u5bf9\u4e0d\u8d77\uff0c\u6bcf\u4e2a\u5e10\u6237\u5728\u6bcf\u4e2a\u5ba2\u6237\u7aef\u6700\u591a\u53ef\u4ee5\u540c\u65f6\u767b\u96461\u6b21\"<br \/>#\u8fd9\u4e2a\u53c2\u6570\u53ef\u4ee5\u9632\u6b62\u591a\u7ebf\u7a0b\u8f6f\u4ef6\u4e0b\u8f7d\u5bf9\u670d\u52a1\u5668\u7684\u7834\u574f<\/p>\n<p>MaxClientsPerHost 1 \"\u5bf9\u4e0d\u8d77\uff0c\u540c\u4e00\u4e2a\u5ba2\u6237\u7aef\u53ea\u80fd\u6700\u591a1\u4e2a\u5e10\u53f7\u53ef\u4ee5\u767b\u9646\"<br \/>#\u6bd4\u5982ftp\u670d\u52a1\u7aef\u6709\u597d\u591a\u5e10\u6237\u4f60\u90fd\u6709\uff0c\u4f46\u4e5f\u53ea\u80fd\u75281\u4e2a\u5e10\u53f7\u767b\u9646<\/p>\n<p>\u5475\u5475\uff0c\u8fd9\u4e09\u4e2aMax\u53c2\u6570\u6bd4\u8f83\u5bb9\u6613\u641e\u6655\uff0c\u5927\u5bb6\u53ef\u8981\u641e\u6e05\u4ed6\u4eec\u7684\u542b\u4e49\u54e6\uff1a\uff09<\/p>\n<p>WtmpLog on <br \/>#\u662f\u5426\u8981\u628aftp\u8bb0\u5f55\u5728\u65e5\u5fd7\u4e2d\uff0c\u5982\u679c\u4e0d\u60f3\u53ef\u4ee5\u8bbe\u7f6e\u6210off\u5c4f\u853d\u6389log\u65e5\u5fd7\u3002<\/p>\n<p>TimeoutIdle 600<br \/>#\u5ba2\u6237\u7aefidel\u65f6\u95f4\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u5c31\u662f600\u79d2<\/p>\n<p>DisplayLogin welcome.msg<br \/>#\u8bbe\u7f6eftp\u767b\u9646\u6b22\u8fce\u4fe1\u606f\u6587\u4ef6<\/p>\n<p>\u5173\u4e8e\u6b22\u8fce\u6587\u4ef6\u7684\u8bbe\u7f6e\u5305\u542b\u5982\u4e0b\u53c2\u6570<\/p>\n<p>%T \u76ee\u524d\u7684\u65f6\u95f4 <br \/>%F \u6240\u5728\u786c\u76d8\u5269\u4e0b\u7684\u5bb9\u91cf <br \/>%C \u76ee\u524d\u6240\u5728\u7684\u76ee\u5f55 <br \/>%R Client \u7aef\u7684\u4e3b\u673a\u540d\u79f0 <br \/>%L Server \u7aef\u7684\u4e3b\u673a\u540d\u79f0 <br \/>%U \u4f7f\u7528\u8005\u5e10\u6237\u540d\u79f0 <br \/>%M \u6700\u5927\u5141\u8bb8\u8fde\u63a5\u4eba\u6570 <br \/>%N \u76ee\u524d\u7684\u670d\u52a1\u5668\u8fde\u63a5\u4eba\u6570 <br \/>%E FTP\u670d\u52a1\u5668\u7ba1\u7406\u5458\u7684 email <br \/>%i \u672c\u6b21\u4e0a\u4f20\u7684\u6587\u4ef6\u6570\u91cf <br \/>%o \u672c\u6b21\u4e0b\u8f7d\u7684\u6587\u4ef6\u6570\u91cf <br \/>%t \u672c\u6b21\u4e0a\u4f20+\u4e0b\u8f7d\u7684\u6587\u4ef6\u6570\u91cf<\/p>\n<p>\u77e5\u9053\u8fd9\u4e9b\u53c2\u6570\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5199\u51fa\u4e00\u4e2a\u53cb\u597d\u7684\u6b22\u8fce\u8bed<\/p>\n<p>vi \/home\/kaoyan\/welcome.msg<\/p>\n<p>\u6b22\u8fce\u60a8%U\uff0c \u8fd9\u662fFrank\u7684\u6d4b\u8bd5FTP\u670d\u52a1\u5668\uff1b<br \/>\u76ee\u524d\u65f6\u95f4\u662f\uff1a%T\uff1b<br \/>\u672c\u670d\u52a1\u5668\u6700\u591a\u5141\u8bb8%M\u4e2a\u7528\u6237\u8fde\u63a5\u6570\uff1b<br \/>\u76ee\u524d\u670d\u52a1\u5668\u4e0a\u5df2\u6709%N\u4e2a\u7528\u6237\u8fde\u63a5\u6570\uff1b<br \/>\u76ee\u524d\u4f60\u6240\u5728\u7684\u76ee\u5f55\u662f%C;<br \/>\u76ee\u5f55\u6240\u5728\u7684\u786c\u76d8\u8fd8\u5269\u4e0b%F\u5b57\u8282\u3002<\/p>\n<p>\u8ba9proftp\u652f\u6301\u73b0\u5728\u6d41\u884c\u7684FXP\u4f20\u8f93\u65b9\u5f0f\uff0c\u9ed8\u8ba4\u662f\u4e0d\u652f\u6301\u7684\u3002<br \/>\u53ea\u8981\u5728\u670d\u52a1\u7aef\u8bbe\u7f6e<\/p>\n<p>AllowForeignAddress on<\/p>\n<p>PassivePorts 49152 65534 #\u7aef\u53e3\u4e5f\u53ef\u81ea\u5df1\u6307\u5b9a\u559c\u6b22\u7684<\/p>\n<p>\u5343\u4e07\u522b\u5fd8\u4e86\u5728\u5ba2\u6237\u7aef\u4e5f\u8981\u8bbe\u7f6e\u6210\u652f\u6301FXP\u54e6\uff0c\u5426\u5219\u60f3\u6211\u8bd5\u9a8c\u4e86\u597d\u51e0\u6b21\uff0c\u4e00\u76f4\u4ee5\u4e3a\u670d\u52a1\u5668\u6ca1\u8bbe\u7f6e\u597d\uff0c\u5176\u5b9e\u5c31\u662f\u5ba2\u6237\u7aef\u6ca1\u8bbe\u7f6e\uff0c\u5475\u5475\u3002<\/p>\n<p>\u5982\u4f55\u8ba9root\u80fd\u767b\u9646\uff0c\u9ed8\u8ba4proftp\u662f\u4e0d\u652f\u6301root\u767b\u9646\uff0c\u6211\u4eec\u53ef\u4ee5\u8bbe\u7f6e\u8ba9root\u4e5f\u80fd\u767b\u9646ftp\uff0c\u4e0d\u8fc7\u6211\u5728\u8fd9\u91cc\u8fd8\u662f\u5efa\u8bae\u5927\u5bb6\u6700\u597d\u4e0d\u8981\u8ba9root\u80fd\u767b\u9646ftp\uff0c\u8bbe\u7f6e\u5982\u4e0b<\/p>\n<p>RootLogin on<br \/>\u5982\u4f55\u7981\u6b62\u67d0\u4e2a\u5730\u5740\u8bbf\u95eeftp<br \/>\u6bd4\u5982\u7981\u6b6210.1.1\u7f51\u6bb5\u7684\u673a\u5668\u8bbf\u95eeftp\uff0c\u53ef\u4ee5\u8fd9\u4e48\u8bbe\u7f6e<\/p>\n<p>&lt;Limit LOGIN&gt;<br \/>Order deny,allow<br \/>Deny from 10.1.1.<br \/>Allow from all<br \/>&lt;\/Limit&gt;<\/p>\n<p>\u865a\u62dfftp\u7684\u5efa\u7acb\uff0c\u4e00\u822c\u7528\u4e8e\u4e00\u53f0ftp\u670d\u52a1\u5668\u6709\u597d\u591aip\u5730\u5740\uff0c\u6216\u8005ftp\u7528\u4e0d\u540c\u7684\u7aef\u53e3\uff0c\u57fa\u672c\u8bbe\u7f6e\u8bed\u6cd5\u662f:<\/p>\n<p>\u6bd4\u5982\u6211\u4eec\u8981\u505a\u4e00\u4e2a\u7aef\u53e3\u662f5555\u7684ftp\u670d\u52a1\u5668\uff1a<\/p>\n<p>&lt;VirtualHost 210.51.0.124&gt;<br \/>ServerName \"Frank FTP Server\"<br \/>Port 5555<br \/>...<br \/>&lt;Directory \u76ee\u5f55&gt;<br \/>...<br \/>&lt;Limit \u52a8\u4f5c&gt;<br \/>...<br \/>&lt;\/Limit&gt;<br \/>...<br \/>&lt;\/Directory&gt;<br \/>&lt;\/VirtualHost&gt;<\/p>\n<p>\u81f3\u4e8e\u865a\u62df\u4e3b\u673a\u4e2d\u7684\u5176\u4ed6\u8bbe\u7f6e\u8ddf\u6211\u4ee5\u524d\u8bb2\u7684\u57fa\u672c\u5dee\u4e0d\u591a<\/p>\n<p>\u4e0a\u4f20\/\u4e0b\u8f7d\u6bd4\u7387\u8bbe\u7f6e\uff0c\u6211\u60f3\u7528\u8fc7Serv_U\u7684\u670b\u53cb\u4e00\u5b9a\u77e5\u9053\u8fd9\u4e2a\u529f\u80fd\u7684\u4f7f\u7528\uff0c\u6211\u4eec\u8fd9\u91cc\u8ba9proftp\u4e5f\u5b9e\u73b0\u8fd9\u4e2a\u529f\u80fd\u3002<br \/>\u8981\u5b9e\u73b0\u529f\u80fd\u6ce8\u610f\u7f16\u8bd1\u7684\u65f6\u5019\u52a0\u5165ratio\u6a21\u5757\uff0c\u5426\u5219proftp\u9ed8\u8ba4\u662f\u4e0d\u652f\u6301\uff0c\u5047\u8bbe\u6709\u4e2a\u5e10\u6237ftp1\u7684ftp\u76ee\u5f55\u5728\/home\/kaoyan \uff0c\u7136\u540e\u6211\u4eec\u8bbe\u7f6eftp1\u7684\u4e0a\u4f20\/\u4e0b\u8f7d\u6bd4\u7387\u662f1\uff1a2\uff08\u5373\u4e0a\u4f201M\uff0c\u5c31\u53ef\u4ee5\u4e0b\u8f7d2M\uff09<\/p>\n<p>touch \/home\/kaoyan\/ratio.dat<br \/>touch \/home\/kaoyan\/ratio.tmp<br \/>chmod -R 666 \/home\/kaoyan<br \/>\u5728proftpd.conf\u8bbe\u7f6e\u5982\u4e0b<\/p>\n<p>Ratios on<br \/>SaveRatios on<br \/>RatioFile \/home\/kaoyan\/ratio.dat<br \/>RatioTempFile \/home\/kaoyan\/ratio.tmp<\/p>\n<p>\u5728\u76f8\u5e94\u7684\u8bbe\u7f6e\u9879\u91cc\u6dfb\u52a0<\/p>\n<p>UserRatio ftp1 0 0 2 1000<br \/>#UserRatio \"\u4f7f\u7528\u8005\u5e10\u6237\" fileratio filequota byteratio bytequota<br \/>#\u3000 fileratio \uff1a\u4ee5\u6587\u4ef6\u4e3a\u57fa\u7840\u7684\u6bd4\u7387\uff0c\u901a\u5e38\u4e0d\u9650\u5236\uff0c\u6545\u4e3a 0 <br \/>#\u3000 filequota \uff1a\u9884\u8bbe\u7f6e\u80fd\u4e0b\u8f7d\u591a\u5c11\u6587\u4ef6\uff0c\u4e0d\u9650\u5236\u65f6\u4e3a 0 <br \/>#\u3000 byteratio \uff1a\u5c31\u662f\u4e0a\u4f20\/\u4e0b\u8f7d\u7684\u6bd4\u4f8b,\u5982\u679c\u6570\u5b57\u4e3a2\uff0c\u8868\u793a1:2 <br \/>#\u3000 bytequota \uff1a\u9884\u8bbe\u7f6e\u80fd\u4e0b\u8f7d\u591a\u5c11 KBytes \u7684\u6587\u4ef6<br \/>#\u4e0a\u9762\u8bbe\u7f6e\u7684\u5c31\u662f1\uff1a2\u7684\u6bd4\u7387\uff0c\u9ed8\u8ba4\u53ea\u5141\u8bb8\u4e0b\u8f7d1M\u7684\u6587\u4ef6<\/p>\n<p>ok,\u91cd\u542f\u4e00\u4e0b\uff0c\u4ee5\u540eftp1\u5c31\u53ef\u4ee5\u542f\u7528\u4e0a\u4f20\/\u4e0b\u8f7d\u6bd4\u7387\u4e86<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\uff08\u56db\uff09<\/p>\n<p>\u4eca\u5929\u6211\u4eec\u8bb2proftp\uff0bmysql\uff0bquota\u7684\u5e94\u7528\uff0c\u6211\u60f3\u5927\u5bb6\u6700\u671f\u5f85\u7684\u5c31\u662f\u8fd9\u4e2a\u4e86\u5427<\/p>\n<p>1.\u9996\u5148\u6211\u4eec\u5efa\u7acb\u76f8\u5e94\u7684\u7528\u6237\u548c\u7528\u6237\u7ec4<\/p>\n<p>groupadd -g 5500 ftpgroup<br \/>adduser -u 5500 -s \/bin\/false -d \/bin\/null -c \"proftpd user\" -g ftpgroup ftpuser<br \/>2.\u64cd\u4f5c\u6570\u636e\u5e93<\/p>\n<p>mysql mysql -uroot -ppassword<br \/>create database ftpdb<br \/>grant select, update on ftpdb.* to <a href=\"mailto:proftpd@localhost\">proftpd@localhost<\/a> identified by 'password' <br \/>use ftpdb<\/p>\n<p>CREATE TABLE `ftpgroup` (<br \/>`groupname` varchar(16) NOT NULL default '',<br \/>`gid` smallint(6) NOT NULL default '5500',<br \/>`members` varchar(16) NOT NULL default '',<br \/>KEY `groupname` (`groupname`)<br \/>) TYPE=MyISAM COMMENT='ProFTP group table';<\/p>\n<p>INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');<\/p>\n<p>CREATE TABLE `ftpquotalimits` (<br \/>`name` varchar(30) default NULL,<br \/>`quota_type` enum('user','group','class','all') NOT NULL default 'user',<br \/>`per_session` enum('false','true') NOT NULL default 'false',<br \/>`limit_type` enum('soft','hard') NOT NULL default 'soft',<br \/>`bytes_in_avail` float NOT NULL default '0',<br \/>`bytes_out_avail` float NOT NULL default '0',<br \/>`bytes_xfer_avail` float NOT NULL default '0',<br \/>`files_in_avail` int(10) unsigned NOT NULL default '0',<br \/>`files_out_avail` int(10) unsigned NOT NULL default '0',<br \/>`files_xfer_avail` int(10) unsigned NOT NULL default '0'<br \/>) TYPE=MyISAM;<\/p>\n<p>CREATE TABLE `ftpquotatallies` (<br \/>`name` varchar(30) NOT NULL default '',<br \/>`quota_type` enum('user','group','class','all') NOT NULL default 'user',<br \/>`bytes_in_used` float NOT NULL default '0',<br \/>`bytes_out_used` float NOT NULL default '0',<br \/>`bytes_xfer_used` float NOT NULL default '0',<br \/>`files_in_used` int(10) unsigned NOT NULL default '0',<br \/>`files_out_used` int(10) unsigned NOT NULL default '0',<br \/>`files_xfer_used` int(10) unsigned NOT NULL default '0'<br \/>) TYPE=MyISAM;<\/p>\n<p>CREATE TABLE `ftpuser` (<br \/>`id` int(10) unsigned NOT NULL auto_increment,<br \/>`userid` varchar(32) NOT NULL default '',<br \/>`passwd` varchar(32) NOT NULL default '',<br \/>`uid` smallint(6) NOT NULL default '5500',<br \/>`gid` smallint(6) NOT NULL default '5500',<br \/>`homedir` varchar(255) NOT NULL default '',<br \/>`shell` varchar(16) NOT NULL default '\/sbin\/nologin',<br \/>`count` int(11) NOT NULL default '0',<br \/>`accessed` datetime NOT NULL default '0000-00-00 00:00:00',<br \/>`modified` datetime NOT NULL default '0000-00-00 00:00:00',<br \/>PRIMARY KEY (`id`)<br \/>) TYPE=MyISAM COMMENT='ProFTP user table' ;<\/p>\n<p>\u6ce8\u610f\u8fd9\u91cc\u5927\u5bb6\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u586b\u5199\u81ea\u5df1\u6570\u636e\u5e93\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\uff0c\u5982\u679c\u5927\u5bb6\u5bf9\u6570\u636e\u5e93\u64cd\u4f5c\u4e0d\u719f\u6089\u7684\u8bdd\uff0c\u4e0d\u59a8\u53ef\u4ee5\u7528phpmyadmin\u6765\u64cd\u4f5c\u3002<\/p>\n<p>3.\u914d\u7f6eproftp\u6587\u4ef6<\/p>\n<p>ServerName \"Frank's FTP Server\" ServerType standalone DefaultServer on <br \/>Port 21<\/p>\n<p>Umask 022<\/p>\n<p>MaxInstances 30<br \/>MaxLoginAttempts 3<\/p>\n<p>User nobody<br \/>Group nobody<\/p>\n<p>MaxHostsPerUser 1 \"Sorry, you may not connect more than one time.\"<br \/>MaxClientsPerUser 2 \"Only one such user at a time.\"<br \/>MaxClientsPerHost 3 \"Sorry, you may not connect more than one time.\"<\/p>\n<p>RootLogin off<br \/>RequireValidShell off<br \/>TimeoutStalled 10<br \/>MaxClients 10<br \/>AllowForeignAddress on<br \/>AllowStoreRestart on<br \/>ServerIdent off<br \/>DefaultRoot ~ ftpgroup<\/p>\n<p>SQLAuthTypes Backend Plaintext<br \/>#Backend\u8868\u793a\u7528\u6237\u8ba4\u8bc1\u65b9\u5f0f\u4e3aMySQL\u6570\u636e\u5e93\u7684\u8ba4\u8bc1\u65b9\u5f0f <br \/>#Plaintext\u8868\u793a\u660e\u6587\u8ba4\u8bc1\u65b9\u5f0f\uff0c\u6392\u5728\u6700\u524d\u9762\u7684\u4e3a\u6700\u5148\u4f7f\u7528\u7684\u65b9\u5f0f<br \/>SQLAuthenticate users* groups*<\/p>\n<p># <a href=\"mailto:databasename@host\">databasename@host<\/a> database_user user_password<br \/>SQLConnectInfo <a href=\"mailto:ftpdb@localhost\">ftpdb@localhost<\/a> proftpd password<br \/>SQLUserInfo ftpuser userid passwd uid gid homedir shell<br \/>SQLGroupInfo ftpgroup groupname gid members<br \/>SQLHomedirOnDemand on<br \/>#\u5982\u679c\u7528\u6237\u4e3b\u76ee\u5f55\u4e0d\u5b58\u5728\uff0c\u5219\u7cfb\u7edf\u4f1a\u6839\u636e\u6b64\u7528\u6237\u5728\u7528\u6237\u6570\u636e\u8868\u4e2d\u7684homedir\u5b57\u6bb5\u7684\u503c\u65b0\u5efa\u4e00\u4e2a\u76ee\u5f55<br \/># Update count every time user logs in<br \/>SQLLog PASS updatecount<br \/>SQLNamedQuery updatecount UPDATE \"count=count+1,accessed=now() WHERE userid='%u'\" ftpuser<br \/># Update modified everytime user uploads or deletes a file<br \/>SQLLog STOR,DELE modified<br \/>SQLNamedQuery modified UPDATE \"modified=now() WHERE userid='%u'\" ftpuser<\/p>\n<p>QuotaEngine on<br \/>QuotaDirectoryTally on<br \/>QuotaDisplayUnits Mb<br \/>QuotaShowQuotas on<br \/>QuotaLog \"\/var\/log\/quota\"<br \/>SQLNamedQuery get-quota-limit SELECT \"name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avai<br \/>l, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}'<br \/>AND quota_type = '%{1}'\"<\/p>\n<p>SQLNamedQuery get-quota-tally SELECT \"name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_i<br \/>n_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'\"<\/p>\n<p>SQLNamedQuery update-quota-tally UPDATE \"bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used<br \/>+ %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_<br \/>out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'\" ftpquota<br \/>tallies<\/p>\n<p>SQLNamedQuery insert-quota-tally INSERT \"%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}\" ftpquotatallies<\/p>\n<p>QuotaLimitTable sql:\/get-quota-limit<br \/>QuotaTallyTable sql:\/get-quota-tally\/update-quota-tally\/insert-quota-tally<\/p>\n<p>&nbsp;<\/p>\n<p>ok,\u5c31\u8fd9\u4e48\u7b80\u5355\uff0c\u91cd\u542f\u4e00\u4e0bproftp\u670d\u52a1\u5c31\u5df2\u7ecf\u80fd\u4f7f\u7528proftp\uff0bmysql\uff0bquota\u7684\u529f\u80fd<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u5728\u6570\u636e\u5e93ftpuser\u6dfb\u52a0\u4e00\u4e2a\u865a\u62df\u7528\u6237\uff0c<\/p>\n<p>INSERT INTO `ftpuser` VALUES (1, 'test', 'ftppasswd', 5500, 5500, '\/home\/test', '\/sbin\/nologin');<br \/>\u5927\u5bb6\u53ef\u4ee5\u5728phpmyadmin\u91cc\u76f4\u63a5\u64cd\u4f5c\u6dfb\u52a0\u4e00\u4e2a\u7528\u6237\uff0c\u76f8\u4fe1\u4e0d\u7528\u6211\u6559\u5927\u5bb6\u600e\u4e48\u6dfb\u52a0\u5427\uff1a\uff09<\/p>\n<p>\u5982\u679c\u4f60\u60f3\u8bbe\u7f6equota\uff0c\u53ea\u8981\u5728ftpquotalimits\u8868\u91cc\u8bbe\u7f6e\u4e00\u4e0b\u5c31\u884c\u4e86\uff0c\u8fd9\u4e2a\u8868\u91cc\u7684\u5404\u4e2a\u53c2\u6570\u5206\u522b\u4ee3\u8868\uff1a<\/p>\n<p>quotalimits\u8868 <br \/>name\uff1a - \u7528\u6237\u5e10\u53f7<br \/>quota type\uff1a - user, group, class, all (we use user)<br \/>per_session\uff1a - true or false (we use true)<br \/>limit_type\uff1a - \u786c\u9650\u5236 or \u8f6f\u9650\u5236 (\u6211\u4eec\u4e00\u822c\u7528\u786c\u9650\u5236)<br \/>bytes_in_avail\uff1a - \u5141\u8bb8\u4e0a\u4f20\u7684\u5b57\u8282\u6570<br \/>bytes_out_avail\uff1a - \u5141\u8bb8\u4e0b\u8f7d\u7684\u5b57\u8282\u6570<br \/>bytes_xfer_avail\uff1a - \u5141\u8bb8\u4f20\u8f93\u7684\u5b57\u8282\u6570\uff08\u5305\u62ec\u4e0a\u4f20\/\u4e0b\u8f7d\uff09<br \/>files_in_avail\uff1a - \u5141\u8bb8\u4e0a\u4f20\u7684\u6587\u4ef6\u6570<br \/>files_out_avail\uff1a - \u5141\u8bb8\u4e0b\u8f7d\u7684\u6587\u4ef6\u6570<br \/>files_xfer_avail\uff1a - \u5141\u8bb8\u4f20\u8f93\u7684\u6587\u4ef6\u6570\uff08\u5305\u62ec\u4e0a\u4f20\/\u4e0b\u8f7d\uff09<\/p>\n<p>\u8001\u5b9e\u8bf4\u7528mysql\u548cquota\u6a21\u5757\u6765\u9a8c\u8bc1\u7528\u6237\u548c\u8bbe\u7f6e\u78c1\u76d8\u9650\u989d\uff0c\u4f46\u6211\u603b\u89c9\u5f97\u8fd8\u662f\u4e0d\u591f\u5b8c\u5584\uff0c\u56e0\u4e3a\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e2d\uff0c\u6570\u636e\u5e93\u8868\u91cc\u8fd8\u6ca1\u6709\u76f8\u5e94\u7684\u6743\u9650\u7684\u5b57\u6bb5\uff0c\u6240\u4ee5\u8bf4\u76f8\u5e94\u7528\u6237\u7684\u6743\u9650\u8fd8\u662f\u5f97\u7528\u5b9e\u9645\u5f97\u7528\u6237\u5373mysql\u5bf9\u5e94\u5f97uid\u548cgid\u6765\u63a7\u5236\u6743\u9650\uff0c\u90a3\u5929\u8981\u662fmysql\u6570\u636e\u5e93\u4e5f\u80fd\u5b8c\u5168\u63a7\u5236\u6743\u9650\u5c31\u597d\u4e86\u3002<\/p>\n<p>\u5927\u5bb6\u5982\u679c\u89c9\u5f97\u683c\u5f0f\u62f7\u8d1d\u7684\u65f6\u5019\u53ef\u80fd\u4f1a\u51fa\u9519\u7684\u8bdd\uff0c\u4e0d\u59a8\u76f4\u63a5\u4e0b\u8f7d\u6211\u7684\u914d\u7f6e\u6587\u4ef6\u548c\u6570\u636e\u5e93\u8868<\/p>\n<p>\u4e0b\u8f7d<a href=\"http:\/\/www.5ilinux.com\/download\/proftpd.conf\">proftpd.conf<br \/><\/a>\u4e0b\u8f7d<a href=\"http:\/\/www.5ilinux.com\/download\/ftpdb.sql\">ftpdb.sql<br \/><\/a>\u53ea\u662f\u6211\u7684\u6570\u636e\u5e93\u8868\u91cc\u5bf9\u5e94\u7684uid\u548cgid\u90fd\u662f5500\uff0c\u5927\u5bb6\u53ef\u6839\u636e\u81ea\u5df1\u7684\u60c5\u51b5\u4fee\u6539\uff1a\uff09\u6ce8\u610f\u6d88\u5316\u54e6\u3002<\/p>\n<p>\u8fd9\u4e2a\u6625\u8282\u4e00\u76f4\u5728\u5b66\u4e60proftp\uff0c\u7ec8\u4e8e\u53ef\u4ee5\u677e\u53e3\u6c14\u4e86\uff0c\u5e0c\u671b\u6211\u7684\u5b66\u4e60\u7b14\u8bb0\u53ef\u4ee5\u5bf9\u4e00\u4e9b\u60f3\u5b66\u4e60proftp\u7684\u670b\u53cb\u6709\u6240\u5e2e\u52a9\uff0c\u8bf7\u591a\u4ea4\u6d41\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u6765\u6e90\uff1a<a href=\"http:\/\/www.5ilinux.com\/blog\/archives\/000082.html\">http:\/\/www.5ilinux.com\/blog\/archives\/000082.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uff08\u4e00\uff09\u8fd9\u51e0\u5929\uff0c\u516c\u53f8\u7ec8\u4e8e\u653e\u5047\u4e86\uff0c\u7ec8\u4e8e\u53ef\u4ee5\u5b89\u4e0b\u5fc3\u6765\u597d\u597d\u5b66\u4e9bproftp+mysql+quota\u3002 \u5b89\u88c5proftp [&hellip;]<\/p>... ","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-116","post","type-post","status-publish","format-standard","hentry","category-others"],"_links":{"self":[{"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=116"}],"version-history":[{"count":0,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/posts\/116\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}