{"id":140,"date":"2007-09-04T17:01:27","date_gmt":"2007-09-04T09:01:27","guid":{"rendered":"http:\/\/blog.zhouhonghe.com\/?p=140"},"modified":"2007-09-04T17:01:33","modified_gmt":"2007-09-04T09:01:33","slug":"proftpd-%e6%94%af%e6%8c%81mysql%e6%95%b0%e6%8d%ae%e5%ba%93%e6%b7%bb%e5%8a%a0%e8%99%9a%e6%8b%9f%e7%94%a8%e6%88%b7%e8%ae%a4%e8%af%81%e5%8f%8aquotas%e7%a3%81%e7%9b%98%e9%99%90%e9%a2%9d","status":"publish","type":"post","link":"https:\/\/blog.zhouhonghe.com\/?p=140","title":{"rendered":"ProFTPD \u652f\u6301MySQL\u6570\u636e\u5e93\u6dfb\u52a0\u865a\u62df\u7528\u6237\u8ba4\u8bc1\u53caQuotas(\u78c1\u76d8\u9650\u989d)"},"content":{"rendered":"<p><strong>\u524d\u8a00<\/strong><\/p>\n<p>\u672c\u6587\u662f\u6839\u636e\u5b9e\u8df5\u800c\u6765\uff0c\u6700\u4e3b\u8981\u662f\u5e2e\u52a9\u65b0\u624b\u77e5\u9053\u600e\u4e48\u81ea\u67b6FTP\u670d\u52a1\u5668\uff0c\u672c\u6587\u4e5f\u53ef\u4ee5\u8bf4\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4f7f\u7528\u4f8b\u5b50\uff1b\u4f46\u4e0d\u4f1a\u628aProFTPD\u7684\u6240\u6709\u6587\u6863\u90fd\u8be6\u7ec6\u8bf4\u660e\uff1b\u4e5f\u5c31\u662f\u8bf4\u7b80\u5355\u7684\u5b89\u88c5\u548c\u914d\u7f6e\uff0c\u4ee5\u53ca\u6700\u7b80\u5355\u7684\u4f7f\u7528\u3002\u8ba9\u4e0d\u61c2ProFTPD\u7684\u5f1f\u5144\uff0c\u6bd4\u7740\u201c\u74e2\u201d\u4e5f\u80fd\u753b\u51fa\u201c\u846b\u82a6\u201d\u3002\u81f3\u4e8e\u54ea\u4e2aFTP\u670d\u52a1\u5668\u7a0b\u5e8f\u66f4\u597d\uff0c\u6211\u60f3\u90fd\u662f\u597d\u7684\uff0c\u53ea\u8981\u4f1a\u7528\u5c31\u884c\uff1bvsftpd \u73b0\u5728\u5f88\u6d41\u884c\uff1b\u4f46ProFTPD\u4e5f\u662f\u4e00\u79cd\u9009\u62e9... ...<\/p>\n<p><strong>1\u3001\u4ec0\u4e48\u662fProFTPD<\/strong><\/p>\n<p>ProFTPD \u662f\u4e00\u4e2aFTP\u670d\u52a1\u5668\u7a0b\u5e8f\uff0c\u548cvsftpd\u3001wuftp \u7c7b\u4f3c\u7684FTP\u670d\u52a1\u5668\uff0c\u4ed6\u4eec\u6700\u7ec8\u5b9e\u73b0\u529f\u80fd\u548c\u76ee\u7684\u90fd\u662f\u4e00\u6837\u7684\uff0c\u90fd\u662f\u4e3a\u4e86\u4f20\u8f93\u6587\u4ef6\uff1b<\/p>\n<p><strong>2\u3001ProFTPD\u7684\u7f16\u8bd1\u548c\u5b89\u88c5<\/strong><\/p>\n<p>2.1\u3001ProFTPD\u7684\u4e0b\u8f7d\uff1b<\/p>\n<p>ProFTPD\u7684\u4e3b\u9875\uff1a <a target=\"_blank\" href=\"http:\/\/www.proftpd.org\">http:\/\/www.proftpd.org<\/a><br \/>\n\u672c\u6559\u7a0b\u9009\u7528\u7248\u672c\uff1a proftpd-1.3.0rc3.tar.gz<br \/>\n\u4e0b\u8f7d\u5730\u5740\uff1a<\/p>\n<p>ftp:\/\/ftp.proftpd.org\/distrib\/source\/<br \/>\n<a target=\"_blank\" href=\"http:\/\/www.proftpd.org\/download.html\">http:\/\/www.proftpd.org\/download.html<\/a><\/p>\n<p>2.2\u3001\u7f16\u8bd1\u5b89\u88c5\uff1b<\/p>\n<p>\u7f16\u8bd1\u5b89\u88c5\u65f6\u5f97\u7528\u7f16\u8bd1\u73af\u5883\uff0c\u6bd4\u5982\u9700\u8981gcc\uff0c\u5982\u679c\u5c11\u4ec0\u4e48\u5305\uff0c\u60a8\u53ef\u4ee5\u5728\u7cfb\u7edf\u5b89\u88c5\u76d8\u4e2d\u627e\u5230\uff1b\u6216\u8005\u5728\u7ebf\u5347\u7ea7\u4e5f\u884c\uff1b\u73b0\u5728\u5927\u591a\u7684\u53d1\u884c\u7248\u90fd\u6709\u652f\u6301\u5728\u7ebf\u5347\u7ea7\u7684\u8f6f\u4ef6\u5305\u7ba1\u7406\u5de5\u5177\uff1b\u6bd4\u5982RPM\u7684\u7cfb\u7edf\u6709yum\u548capt\u53ef\u7528\uff0cdebian\u6709apt\u53ef\u7528 ... ... \u53e6\u5916Proftpd \u7684\u7528\u6237\u8ba4\u8bc1\u662f\u901a\u8fc7MySQL\u6570\u636e\u5e93\u6765\u5b9e\u73b0\u7684\uff0c\u6211\u4eec\u4e5f\u5f97\u628aMysql\u6570\u636e\u5e93\u670d\u52a1\u5668\u4e5f\u5f97\u5b89\u88c5\u4e0a\u5427\uff1b\u8fd9\u4e2a\u4e0d\u8be6\u7ec6\u8bf4\u4e86\uff0c\u60a8\u81ea\u5df1\u770b\u7740\u529e\u5427\uff1b<\/p>\n<p>\u6211\u4eec\u60f3\u628aProFTPD \u5b89\u88c5\u5728 \/opt\/proftpd \u76ee\u5f55\u4e2d\uff0c\u6211\u4eec\u628a\u8f6f\u4ef6\u4e0b\u8f7d\u5230 root\u7528\u6237\u7684\u5bb6\u76ee\u5f55\u4e2d\uff0c\u56e0\u4e3a\u5b89\u88c5\u8f6f\u4ef6\u9700\u8981 root\u6743\u9650\uff0c\u5982\u679c\u60a8\u5728\u666e\u901a\u7528\u6237\u4e0b\u6267\u884c\u7f16\u8bd1\u662f\uff0c\u5230make install \u8fd9\u6b65\uff0c\u5f97\u901a\u8fc7su\u547d\u4ee4\u5207\u6362\u5230root\u7528\u6237\uff0c\u7136\u540e\u6267\u884c make install \uff1b<\/p>\n<p>[root@localhost ~]# pwd<br \/>\n\/root<br \/>\n[root@localhost ~]# ls<br \/>\nproftpd-1.3.0rc3.tar.gz<\/p>\n<p>\u89e3\u538b\u3001\u7f16\u8bd1\u3001\u5b89\u88c5<\/p>\n<p>[root@localhost ~]# tar zxvf proftpd-1.3.0rc3.tar.gz<br \/>\n[root@localhost ~]# cd proftpd-1.3.0rc3<br \/>\n[root@localhost proftpd-1.3.0rc3]#.\/configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \\<br \/>\n--with-includes=\/usr\/include\/mysql \\<br \/>\n--with-libraries=\/usr\/lib\/mysql \\<br \/>\n--prefix=\/opt\/proftpd<\/p>\n<p>\u8bf4\u660e\uff1a<\/p>\n<p>--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql<br \/>\n\u8fd9\u53e5\u662f\u8ba9\u7f16\u8bd1ProFTPD \u652f\u6301MySQL\u7684\u6a21\u5757\uff0c\u5e76\u6709\u78c1\u76d8\u9650\u989d\u652f\u6301\uff1b<\/p>\n<p>--with-includes=<br \/>\n\u8fd9\u662f\u6765\u6307\u5b9aMySQL\u670d\u52a1\u5668includes\u6240\u5728\u7684\u4f4d\u7f6e\uff1b\u5728\u8fd9\u91cc\u6211\u8bbe\u7f6e\u7684\u662f\/usr\/include\/mysql\uff0c\u56e0\u4e3a\u6211\u7684MySQL\u670d\u52a1\u5668\u7684includes\u7684\u786e\u5728\u8fd9\u4e2a\u76ee\u5f55\uff1b\u4f60\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u673a\u5668\u73af\u5883\u6765\u8c03\u6574\uff1b<\/p>\n<p>--with-libraries=<br \/>\n\u8fd9\u662f\u6765\u6307\u5b9aMySQL\u670d\u52a1\u5668libraries\u6240\u5728\u7684\u4f4d\u7f6e\uff1b\u5728\u8fd9\u91cc\u6211\u8bbe\u7f6e\u7684\u662f\/usr\/lib\/mysql\uff0c\u56e0\u4e3a\u6211\u7684MySQL\u670d\u52a1\u5668\u7684libraries\u7684\u786e\u5728\u8fd9\u4e2a\u76ee\u5f55\uff1b\u4f60\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u673a\u5668\u73af\u5883\u6765\u8c03\u6574\uff1b<\/p>\n<p>--prefix=<br \/>\n\u8fd9\u662f\u7528\u6765\u6307\u5b9a\u8981\u628aProFTPD\u5b89\u88c5\u5728\u54ea\u4e2a\u4f4d\u7f6e\uff0c\u5728\u8fd9\u91cc\u6211\u628aProFTPD\u5b89\u88c5\u5728\u4e86 \/opt\/proftpd \u76ee\u5f55\u4e0b\uff0c\u60a8\u4e0d\u5fc5\u81ea\u5df1\u5efa\u76ee\u5f55 \/opt\/proftpd \uff0c\u5728\u5b89\u88c5\u7684\u65f6\u5019\u8fd9\u4e2a\u76ee\u5f55\u4f1a\u81ea\u52a8\u751f\u6210\uff1b\u5f53\u7136\u60a8\u4e5f\u53ef\u4ee5\u81ea\u5df1\u6765\u6307\u5b9aProFTPD\u7684\u5b89\u88c5\u4f4d\u7f6e\uff1b\u5f53\u6211\u4eec\u4e0d\u9700\u8981proftpd\u7684\u65f6\u5019\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u5220\u9664proftpd\u76ee\u5f55\uff1b\u8fd9\u6837\u505a\u597d\u8c61\u662f\u6709\u70b9\u65b9\u4fbf\uff1b<\/p>\n<p>\u5728configure\u8fc7\u7a0b\u4e2d\u7684\u9519\u8bef\u6392\u67e5\uff1a<\/p>\n<p>\u5982\u679c\u5728configure\u8fc7\u7a0b\u4e2d\uff0c\u4e5f\u5c31\u662f\u4e0a\u9762\u7684.\/configure \u4e00\u957f\u4e32\u6307\u4ee4\u6267\u884c\u540e\uff0c\u6709\u9519\u8bef\u53d1\u751f\uff0c\u65e0\u975e\u662f\u7f16\u8bd1\u5de5\u5177\u7f3a\u5c11\u6216\u8005Mysql\u7684includes\u548clibraries\u7684\u76ee\u5f55\u6307\u5b9a\u7684\u4e0d\u5bf9\uff1b\u81ea\u5df1\u60f3\u60f3\u770b\uff1f<\/p>\n<p>\u7f16\u8bd1\u548c\u5b89\u88c5\uff1a<\/p>\n<p>[root@localhost proftpd-1.3.0rc3]# make<br \/>\n[root@localhost proftpd-1.3.0rc3]# make install<br \/>\n\u00a0<br \/>\n\u5982\u679c\u6ca1\u6709\u9519\u8bef\u53d1\u751f\uff0c\u8fd9\u6837\u5c31\u5b89\u88c5\u597d\u4e86\uff0c\u60a8\u53ef\u4ee5\u5728 \/opt\/\u76ee\u5f55\u4e0b\u770b\u5230\u4e00\u4e2a\/opt\/proftpd \u7684\u76ee\u5f55\uff1b<\/p>\n<p>[root@localhost proftpd-1.3.0rc3]# ls -ld \/opt\/proftpd\/<br \/>\ndrwxr-xr-x 8 root root 4096 1\u6708 2 09:37 \/opt\/proftpd<br \/>\n\u00a0<br \/>\n<strong>3\u3001ProFTPD\u8ba4\u8bc1\u4e2d\u7684MySQL\u6570\u636e\u5e93<\/strong><\/p>\n<p>3.1\u3001\u521b\u5efa\u4e00\u4e2aProFTPD\u7684\u6570\u636e\u5e93proftpd\uff1b<\/p>\n<p>\u9996\u5148\u60a8\u5e94\u8be5\u4f1a\u628aMySQL\u6570\u636e\u5e93\u670d\u52a1\u5668\u6253\u5f00\uff0c\u4ee5MySQL\u7684\u8d85\u7ea7\u7ba1\u7406\u5458root\u8fdb\u5165\u521b\u5efa\u540d\u4e3aproftpd\u7684\u6570\u636e\u5e93\uff1b<\/p>\n<p>[root@localhost ~]# mysql -uroot -p<br \/>\nEnter password: \u6ce8\uff1a\u5728\u8fd9\u91cc\u8bf7\u60a8\u8f93\u5165MySQL\u7684\u7ba1\u7406\u5bc6\u7801\uff1b<br \/>\nWelcome to the MySQL monitor. Commands end with ; or \\g.<br \/>\nYour MySQL connection id is 41 to server version: 4.1.11<br \/>\nType 'help;' or '\\h' for help. Type '\\c' to clear the buffer.<br \/>\nmysql&gt;create database proftpd;<br \/>\nmysql&gt;Grant select,insert,update,delete,create,drop,index,alter,create temporary tables,lock tables on proftpd.* to proftpd@localhost Identified by \"123456\";<br \/>\nmysql&gt;quit<br \/>\n\u00a0<br \/>\n\u8bf4\u660e\uff1a<\/p>\n<p>create database proftpd; \u8fd9\u884c\u662f\u521b\u5efa\u540d\u4e3aproftpd\u7684\u6570\u636e\u5e93\uff1b<br \/>\nGrant \u8fd9\u884c\u662f\u4e3aproftpd \u6570\u636e\u5e93\u6388\u6743\uff0c\u8ba9\u7528\u6237\u540d\u4e3aproftpd\uff0c\u5bc6\u7801\u4e3a123456\uff08\u8fd9\u53ea\u662f\u4e00\u4e2a\u4f8b\u5b50\uff0c\u5bc6\u7801\u81ea\u5df1\u5b9a\u4e49\uff09\uff0c\u8fd9\u4e2a\u7528\u6765\u7ba1\u7406proftpd\u8fd9\u4e2a\u6570\u636e\u5e93\uff1b<br \/>\nquit \u8fd9\u884c\u662f\u9000\u51famysql\u754c\u9762\uff1b<\/p>\n<p>3.2\u3001\u5bfc\u5165proftpd\u6570\u636e\u5e93\uff1b<\/p>\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u73b0\u6210\u7684\u6570\u636e\u5e93\uff0c\u4f60\u53ea\u9700\u8981\u5bfc\u5165\u5c31\u884c\u4e86\uff0c\u6bd4\u8f83\u7b80\u5355\uff1b\u628a\u4e0b\u9762\u7684\u4ee3\u7801\u62f7\u8d1d\u4e0b\u6765\uff0c\u7136\u540e\u53e6\u5b58\u4e3a proftpd.sql\uff1b\u7136\u540e\u901a\u8fc7\u4e0b\u9762\u7684\u547d\u4ee4\u6765\u5bfc\u5165\uff1b<\/p>\n<p>[root@localhost ~]# mysql -uproftpd -p proftpd &lt;proftpd.sql<br \/>\nEnter password: \u5728\u8fd9\u91cc\u8f93\u5165proftpd \u6570\u636e\u5e93\u7ba1\u7406\u5458proftpd \u7684\u5bc6\u7801\uff0c\u6211\u4eec\u524d\u9762\u4e3e\u4f8b\u662f123456\uff0c\u4ee5\u4f60\u8bbe\u7f6e\u7684\u4e3a\u51c6\uff1b<br \/>\n\u00a0<\/p>\n<p>\u4e0b\u9762\u662fproftpd\u7684\u6570\u636e\u5e93\uff0c\u60a8\u53ef\u4ee5\u62f7\u8d1d\u4e0b\u6765\uff0c\u53e6\u5b58\u4e3a proftpd.sql \uff0c\u7136\u540e\u7528\u4e0a\u9762\u7684\u547d\u4ee4\u6765\u5bfc\u5165\uff1b<\/p>\n<p>--<br \/>\n-- \u6570\u636e\u5e93: `proftpd`<br \/>\n--<\/p>\n<p>-- --------------------------------------------------------<\/p>\n<p>--<br \/>\n-- \u8868\u7684\u7ed3\u6784 `ftpgroups`<br \/>\n--<\/p>\n<p>CREATE TABLE `ftpgroups` (<br \/>\n\u00a0 `groupname` varchar(30) NOT NULL default '',<br \/>\n\u00a0 `gid` int(11) NOT NULL default '1000',<br \/>\n\u00a0 `members` varchar(255) NOT NULL default '',<br \/>\n\u00a0 KEY `groupname` (`groupname`)<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=utf8;<\/p>\n<p>-- --------------------------------------------------------<\/p>\n<p>--<br \/>\n-- \u8868\u7684\u7ed3\u6784 `ftpusers`<br \/>\n--<\/p>\n<p>CREATE TABLE `ftpusers` (<br \/>\n\u00a0 `userid` varchar(30) NOT NULL default '',<br \/>\n\u00a0 `passwd` varchar(80) NOT NULL default '',<br \/>\n\u00a0 `uid` int(10) unsigned NOT NULL default '1000',<br \/>\n\u00a0 `gid` int(10) unsigned NOT NULL default '1000',<br \/>\n\u00a0 `homedir` varchar(255) NOT NULL default '',<br \/>\n\u00a0 `shell` varchar(255) NOT NULL default '\/sbin\/nologin',<br \/>\n\u00a0 `count` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `host` varchar(30) NOT NULL default '',<br \/>\n\u00a0 `lastlogin` varchar(30) NOT NULL default '',<br \/>\n\u00a0 PRIMARY KEY\u00a0 (`userid`),<br \/>\n\u00a0 UNIQUE KEY `userid` (`userid`),<br \/>\n\u00a0 KEY `userid_2` (`userid`)<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=utf8;<\/p>\n<p>--<br \/>\n-- \u5bfc\u51fa\u8868\u4e2d\u7684\u6570\u636e `ftpusers`<br \/>\n--<\/p>\n<p>INSERT INTO `ftpusers` VALUES ('test', 'test', 1000, 1000, '\/home\/test', '\/sbin\/nologin', 0, '', '');<\/p>\n<p>-- --------------------------------------------------------<\/p>\n<p>--<br \/>\n-- \u8868\u7684\u7ed3\u6784 `quotalimits`<br \/>\n--<\/p>\n<p>CREATE TABLE `quotalimits` (<br \/>\n\u00a0 `name` varchar(30) NOT NULL default '',<br \/>\n\u00a0 `quota_type` enum('user','group','class','all') NOT NULL default 'user',<br \/>\n\u00a0 `per_session` enum('false','true') NOT NULL default 'false',<br \/>\n\u00a0 `limit_type` enum('soft','hard') NOT NULL default 'soft',<br \/>\n\u00a0 `bytes_in_avail` float NOT NULL default '0',<br \/>\n\u00a0 `bytes_out_avail` float NOT NULL default '0',<br \/>\n\u00a0 `bytes_xfer_avail` float NOT NULL default '0',<br \/>\n\u00a0 `files_in_avail` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `files_out_avail` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `files_xfer_avail` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 PRIMARY KEY\u00a0 (`name`)<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=utf8;<\/p>\n<p>-- --------------------------------------------------------<\/p>\n<p>--<br \/>\n-- \u8868\u7684\u7ed3\u6784 `quotatallies`<br \/>\n--<\/p>\n<p>CREATE TABLE `quotatallies` (<br \/>\n\u00a0 `name` varchar(30) NOT NULL default '',<br \/>\n\u00a0 `quota_type` enum('user','group','class','all') NOT NULL default 'user',<br \/>\n\u00a0 `bytes_in_used` float NOT NULL default '0',<br \/>\n\u00a0 `bytes_out_used` float NOT NULL default '0',<br \/>\n\u00a0 `bytes_xfer_used` float NOT NULL default '0',<br \/>\n\u00a0 `files_in_used` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `files_out_used` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `files_xfer_used` int(10) unsigned NOT NULL default '0'<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=utf8;<\/p>\n<p><strong>4\u3001ProFTPD\u7684\u914d\u7f6e\u6587\u4ef6proftpd.conf<\/strong><br \/>\n\u00a0<br \/>\n\u5728\u6211\u4eec\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0cProFTPD\u7684\u914d\u7f6e\u6587\u4ef6\u5728\/opt\/proftpd\/etc\u76ee\u5f55\u4e2d\uff0c\u5c31\u662fproftpd.conf\u6587\u4ef6\uff1b\u60a8\u53ef\u4ee5\u628a\u5b83\u6539\u540d\u5907\u4efd\uff1b<\/p>\n<p>[root@localhost ~]# cd \/opt\/proftpd\/etc\/<br \/>\n[root@localhost etc]# mv proftpd.conf proftpd.confBAK<br \/>\n\u00a0<br \/>\n\u7136\u540e\u518d\u65b0\u5efa\u4e00\u4e2a proftpd.conf \u6587\u4ef6\uff0c\u5185\u5bb9\u5982\u4e0b\uff1b\u60a8\u53ef\u4ee5\u5bf9\u8fd9\u4e2a\u6587\u4ef6\u8fdb\u884c\u76f8\u5e94\u7684\u8c03\u6574\uff1b\u5176\u4e2d#\u53f7\u90e8\u4efd\u5c31\u662f\u6ce8\u6389\u7684\uff0c\u4e0d\u4f1a\u751f\u6548\uff1b\u6ce8\u610f\u4e00\u4e0bMySQL\u8fde\u63a5\u6570\u636e\u5e93\u90e8\u4efd\uff1b\u53e6\u5916\u5982\u679c\u60a8\u4e0d\u662f\u628aProFTPD\u5b89\u88c5\u5728\u4e86\/opt\/proftpd\u76ee\u5f55\u4e0b\uff0c\u4e00\u4e9b\u4e1c\u897f\u4e5f\u662f\u9700\u8981\u8c03\u6574\u7684\uff1b\u81ea\u5df1\u770b\u7740\u529e\u5427\uff1b<\/p>\n<p># This is a basic ProFTPD configuration file (rename it to<br \/>\n# 'proftpd.conf' for actual use. It establishes a single server<br \/>\n# and a single anonymous login. It assumes that you have a user\/group<br \/>\n# \"nobody\" and \"ftp\" for normal operation and anon.<\/p>\n<p>ServerName \"Honghe FTP Server\" #\u8fd9\u662f\u60a8\u7684FTP\u670d\u52a1\u5668\u7684\u540d\u5b57\uff0c\u81ea\u5df1\u5199\u5b9a<br \/>\nServerType standalone<br \/>\n#ServerAdmin xxxxx@xxxxxxxxxxx.com #\u8fd9\u662f\u7ba1\u7406\u5458\u4fe1\u7bb1\uff0c\u81ea\u5df1\u6765\u5199\uff1b<br \/>\nDefaultServer On<\/p>\n<p>ServerIdent off<br \/>\nTimesGMT off<\/p>\n<p># Display message<br \/>\n#DisplayLogin \/opt\/proftpd\/etc\/ftplogin.msg<br \/>\n#DisplayConnect \/net\/messages\/ftp.pre<br \/>\n#DisplayFirstChdir index.txt<\/p>\n<p># Port 21 is the standard FTP port.<br \/>\nPort 21<\/p>\n<p># Limit users to login by username<br \/>\n&lt;Limit LOGIN&gt;<br \/>\nAllowAll<br \/>\n&lt;\/Limit&gt;<\/p>\n<p># Umask 022 is a good standard umask to prevent new dirs and files<br \/>\n# from being group and world writable.<br \/>\nUmask 022<\/p>\n<p># Limit login attempts<br \/>\n#<br \/>\nMaxLoginAttempts 5<\/p>\n<p># Set the maximum number of seconds a data connection is allowed<br \/>\n# to \"stall\" before being aborted.<br \/>\nTimeoutStalled 600<br \/>\nTimeoutLogin 900<br \/>\nTimeoutIdle 600<br \/>\nTimeoutNoTransfer 600<\/p>\n<p># Set the user and group under which the server will run.<br \/>\nUser nobody<br \/>\nGroup nobody<\/p>\n<p># To cause every FTP user to be \"jailed\" (chrooted) into their home<br \/>\n# directory, uncomment this line.<br \/>\nDefaultRoot ~<\/p>\n<p># Users needs a valid shell<br \/>\n#<br \/>\nRequireValidShell off<\/p>\n<p># Performance: skip DNS resolution when we process the logs...<br \/>\nUseReverseDNS off<\/p>\n<p># Turn off Ident lookups<br \/>\nIdentLookups off<\/p>\n<p># Restart session support<br \/>\n#<br \/>\nAllowStoreRestart on<br \/>\nAllowRetrieveRestart on<\/p>\n<p>#-------- load sql.mod for mysql authoritative --------#<br \/>\nSQLConnectInfo proftpd@localhost proftpd 123456<\/p>\n<p>#\u6ce8\uff1a\u4e0a\u9762\u8fd9\u884c\u662fMySQL\u8fde\u63a5\u670d\u52a1\u5668\u90e8\u4efd\uff0c\u81ea\u5df1\u6839\u636e\u60c5\u51b5\u6765\u6539\u4e00\u6539\uff1b<br \/>\nSQLAuthTypes Backend Plaintext<br \/>\nSQLUserInfo ftpusers userid passwd uid gid homedir shell<br \/>\nSQLGroupInfo ftpgroups groupname gid members<br \/>\nSQLAuthenticate users groups<br \/>\nSQLNegativeCache on<br \/>\nSQLHomedirOnDemand on<br \/>\nSQLLogFile \/var\/log\/proftpd.sql.log<br \/>\nSQLNamedQuery getcount SELECT \"count from ftpusers where userid='%u'\"<br \/>\nSQLNamedQuery getlastlogin SELECT \"lastlogin from ftpusers where userid='%u'\"<br \/>\nSQLNamedQuery updatelogininfo UPDATE \"count=count+1,host='%h',lastlogin=current_timestamp() WHERE userid='%u'\" ftpusers<br \/>\nSQLShowInfo PASS \"230\" \"You've logged on %{getcount} times, last login at %{getlastlogin}\"<br \/>\nSQLLog PASS updatelogininfo<\/p>\n<p>#--------- load qudes.mod for Quota limit --------#<br \/>\nQuotaDirectoryTally on<br \/>\nQuotaDisplayUnits \"Mb\"<br \/>\nQuotaEngine on<\/p>\n<p>#QuotaLog \/var\/log\/proftpd.quota.log<br \/>\nQuotaShowQuotas on<br \/>\nSQLNamedQuery get-quota-limit SELECT \"name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits WHERE name = '%{0}' AND quota_type = '%{1}'\"<br \/>\nSQLNamedQuery get-quota-tally SELECT \"name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'\"<br \/>\nSQLNamedQuery update-quota-tally UPDATE \"bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'\" quotatallies<br \/>\nSQLNamedQuery insert-quota-tally INSERT \"%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}\" quotatallies<br \/>\nQuotaLimitTable sql:\/get-quota-limit<br \/>\nQuotaTallyTable sql:\/get-quota-tally\/update-quota-tally\/insert-quota-tally<\/p>\n<p># Logging options<br \/>\n# Debug Level<br \/>\n# emerg, alert, crit (empfohlen), error, warn. notice, info, debug<br \/>\n#<br \/>\nSyslogLevel emerg<br \/>\nSystemLog \/var\/log\/proftpd.system.log<br \/>\nTransferLog \/var\/log\/proftpd.xferlog<\/p>\n<p># Some logging formats<br \/>\n#<br \/>\nLogFormat default \"%h %l %u %t \\\"%r\\\" %s %b\"<br \/>\nLogFormat auth \"%v [%P] %h %t \\\"%r\\\" %s\"<br \/>\nLogFormat write \"%h %l %u %t \\\"%r\\\" %s %b\"<\/p>\n<p># Log file\/dir access<br \/>\n# ExtendedLog \/var\/log\/proftpd.access_log WRITE,READ write<br \/>\n# Record all logins<br \/>\nExtendedLog \/var\/log\/proftpd.auth_log AUTH auth<\/p>\n<p># Paranoia logging level....<br \/>\nExtendedLog \/var\/log\/proftpd.paranoid_log ALL default<\/p>\n<p>#\u6ce8\uff1b\u4e0a\u9762\u51e0\u884c\u662f\u5b58\u653elog\u7684\u8bbe\u7f6e\uff0c\u4e0d\u5fc5\u6539\u52a8\u4e5f\u884c\uff1b\u67e5\u770blog\u5c31\u5230\u4e0a\u9762\u76f8\u5e94\u7684\u6587\u4ef6\u770b\u5427\uff1b<br \/>\n# To prevent DoS attacks, set the maximum number of child processes<br \/>\n# to 30. If you need to allow more than 30 concurrent connections<br \/>\n# at once, simply increase this value. Note that this ONLY works<br \/>\n# in standalone mode, in inetd mode you should use an inetd server<br \/>\n# that allows you to limit maximum number of processes per service<br \/>\n# (such as xinetd).<br \/>\nMaxInstances 300 #\u6ce8\u6700\u591a30\u4e2aip\u540c\u65f6\u767b\u5f55\u4f7f\u7528ftp;<\/p>\n<p># Maximum clients with message<br \/>\n#MaxClients 2 \"Sorry, max %m users -- try again later\"<br \/>\nMaxClientsPerHost 2 \"Sorry, only 2 session for one host\"<br \/>\n#\u6ce8\u6bcf\u4e2aip\uff0c\u53ea\u80fd\u4e24\u4e2a\u7ebf\u7a0b\u7a0b\uff0c\u8bf7\u81ea\u5df1\u8c03\u6574\uff1b<\/p>\n<p># Normally, we want files to be overwriteable.<br \/>\n&lt;Directory \/&gt;<br \/>\n\u00a0 AllowOverwrite on<br \/>\n&lt;\/Directory&gt;<\/p>\n<p>RootLogin off<br \/>\nRequireValidShell off<\/p>\n<p># alphanumeric characters for uploads (and not shell code...)<br \/>\n#PathAllowFilter \"^[a-zA-Z0-9_.-]()'+$\"<br \/>\n#PathAllowFilter \"^[a-zA-Z0-9 _.-]()'+$\"<br \/>\n# We don't want .ftpaccess or .htaccess files to be uploaded<br \/>\n#PathDenyFilter \"(\\.ftp)|(\\.ht)[a-z]+$\"<br \/>\n#pathDenyFilter \"\\.ftp[a-z]+$\"<br \/>\n# Do not allow to pass printf-Formats (security! see documentation!):<br \/>\n#AllowFilter \"^[a-zA-Z0-9@~ \/,_.-]*$\"<br \/>\n#DenyFilter \"%\"<\/p>\n<p><strong>5\u3001\u7cfb\u7edf\u7528\u6237\u548c\u7528\u6237\u7ec4ftp\u7684UID\u548cGID\u7684\u8c03\u6574<\/strong><\/p>\n<p>\u7531\u4e8e\u6211\u4eec\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u628aftp\u7684\u7528\u6237\u548c\u7528\u6237\u7ec4\u7684UID\u548cGID\u90fd\u8bbe\u7f6e\u4e3a\u4e861000\uff1b\u6240\u4ee5\u6211\u4eec\u5f97\u8c03\u6574\u4e00\u4e0b\/etc\/passwd \u548c\/etc\/group\u4e2d\u6709\u5173ftp\u7528\u6237\u548c\u7528\u6237\u7ec4\u7684\u884c\uff1b\u628aUID\u548cGID\u90fd\u6539\u4e3a1000\uff1b<\/p>\n<p>\u60a8\u53ef\u4ee5\u5728\/etc\/passwd \u4e2d\u627e\u5230 ftp\u7528\u6237\u4e00\u884c\uff0c\u6bd4\u5982\u7c7b\u4f3c\u4e0b\u9762\u8fd9\u884c<\/p>\n<p>ftp:x:14:50:FTP User:\/var\/ftp:\/sbin\/nologin<\/p>\n<p>\u5728\u8fd9\u884c\u4e2d\uff0c14\u662fftp\u7528\u6237\u7684UID,\u6211\u4eec\u8981\u6539\u4e3a1000\uff0c50\u4e3aftp\u7528\u6237\u7ec4\u7684GID\uff0c\u4e5f\u6539\u4e3a1000,\u5176\u5b83\u7684\u53ef\u4ee5\u4e0d\u53d8\uff1b\u4e5f\u5c31\u662f<\/p>\n<p>ftp:x:1000:1000:FTP User:\/var\/ftp:\/sbin\/nologin<\/p>\n<p>\u63a5\u7740\u6211\u4eec\u518d\u627e\u5230 \/etc\/group \uff1b\u5728\u8fd9\u4e2a\u6587\u4ef6\u4e2d\u627e\u5230\u4e00\u884c\uff0c\u7c7b\u4f3c\u5982\u4e0b\u7684\uff1b<\/p>\n<p>ftp:x:50:<\/p>\n<p>\u628a\u8fd9\u884c\u4e2d\u768450\u6539\u4e3a1000\uff1b\u4e5f\u5c31\u662f\u8fd9\u6837\u7684\uff1b<\/p>\n<p>ftp:x:1000:<\/p>\n<p><strong>6\u3001\u542f\u52a8ProFTPD\uff0c\u5e76\u6d4b\u8bd5<br \/>\n<\/strong>\u00a0<br \/>\n[root@localhost ~]# \/opt\/proftpd\/sbin\/proftpd<br \/>\n[root@localhost ~]# pgrep proftpd<br \/>\n17965<\/p>\n<p>\u8bf4\u660e\uff1a\u4e0a\u9762\u5c31\u628aproftpd \u542f\u52a8\u8d77\u6765\u4e86\uff1b\u6211\u4eec\u901a\u8fc7pgrep \u6765\u67e5\u770b\u662f\u5426\u6709ProFTPD\u7684\u8fdb\u7a0b\uff0c\u67e5\u770b\u5f97\u77e5\u5df2\u7ecf\u6709\u4e86\uff1b\u8bc1\u660e\u670d\u52a1\u5668\u5df2\u7ecf\u542f\u52a8\u3002\u6211\u4eec\u8fdb\u5165\u6d4b\u8bd5\u9636\u6bb5\uff1b<\/p>\n<p>\u6d4b\u8bd5\uff1a\u6d4b\u8bd5\u5e10\u53f7\u662ftest\uff0c\u5bc6\u7801\u662ftest\uff1b\u60a8\u53ef\u4ee5\u7528ftp\u547d\u4ee4\u6765\u6d4b\u8bd5\uff0c\u4e5f\u53ef\u4ee5\u7528lftp\u6765\u6d4b\u8bd5\uff0c\u4e5f\u53ef\u4ee5\u7528gftp\u6765\u6d4b\u8bd5\uff1b\u627e\u4e00\u4e2aFTP\u5ba2\u6237\u7aef\u5c31\u884c\uff1b\u8fd9\u4e2atest\u5e10\u53f7\u662f\u600e\u4e48\u6765\u7684\u5462\u3002\u56de\u5934\u770b\u4e00\u4e0bproftpd.sql\u90a3\u6bb5\u4ee3\u7801\u4e2d\uff0c\u662f\u5426\u6709\u4e0b\u9762\u8fd9\u884c\uff1b<\/p>\n<p>INSERT INTO `ftpusers` VALUES ('test', 'test', 1000, 1000, '\/home\/test', '\/sbin\/nologin',0,'','');<br \/>\n\u00a0<br \/>\n\u8fd9\u662f\u6211\u5728\u5199\u6587\u6863\u65f6\uff0c\u6dfb\u52a0\u7684\u4e00\u4e2a\u6d4b\u8bd5\u5e10\u53f7\uff1b\u53ea\u8981\u60a8\u628aproftpd.sql\u6587\u4ef6\u5bfc\u5165\u4e86\uff0c\u5c31\u6709\u8fd9\u4e2a\u5e10\u53f7\uff1b\u60a8\u5f53\u7136\u4e5f\u53ef\u4ee5\u5220\u9664\u5b83\uff1b\u4e0a\u9762\u8fd9\u884c\u8bf4\u7684\u662f\u5728ftpusers\u7684\u8868\u4e2d\uff0c\u6dfb\u52a0\u4e00\u4e2a\u5f55\uff1b\u4e5f\u5c31\u662fftp\u7528\u6237\u7684\u8bb0\u5f55\uff1b\u5728\u672c\u6587\u7684\u6700\u4e0b\u9762\u6709\u8bf4\u660e\u5982\u4f55\u901a\u8fc7MySQL\u6765\u7ba1\u7406\u5e10\u53f7\uff1b\u5728\u8fd9\u91cc\u6211\u4eec\u53ea\u662f\u6d4b\u8bd5\u662f\u4e0d\u662fFTP\u80fd\u7528\u4e86\uff1b<\/p>\n<p>\u5728\u9ed8\u8ba4\u7684\u60c5\u51b5\u4e0b\uff0ctest\u7528\u6237\u7684\u5bb6\u76ee\u5f55\u662f\u5728\/home\/test\uff0c\u5bc6\u7801\u662ftest\uff1b\u800c\/home\/test\u662f\u5f53\u60a8\u7b2c\u4e00\u6b21\u4ee5\u7528\u6237test\u767b\u5f55\u65f6\uff0c\u7cfb\u7edf\u81ea\u52a8\u5efa\u7acb\u7684\uff1b\u8fd9\u4e9b\u90fd\u81ea\u52a8\u7684\uff1b<\/p>\n<p>\u5982\u679c\u60a8\u7528ftp\u547d\u4ee4\u8fde\u63a5<\/p>\n<p>[root@localhost home]# ftp localhost<br \/>\nConnected to localhost.localdomain.<br \/>\n220 ProFTPD 1.3.0rc3 Server (My TestFTP) [127.0.0.1]<br \/>\n500 AUTH not understood<br \/>\n500 AUTH not understood<br \/>\nKERBEROS_V4 rejected as an authentication type<br \/>\nName (localhost:beinan): test \u6ce8\uff1a\u7528\u6237\u540d<br \/>\n331 Password required for test. \u6ce8\uff1a\u5bc6\u7801<br \/>\nPassword:<br \/>\n230-You've logged on 5 times, last login at 2006-01-02 12:50:27<br \/>\n230 User test logged in.<br \/>\nRemote system type is UNIX.<br \/>\nUsing binary mode to transfer files.<br \/>\nftp&gt; ls \u6ce8\uff1als \u67e5\u770b\uff1b<br \/>\n227 Entering Passive Mode (127,0,0,1,128,31).<br \/>\n150 Opening ASCII mode data connection for file list<br \/>\n226 Transfer complete.<br \/>\nftp&gt; mkdir mytestdir \u6ce8\uff1a\u521b\u5efa\u76ee\u5f55\u770b\u662f\u5426\u6210\u529f\uff1b<br \/>\n257 \"\/mytestdir\" - Directory successfully created<br \/>\nftp&gt; dir \u6ce8\uff1a\u67e5\u770b\u662f\u5426\u6709mytestdir \u76ee\u5f55\uff1b<br \/>\n227 Entering Passive Mode (127,0,0,1,128,32).<br \/>\n150 Opening ASCII mode data connection for file list<br \/>\ndrwxr-xr-x 2 test ftp 4096 Jan 2 04:53 mytestdir<br \/>\n226 Transfer complete.<br \/>\nftp&gt;<br \/>\n\u00a0<br \/>\n\u5982\u679c\u60a8\u7528lftp \u6765\u8fde\u63a5\u6d4b\u8bd5<\/p>\n<p>[root@localhost home]# lftp test:test@localhost \u6ce8\uff1a\u767b\u5f55\uff1b<br \/>\nlftp test@localhost:~&gt; ls \u6ce8\uff1a\u5217\u76ee\u5f55\uff1b<br \/>\nlftp test@localhost:\/&gt; put \/home\/beinan\/fcitx-3.2-051108.tar.bz2<br \/>\n4164490 bytes transferred \u6ce8\uff1a\u4e0a\u4f20\u6d4b\u8bd5\uff1b<br \/>\nlftp test@localhost:\/&gt; ls \u6ce8\uff1a\u67e5\u770b\u662f\u5426\u6210\u529f\uff1bOK\u6210\u529f<br \/>\n-rw-r--r-- 1 test ftp 4164490 Jan 2 05:03 fcitx-3.2-051108.tar.bz2<br \/>\n\u00a0<br \/>\n\u8bf4\u660e\uff1a<\/p>\n<p>\u5982\u679c\u60a8\u60f3\u8fdc\u7a0b\u8fde\u63a5\uff0c\u8bf7\u628alocalhost\u6539\u4e3a\u5b9e\u9645ip\u5730\u5740\uff0c\u6bd4\u5982\u6211\u7684\u673a\u5668\u5728\u672c\u5730\u7f51\u662f192.168.1.5\uff0c\u90a3\u5c31\u628alocalhost\u6539\u4e3a192.168.1.5\uff1b\u5982\u679c\u60a8\u60f3\u5728\u516c\u7f51\u6d4b\u8bd5\uff0c\u8bf7\u628alocalhost\u6539\u4e3a\u516c\u7f51\u7684IP\u5730\u5740\uff1b<\/p>\n<p>\u8bf7\u67e5\u770b\u662f\u5426\u6709\/home\/test\u8fd9\u4e2a\u76ee\u5f55 \uff1f\u662f\u4e0d\u662fFTP\u670d\u52a1\u5668\u81ea\u5df1\u5efa\u4e86\u4e00\u4e2a\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684... ...<\/p>\n<p><strong>7\u3001\u5173\u4e8eProFTP\u7684\u670d\u52a1\u5668\u7ba1\u7406\u3001\u7528\u6237\u7ba1\u7406\u548c\u78c1\u76d8\u9650\u989d\u7ba1\u7406<\/strong><\/p>\n<p>7.1 ProFTPD \u670d\u52a1\u5668\u7684\u7ba1\u7406\uff1b<\/p>\n<p>ProFTPD\u670d\u52a1\u5668\u7684\u542f\u52a8\u7a0b\u5e8f\u662f\u5728\u5b89\u88c5\u76ee\u5f55\u7684sbin\u4e2d\uff0c\u4e5f\u5c31\u662fproftpd\uff1b\u6211\u4eec\u8fd8\u662f\u4ee5\u5b89\u88c5\u76ee\u5f55\/opt\/proftpd \u4e3a\u51c6\u6765\u8bf4\u660e\uff1b<\/p>\n<p>[root@localhost ~]# \/opt\/proftpd\/sbin\/proftpd \u6ce8\uff1a\u670d\u52a1\u5668\u7684\u542f\u52a8\uff1b<br \/>\n[root@localhost ~]# pgrep proftpd \u6ce8\uff1a\u67e5\u770b\u670d\u52a1\u5668\u662f\u4e0d\u662f\u542f\u52a8\u8d77\u6765\u4e86\uff1b\u5982\u679c\u6ca1\u6709\u8fdb\u7a0b\uff0c\u8bf4\u660e\u5931\u8d25\uff1b<br \/>\n[root@localhost ~]# pkill proftpd \u6ce8\uff1a\u6740\u6b7bproftpd\u7684\u8fdb\u7a0b\uff1b\u4e5f\u5c31\u662f\u5173\u6389\u670d\u52a1\u5668\uff1b<\/p>\n<p>\u6ce8\u610f\uff1a\u6211\u4eec\u66f4\u6539proftpd.conf\u540e\uff0c\u8981\u91cd\u542fproftpd \uff0c\u5426\u5219\u6539\u52a8\u4e0d\u4f1a\u751f\u6548\u3002\u8fd9\u65f6\u5c31\u8981\u7528\u5230pkill proftpd \uff0c\u7136\u540e\u518d\u91cd\u542fproftpd \u670d\u52a1\u5668\uff1b\u6bcf\u6b21\u6539\u52a8proftpd.conf\u90fd\u8981\u8fd9\u4e48\u505a\uff1b<\/p>\n<p>\u4e0b\u9762\u662f\u51e0\u4e2a\u67e5\u770bProFTPD\u670d\u52a1\u5668\u72b6\u6001\u7684\u547d\u4ee4\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u4e00\u4e0b\uff0c\u5177\u4f53\u7528\u6cd5\u81ea\u5df1\u5c1d\u8bd5\u5427\uff1b<\/p>\n<p>[root@localhost ~]# \/opt\/proftpd\/bin\/ftpcount<br \/>\n[root@localhost ~]# \/opt\/proftpd\/bin\/ftpwho<br \/>\n[root@localhost ~]# \/opt\/proftpd\/bin\/ftptop<br \/>\n[root@localhost ~]# \/opt\/proftpd\/bin\/ftpdctl<\/p>\n<p>7.2 \u901a\u8fc7MySQL\u6765\u7ba1\u7406FTP\u7528\u6237<\/p>\n<p>\u5728\u672c\u6587\u6863\u4e2d\uff0cProFTPD \u5bf9FTP\u7528\u6237\u662f\u901a\u8fc7MySQL\u6765\u8fdb\u884c\u7684\uff0c\u73b0\u5728\u6211\u4eec\u5206\u6790\u4e00\u4e0b\u6211\u4eec\u524d\u9762\u6240\u63d0\u5230proftpd\u6570\u636e\u5e93\uff1bftp\u6240\u6709\u7684\u7528\u6237\u90fd\u88c5\u5728ftpusers\u8fd9\u4e2a\u8868\u4e2d\uff0c\u6211\u4eec\u5148\u5206\u6790\u4e00\u4e0b\u8fd9\u4e2a\u8868\uff1b\u5206\u6790\u8fd9\u4e2a\u8868\u7684\u76ee\u7684\u662f\u6211\u4eec\u80fd\u660e\u767d\u5982\u4f55\u6dfb\u52a0\u7528\u6237\uff1b<\/p>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u4ee5proftpd \u7528\u6237\u548c\u5bc6\u7801\u767b\u5f55\u5230MySQL\uff1b\u5e76\u67e5\u770bftpusers\u8868\u7684\u7ed3\u6784\uff1b<\/p>\n<p>[root@localhost ~]# mysql -uproftpd -p<br \/>\nEnter password: \u6ce8\uff1a\u5728\u8fd9\u91cc\u8f93\u5165proftpd\u7528\u6237\u7684\u5bc6\u7801\uff1b<br \/>\nmysql&gt; \u6ce8\uff1a\u6210\u529f\u8fdb\u5165\uff1b<\/p>\n<p>mysql&gt; show databases; \u6ce8\uff1a\u67e5\u770b\u6570\u636e\u5e93\u90fd\u6709\u54ea\u4e9b\uff1b<br \/>\n+----------+<br \/>\n| Database |<br \/>\n+----------+<br \/>\n| proftpd |<br \/>\n| test |<br \/>\n+----------+<br \/>\n2 rows in set (0.00 sec)<br \/>\n\u6ce8\uff1a\u6211\u4eec\u770b\u5230\u4e86proftpd \u8fd8\u662f\u5b58\u5728\u7684\uff1b<\/p>\n<p>mysql&gt; use proftpd; \u6ce8\uff1a\u8981\u5bf9proftpd \u6570\u636e\u5e93\u8fdb\u884c\u64cd\u4f5c\uff0c\u6211\u4eec\u8981\u5148USE\uff08\u7528\uff09proftpd\u6570\u636e\u5e93\uff1b<br \/>\nmysql&gt; show tables; \u6ce8\uff1b\u6211\u4eec\u5728\u6267\u884cuse proftpd;\u540e\uff0c\u6211\u4eec\u518d\u67e5\u770bproftpd\u4e2d\u6240\u6709\u7684\u8868\uff1b<br \/>\n+-------------------+<br \/>\n| Tables_in_proftpd |<br \/>\n+-------------------+<br \/>\n| ftpgroups |<br \/>\n| ftpusers |<br \/>\n| quotalimits |<br \/>\n| quotatallies |<br \/>\n+-------------------+<br \/>\n4 rows in set (0.00 sec)<\/p>\n<p>\u6211\u4eec\u8981\u67e5\u770bftpusers \u8fd9\u4e2a\u8868\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u8981\u7528\u5230 DESCRIBE \u8fd9\u4e2a\u6307\u4ee4\uff0c\u540e\u9762\u63a5\u8868\u7684\u540d\u79f0\uff1b<\/p>\n<p>mysql&gt; DESCRIBE ftpusers;<br \/>\n+-----------+------------------+------+-----+---------------+-------+<br \/>\n| Field | Type | Null | Key | Default | Extra |<br \/>\n+-----------+------------------+------+-----+---------------+-------+<br \/>\n| userid | varchar(30) | | PRI | | |<br \/>\n| passwd | varchar(80) | | | | |<br \/>\n| uid | int(10) unsigned | | | 1000 | |<br \/>\n| gid | int(10) unsigned | | | 1000 | |<br \/>\n| homedir | varchar(255) | | | | |<br \/>\n| shell | varchar(255) | | | \/sbin\/nologin | |<br \/>\n| count | int(10) unsigned | | | 0 | |<br \/>\n| host | varchar(30) | | | | |<br \/>\n| lastlogin | varchar(30) | | | | |<br \/>\n+-----------+------------------+------+-----+---------------+-------+<br \/>\n9 rows in set (0.00 sec)<br \/>\n\u00a0<br \/>\n\u8bf4\u660e\uff1a<\/p>\n<p>userid \u5c31\u662fFTP\u7684\u7528\u6237\u540d\uff0c\u8fd9\u4e2a\u662f\u5fc5\u586b\u5199\u5b57\u6bb5\uff1b<br \/>\npasswd \u662fFTP\u7528\u6237\u7684\u5bc6\u7801\uff0c\u8fd9\u4e2a\u662f\u5fc5\u586b\u5199\u5b57\u6bb5\uff1b<br \/>\nuid\u548cgid\u5b57\u6bb5\u9ed8\u8ba4\u662f1000\uff1b<br \/>\nhomedir \u662fFTP\u7528\u6237\u7684\u5bb6\u76ee\u5f55\u653e\u5728\u54ea\u91cc\uff0c\u8981\u81ea\u5df1\u6307\u5b9a\uff1b<br \/>\nshell \u8fd9\u4e2a\u662f\u7528\u6765\u6307\u5b9a\u7528\u6237\u662f\u5426\u80fd\u767b\u5f55\u7cfb\u7edf\uff0c\u8fd9\u91cc\u9ed8\u8ba4\u7684\u662f\u4e0d\u80fd\u767b\u5f55\uff0c\u56e0\u4e3a\u662f\u865a\u62df\u7528\u6237\uff0c\u6240\u4ee5\u4e0d\u80fd\u8ba9\u865a\u62df\u7528\u6237\u6765\u767b\u5f55\u7cfb\u7edf\uff1b\u6240\u4ee5\u9ed8\u8ba4\u662f\/sbin\/nologin\uff1b<br \/>\ncount \u662f\u8bbf\u95ee\u6b21\u6570\uff0c\u9ed8\u8ba4\u662f0\uff1b<br \/>\nhost \u662f\u767b\u5f55FTP\u670d\u52a1\u5668\u7684IP\u5730\u5740\u8bb0\u5f55\uff0c\u53ef\u4ee5\u4e0d\u8bbe\u7f6e\uff1b\u670d\u52a1\u5668\u4f1a\u81ea\u5df1\u7eaa\u5f55\uff1b<br \/>\nlastlogin \u662f\u6700\u540e\u767b\u5f55\u65f6\u95f4\uff0c\u8fd9\u4e2a\u4e5f\u662f\u81ea\u52a8\u751f\u6210\uff0c\u53ef\u4ee5\u4e0d\u5fc5\u7406\u4f1a\uff1b<\/p>\n<p>\u5982\u4f55\u6dfb\u52a0\u7528\u6237\u5462\uff1f<\/p>\n<p>\u5176\u5b9e\u6dfb\u52a0\u7528\u6237\u7684\u8fc7\u7a0b\uff0c\u4e5f\u5c31\u662f\u5411proftpd \u6570\u636e\u5e93\u4e2d\u7684\u8868ftpusers\u63d2\u5165\u7eaa\u5f55\u7684\u8fc7\u7a0b\uff1b\u6211\u4eec\u4e0a\u9762\u5206\u6790\u4e86\u8868\u7684\u7ed3\u6784\uff1b\u90a3\u6211\u4eec\u5c31\u6309\u5176\u8981\u6c42\u6765\u63d2\u5165\u7528\u6237\u7eaa\u5f55\uff1b<\/p>\n<p>\u6211\u4eec\u770b\u770bftpusers\u7684\u8868\u4e2d\uff0c\u6709\u54ea\u4e9b\u7eaa\u5f55\uff1b<\/p>\n<p>mysql&gt; select * from ftpusers;<br \/>\n+--------+--------+------+------+------------+-----------+-------+-----------+---------------------+<br \/>\n| userid | passwd | uid | gid | homedir | shell | count | host | lastlogin |<br \/>\n+--------+--------+------+------+------------+-----------+-------+-----------+---------------------+<br \/>\n| test | test | 1000 | 1000 | \/home\/test | \/bin\/bash | 8 | 127.0.0.1 | 2006-01-02 13:03:10 |<br \/>\n+--------+--------+------+------+------------+-----------+-------+-----------+---------------------+<br \/>\n1 row in set (0.01 sec)<br \/>\n\u00a0<br \/>\n\u5c1d\u8bd5\u63d2\u5165\u4e00\u6761\u7eaa\u5f55<\/p>\n<p>\u6bd4\u5982\u6211\u4eec\u60f3\u52a0\u4e00\u4e2a\u7528\u6237\uff0c\u7528\u6237\u540d\u4e3atest2\uff0c\u5bc6\u7801\u4e3atest2\uff0cUID\u548cGID\u4e3a\u90fd\u4e3a1000,\u5bb6\u76ee\u5f55\u4f4d\u4e8e\/home\/test2\uff1b\u503c\u5f97\u6ce8\u610f\u7684\u662fUID\u548cGID\u7684\u53ea\u80fd\u662f1000,\u56e0\u4e3a\u6211\u4eec\u5728\u7cfb\u7edf\u7528\u6237\u8bbe\u7f6e\u4e2d\u505a\u4e86\u6539\u52a8\uff1b\u524d\u9762\u6709\u63d0\u5230\uff1b\u6211\u4eec\u6dfb\u52a0\u6240\u6709\u7684FTP\u7528\u6237UID\u548cGID\u90fd\u662f 1000\uff1b<\/p>\n<p>\u6240\u4ee5\u5982\u679c\u60a8\u6dfb\u52a0\u7528\u6237\u65f6\uff0c\u53ea\u662f\u6539\u4e00\u4e0buserid\u3001passwd\u548chomedir\u5b57\u6bb5\u5904\u5c31\u884c\u4e86\u3002\u5176\u5b83\u4e0d\u5fc5\u6539\u52a8\uff0c\u5f53\u7136\u60a8\u975e\u5e38\u6027MySQL\u4e5f\u6ca1\u6709\u4ec0\u4e48\u4e0d\u53ef\uff1b<\/p>\n<p>INSERT INTO `ftpusers` VALUES ('test2', 'test2', 1000, 1000, '\/home\/test2', '\/sbin\/nologin',0,'','');<\/p>\n<p>\u67e5\u770b\u662f\u5426\u63d2\u5165\u6210\u529f<\/p>\n<p>mysql&gt; select * from ftpusers;<br \/>\n+--------+--------+------+------+-------------+---------------+-------+-----------+---------------------+<br \/>\n| userid | passwd | uid | gid | homedir | shell | count | host | lastlogin |<br \/>\n+--------+--------+------+------+-------------+---------------+-------+-----------+---------------------+<br \/>\n| test | test | 1000 | 1000 | \/home\/test | \/bin\/bash | 8 | 127.0.0.1 | 2006-01-02 13:03:10 |<br \/>\n| test2 | test2 | 1000 | 1000 | \/home\/test2 | \/sbin\/nologin | 0 | | |<br \/>\n+--------+--------+------+------+-------------+---------------+-------+-----------+---------------------+<br \/>\n2 rows in set (0.00 sec)<\/p>\n<p>\u518d\u4e3e\u4e00\u4f8b\uff1b\u6dfb\u52a0\u4e00\u4e2a\u7528\u6237\u540d\u4e3atest3\uff0c\u5bc6\u7801\u4e3atest3 \uff0c\u5e76\u4e14\u628atest3\u7684\u5bb6\u76ee\u5f55\u653e\u5728\/opt\/test3\u4e2d\uff1b<\/p>\n<p>mysql&gt; INSERT INTO `ftpusers` VALUES ('test3', 'test3', 1000, 1000, '\/opt\/test3', '\/sbin\/nologin',0,'','');<\/p>\n<p>\u6dfb\u52a0\u597d\u540e\uff0c\u6d4b\u8bd5\u4e00\u4e0b\u7528\u6237test3\u662f\u5426\u80fd\u767b\u5f55\uff0c\u5e76\u4e14\u4e0a\u4f20\u6587\u4ef6\uff1b\u4e0b\u9762\u7684\u4f8b\u5b50\u8bc1\u660e\u662f\u6210\u529f\u7684\uff1b<\/p>\n<p>[root@localhost ~]# lftp test3:test3@localhost<br \/>\nlftp test3@localhost:~&gt; ls<br \/>\nlftp test3@localhost:\/&gt; put \/home\/beinan\/fcitx-3.2-051108.tar.bz2<br \/>\n4164490 bytes transferred<br \/>\nlftp test3@localhost:\/&gt; ls<br \/>\n-rw-r--r-- 1 test3 ftp 4164490 Jan 2 06:08 fcitx-3.2-051108.tar.bz2<br \/>\nlftp test3@localhost:\/&gt;<\/p>\n<p>\u5982\u679c\u4f60\u60f3\u5220\u9664\u4e00\u4e2a\u7528\u6237\uff0c\u60a8\u53ef\u4ee5\u7528 MySQL\u7684delete \u6307\u4ee4\uff1b\u6bd4\u5982\u6211\u60f3\u5220\u9664test2\u8fd9\u4e2a\u7528\u6237\uff1b\u53ef\u4ee5\u7528.....<\/p>\n<p>mysql&gt; DELETE FROM ftpusers WHERE userid=\"test2\";<\/p>\n<p>\u5982\u679c\u60f3\u66f4\u65b0\u4e00\u6761\u7528\u6237\u7eaa\u5f55\uff0c\u6bd4\u5982test\u7528\u6237\u5bc6\u7801\u5b57\u6bb5\uff1b<\/p>\n<p>mysql&gt; update ftpusers set passwd=\"aaasss\" where userid=\"test\";<\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4\uff0c\u4f60\u60f3\u66f4\u65b0\u7528\u6237\u7eaa\u5f55\u7684\u90a3\u4e2a\u5b57\u6bb5\u5c31\u66f4\u65b0\u4ec0\u4e48\uff0c\u4e0b\u9762\u516c\u5f0f\uff1b<\/p>\n<p>mysql&gt;update \u6570\u636e\u8868 set \u5b57\u6bb5=\"\u8d4b\u503c\" where \u5173\u5065\u5b57\u6bb5=\"\u5b57\u6bb5\u503c\";<\/p>\n<p>\u5728\u8fd9\u91cc\u5173\u5065\u5b57\u6bb5\u662f\u552f\u4e00\u7684\uff0c\u8fd9\u6837\u624d\u80fd\u627e\u5230\u4f60\u6240\u8981\u66f4\u65b0\u7684\u7eaa\u5f55\uff0c\u8868\u8fbe\u4e0d\u592a\u597d\uff1b\u5982\u679c\u4e0d\u592a\u719f\u6089\uff0c\u6162\u6162\u7406\u89e3\u5427\uff1b\u6211\u4e5f\u4e0d\u4f1aMySQL\uff1b\u5475\uff0c\u96be\u4e3a\u4eba\u5e08...... \u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u8fd8\u662f\u628auserid \u505a\u4e3a\u5173\u5065\u5b57\u6bb5\uff0c\u56e0\u4e3a\u53ea\u6709\u8fd9\u4e2a\u5b57\u6bb5\u624d\u662f\u552f\u4e00\u7684\uff1b<\/p>\n<p>\u518d\u6bd4\u5982\uff0c\u6211\u4eec\u60f3\u66f4\u65b0\u7528\u6237\u7684\u5bb6\u76ee\u5f55\uff0c\u6bd4\u5982\u6211\u60f3\u628atest\u7528\u6237\u7684\u5bb6\u76ee\u5f55\u6539\u5230 \/opt\/test\uff1b<\/p>\n<p>mysql&gt; select userid,homedir from ftpusers where userid=\"test\";<br \/>\n+--------+-----------+<br \/>\n| userid | homedir |<br \/>\n+--------+-----------+<br \/>\n| test | \/home\/test |<br \/>\n+--------+-----------+<\/p>\n<p>\u901a\u8fc7\u4e0a\u9762\u7684\uff0c\u6211\u4eec\u5f97\u77e5test\u76ee\u524d\u7684\u5bb6\u76ee\u5f55\u5728\/home\/test\uff0c\u4e0b\u9762\u6211\u4eec\u6765\u66f4\u6539\u5230\/opt\/test\uff1b<\/p>\n<p>mysql&gt; update ftpusers set homedir=\"\/opt\/test\" where userid=\"test\";<br \/>\nQuery OK, 1 row affected (0.00 sec)<br \/>\nRows matched: 1 Changed: 1 Warnings: 0<br \/>\nmysql&gt; select userid,homedir from ftpusers where userid=\"test\";<br \/>\n+--------+-----------+<br \/>\n| userid | homedir |<br \/>\n+--------+-----------+<br \/>\n| test | \/opt\/test |<br \/>\n+--------+-----------+<\/p>\n<p>7.3 ProFTPD \u7528\u6237\u78c1\u76d8\u9650\u989d\u7ba1\u7406\uff1b<\/p>\n<p>\u6211\u4eec\u5728\u524d\u9762\u6240\u5bfc\u5165\u7684proftpd \u6570\u636e\u5e93\u4e2d\uff0c\u6709\u8fd9\u6837\u4e00\u6bb5\uff1b<\/p>\n<p>CREATE TABLE `quotalimits` (<br \/>\n\u00a0 `name` varchar(30) default NULL,<br \/>\n\u00a0 `quota_type` enum('user','group','class','all') NOT NULL default 'user',<br \/>\n\u00a0 `per_session` enum('false','true') NOT NULL default 'false',<br \/>\n\u00a0 `limit_type` enum('soft','hard') NOT NULL default 'soft',<br \/>\n\u00a0 `bytes_in_avail` float NOT NULL default '0',<br \/>\n\u00a0 `bytes_out_avail` float NOT NULL default '0',<br \/>\n\u00a0 `bytes_xfer_avail` float NOT NULL default '0',<br \/>\n\u00a0 `files_in_avail` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `files_out_avail` int(10) unsigned NOT NULL default '0',<br \/>\n\u00a0 `files_xfer_avail` int(10) unsigned NOT NULL default '0'<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=latin1;<\/p>\n<p>\u8bf4\u660e\uff1a<\/p>\n<p>\u4e0a\u9762\u5176\u5b9e\u5c31\u662f\u5728proftpd\u5e93\u4e2d\u521b\u5efa\u4e00\u4e2a\u8868quotalimits\uff1b\u6211\u4eec\u5728proftpd\u7684\u6570\u636e\u5e93\u4e2d\uff0c\u518d\u6765\u67e5\u770b\u4e00\u4e0bquotalimits\u8868\u7684\u7ed3\u6784\uff0c\u8fd9\u6837\u65b9\u4fbf\u6211\u4eec\u7406\u89e3\u548c\u4f7f\u7528\u78c1\u76d8\u9650\u989d\uff1b<\/p>\n<p>mysql&gt; DESCRIBE quotalimits;+------------------+------------------------------------+------+-----+---------+-------+| Field\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Null | Key | Default | Extra |+------------------+------------------------------------+------+-----+---------+-------+| name\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | varchar(30)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | YES\u00a0 |\u00a0\u00a0\u00a0\u00a0 | NULL\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || quota_type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('user','group','class','all') |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | user\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || per_session\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('false','true')\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | false\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || limit_type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('soft','hard')\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | soft\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || bytes_in_avail\u00a0\u00a0 | float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || bytes_out_avail\u00a0 | float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || bytes_xfer_avail | float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || files_in_avail\u00a0\u00a0 | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || files_out_avail\u00a0 | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || files_xfer_avail | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |+------------------+------------------------------------+------+-----+---------+-------+<br \/>\n\u8bf4\u660e\uff1b<\/p>\n<p>quotalimits<br \/>\n\u00a0\u00a0\u00a0\u00a0 name - username<br \/>\n\u00a0\u00a0\u00a0\u00a0 quota_type - user, group, class, all (we use user)<br \/>\n\u00a0\u00a0\u00a0\u00a0 per_session - true or false (we use false)<br \/>\n\u00a0\u00a0\u00a0\u00a0 limit_type - quota limit type - hard or soft (we use soft)<br \/>\n\u00a0\u00a0\u00a0\u00a0 bytes_in_avail - upload limit in bytes - allowed bytes on disk (eg diskquota)<br \/>\n\u00a0\u00a0\u00a0\u00a0 bytes_out_avail - download limit in bytes - allowed bytes a user can download<br \/>\n\u00a0\u00a0\u00a0\u00a0 bytes_xfer_avail - allowed bytes a user can transfer in\/out<br \/>\n\u00a0\u00a0\u00a0\u00a0 files_in_avail - upload limit in files - allowed number of uploaded files<br \/>\n\u00a0\u00a0\u00a0\u00a0 files_out_avail - allowed number of downloaded files<br \/>\n\u00a0\u00a0\u00a0\u00a0 files_xfer_avail - allowed number of files a user can transfer in\/out<\/p>\n<p>name \u5e94\u8be5\u8fd9\u6837\u7406\u89e3\uff0c\u65e2\u80fd\u8868\u793a\u5355\u4e2a\u7528\u6237\uff0c\u4e5f\u80fd\u8868\u793a\u7528\u6237\u7ec4\u540d\uff1b\u5982\u679c\u6211\u4eec\u5728quota_type\uff08\u9650\u989d\u7c7b\u578b\uff09\u4e2d\u4f7f\u7528group\u6765\u8ba4\u8bc1\u7684\u8bdd\uff0c\u90a3\u5c31\u5f97\u5728\u8fd9\u91cc\u8bbe\u7f6e\u7ec4\u540d\uff0c\u8fd9\u6837\u6574\u7ec4\u90fd\u5177\u6709\u7edf\u4e00\u7684\u78c1\u76d8\u9650\u989d\u7684\u7279\u6027\uff1b\u5f53\u7136\u60a8\u8981\u5728ftpgroups\u8868\u4e2d\u63d2\u5165\u7ec4\u7eaa\u5f55\uff1b\u5e76\u4e14\u5728member\u5b57\u6bb5\u4e2d\u5f97\u628a\u7528\u6237\u4e00\u4e2a\u4e00\u4e2a\u7684\u5217\u8fdb\u53bb\uff0c\u8fd9\u662f\u540e\u8bdd\u4e86\uff1b\u5148\u81ea\u5df1\u7814\u7a76\u4e00\u4e0b\uff0c\u53ea\u662f\u63d2\u5165\u7eaa\u5f55\u7684\u4e8b\uff1b\u6211\u4eec\u53ea\u8bf4\u6700\u7b80\u5355\u7684\u5355\u4e2a\u7528\u6237\u7684\u78c1\u76d8\u9650\u989d\uff1b\u9ed8\u8ba4\u503c\u53ef\u4ee5\u4e3a\u7a7aNULL\uff0c\u5982\u679c\u4e3a\u7a7a\u5219\u9488\u5bf9\u6240\u5728\u6709quota_type\u4e2d\u8bbe\u7f6e\u7684\u7c7b\u578b\uff0c\u6bd4\u5982\u5728quota_type\u4e2d\u8bbe\u7f6e\u4e3auser \uff0c\u5c31\u662f\u9488\u5bf9\u6240\u6709ftpusers \u4e2d\u7684\u7528\u6237\u8d77\u4f5c\u7528\uff1b\u5982\u679c\u662fgroup\u540d\uff0c\u4e5f\u662f\u5bf9ftpgroups \u6240\u6709\u7ec4\u4f5c\u7528\uff1b<\/p>\n<p>quota_type \u78c1\u76d8\u9650\u989d\u7c7b\u578b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\u7528\u6237\uff0c\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\u7528\u6237\u7ec4group \uff1b\u5982\u679c\u60a8\u7684name\u5199\u7684\u662f\u7528\u6237\u7ec4\uff0c\u90a3\u5728\u8fd9\u91cc\u5c31\u5f97\u8bbe\u7f6e\u4e3agroup\u6765\u8ba4\u5b9a\uff1b\u9ed8\u8ba4\u4e3auser\u8ba4\u8bc1\uff1b<\/p>\n<p>per_session \u9ed8\u8ba4\u4e3afalse\uff1b<br \/>\nlimit_type \u9ed8\u8ba4\u4e3asoft\uff1b<br \/>\nbytes_in_avail \u7528\u6237\u5360\u7528\u7a7a\u95f4\u5927\u5c0f\uff0c\u4e5f\u5c31\u662f\u5bb6\u76ee\u5f55\u7684\u7a7a\u95f4\u6700\u5927\u53ef\u4ee5\u8ba9\u7528\u6237\u5360\u7528\u591a\u5c11\uff0c\u5355\u4f4d\u662fbyte\uff1b\u9ed8\u8ba4\u4e3a0\uff0c0\u662f\u4e0d\u53d7\u9650\u5236\uff0c\u4ee5\u4e0b\u540c\u7406\uff1b<\/p>\n<p>bytes_out_avail \u6ce8\uff1b\u6240\u6709\u4e0b\u8f7d\u6587\u4ef6\u7684\u603b\u548c\uff0c\u9ed8\u8ba4\u4e3a0\uff1b<\/p>\n<p>bytes_xfer_avail \u6ce8\uff1b\u4e00\u4e2a\u7528\u6237\u4e0a\u4f20\u4e0b\u8f7d\u6d41\u91cf\u603b\u548c\uff0c\u9ed8\u8ba4\u4e3a0<\/p>\n<p>files_in_avail \u6ce8\uff1a\u9650\u5236\u4e0a\u4f20\u6587\u4ef6\u603b\u6570\uff0c\u9ed8\u8ba4\u4e3a0\uff1b<\/p>\n<p>files_out_avail \u6ce8\uff1b\u9650\u5236\u4e0b\u8f7d\u6587\u4ef6\u4e2a\u6570\u603b\u8ba1\uff0c\u9ed8\u8ba4\u4e3a0<\/p>\n<p>files_xfer_avail \u6ce8\uff1a\u5141\u8bb8\u4e0b\u8f7d\u548c\u4e0a\u4f20\u7684\u6587\u4ef6\u603b\u548c\u6211\uff0c\u9ed8\u8ba4\u4e3a0\uff1b<\/p>\n<p>\u7531\u6b64\u770b\u6765\uff0c\u6211\u4eec\u6bd4\u5982\u60f3\u8ba9test\u7528\u6237\uff0c\u7ea6\u675f\u7a7a\u95f4\u5927\u5c0f\u4e3a100M\uff0c\u5176\u5b83\u4e0d\u53d7\u9650\u5236\uff1b\u5219\u53ef\u7528\u4e0b\u9762\u7684mysql\u547d\u4ee4\u6dfb\u52a0\uff1b<\/p>\n<p>\u5148\u8ba9\u6211\u4eec\u5bf9\u7167quotalimits\u8868\u7684\u7ed3\u6784\uff0c\u7136\u540e\u6839\u636e\u8868\u7684\u7ed3\u6784\u6765\u6dfb\u52a0\uff1b<\/p>\n<p>mysql&gt; describe quotalimits;+------------------+------------------------------------+------+-----+---------+-------+| Field\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Null | Key | Default | Extra |+------------------+------------------------------------+------+-----+---------+-------+| name\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | varchar(30)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | YES\u00a0 |\u00a0\u00a0\u00a0\u00a0 | NULL\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || quota_type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('user','group','class','all') |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | user\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || per_session\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('false','true')\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | false\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || limit_type\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | enum('soft','hard')\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | soft\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || bytes_in_avail\u00a0\u00a0 | float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || bytes_out_avail\u00a0 | float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || bytes_xfer_avail | float\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || files_in_avail\u00a0\u00a0 | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || files_out_avail\u00a0 | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 || files_xfer_avail | int(10) unsigned\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |+------------------+------------------------------------+------+-----+---------+-------+10 rows in set (0.00 sec)<br \/>\n\u6dfb\u52a0\u8bb0\u5f55<\/p>\n<p>mysql&gt;insert into quotalimits VALUES ('test','user','false','soft','104857600','0','0','0','0','0');<\/p>\n<p>\u8fd0\u7b97\u516c\u5f0f\uff1a<\/p>\n<p>1Kb=1024 byte<br \/>\n1M=1024 Kb<br \/>\n100M=100x1024 Kb= 100x1024x1024 byte=104857600 byte<\/p>\n<p>\u6ce8\u610f\uff1a\u78c1\u76d8\u9650\u989d\u751f\u6548\uff0c\u5fc5\u987b\u8ba9FTP\u7528\u6237\u91cd\u65b0\u767b\u5f55\u624d\u6709\u6548\uff1b\u6bd4\u5982test\u7528\u6237\u6b63\u5728ftp\u4e0a\uff0c\u8fd9\u65f6\u8981\u5148\u9000\u51fa\uff0c\u7136\u540e\u518d\u767b\u5f55\uff0c\u8fd9\u662f\u78c1\u76d8\u9650\u989d\u5c31\u6709\u6548\u4e86\uff1b<\/p>\n<p>\u67e5\u770b\u7528\u6237\u7a7a\u95f4\u4f7f\u7528\u60c5\u51b5<\/p>\n<p>\u767b\u5f55FTP\u540e\u7528\u4e0b\u9762\u7684\u547d\u4ee4\uff1b<\/p>\n<p>quote site quota;<br \/>\n\u00a0<br \/>\n\u4e3e\u4f8b\uff1a<\/p>\n<p>lftp test@192.168.1.5:\/&gt; quote site quota;<br \/>\n200-The current quota for this session are [current\/limit]:<br \/>\n\u00a0Name: test<br \/>\n\u00a0Quota Type: User<br \/>\n\u00a0Per Session: False<br \/>\n\u00a0Limit Type: Soft<br \/>\n\u00a0\u00a0 Uploaded Mb: 19.00\/95.37<br \/>\n\u00a0\u00a0 Downloaded Mb: unlimited<br \/>\n\u00a0\u00a0 Transferred Mb: unlimited<br \/>\n\u00a0\u00a0 Uploaded files: unlimited<br \/>\n\u00a0\u00a0 Downloaded files: unlimited<br \/>\n\u00a0\u00a0 Transferred files: unlimited<br \/>\n200 Please contact xxxxx@xxxxxxxxxxx.com if these entries are inaccurate<\/p>\n<p>8\u3001\u672c\u6587\u672a\u5c3d\u4e8b\u5b9c\uff1b<\/p>\n<p>9\u3001\u5173\u4e8e\u672c\u6587<\/p>\n<p>10\u3001\u53c2\u8003\u6587\u6863<\/p>\n<p><a target=\"_blank\" href=\"http:\/\/www.khoosys.net\/single.htm?ipg=848\">Mandrake 10.1 - Proftpd + MySQL authentication + Quotas Howto<\/a><\/p>\n<p>\u53c2\u8003\uff1a<a target=\"_blank\" href=\"http:\/\/blog.csdn.net\/didostream\/archive\/2006\/02\/16\/600327.aspx\">http:\/\/blog.csdn.net\/didostream\/archive\/2006\/02\/16\/600327.aspx<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u672c\u6587\u662f\u6839\u636e\u5b9e\u8df5\u800c\u6765\uff0c\u6700\u4e3b\u8981\u662f\u5e2e\u52a9\u65b0\u624b\u77e5\u9053\u600e\u4e48\u81ea\u67b6FTP\u670d\u52a1\u5668\uff0c\u672c\u6587\u4e5f\u53ef\u4ee5\u8bf4\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4f7f\u7528\u4f8b\u5b50\uff1b\u4f46\u4e0d\u4f1a\u628a [&hellip;]<\/p>... ","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-140","post","type-post","status-publish","format-standard","hentry","category-5"],"_links":{"self":[{"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/posts\/140","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=140"}],"version-history":[{"count":0,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=\/wp\/v2\/posts\/140\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhouhonghe.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}