{"id":387,"date":"2007-11-25T18:45:22","date_gmt":"2007-11-25T10:45:22","guid":{"rendered":"http:\/\/blog.smallken.ink\/2007\/11\/25\/linux\/387.html"},"modified":"2007-11-25T18:45:22","modified_gmt":"2007-11-25T10:45:22","slug":"%e6%9e%b6%e8%a8%ad-pureftpd-with-mysql-%e8%99%9b%e6%93%acftp%e5%b8%b3%e8%99%9f-for-ubuntu-710","status":"publish","type":"post","link":"https:\/\/blog.smallken.site\/?p=387","title":{"rendered":"\u67b6\u8a2d PureFTPd With MySQL \u865b\u64ecFTP\u5e33\u865f for Ubuntu 7.10"},"content":{"rendered":"<p>\u6587\u7ae0\u7ffb\u8b6f\u65bc <a title=\"http:\/\/www.howtoforge.com\/virtual-hosting-with-pureftpd-and-mysql-ubuntu-7.10\" href=\"http:\/\/www.howtoforge.com\/virtual-hosting-with-pureftpd-and-mysql-ubuntu-7.10\">http:\/\/www.howtoforge.com\/virtual-hosting-with-pureftpd-and-mysql-ubuntu-7.10<\/a><\/p>\n<p>\u5728\u67b6\u8a2d FTP Server \u6642\u6211\u5011\u90fd\u77e5\u9053\uff0c\u8981\u65b0\u589e\u4f7f\u7528\u8005\u6642\u4e00\u822c\u5c31\u662f\u76f4\u63a5useradd\uff0c\u5728\u4f3a\u670d\u5668\u4e2d\u65b0\u589e\u4e00\u500b\u4f7f\u7528\u8005\uff0c\u9019\u6a23\u5b50\u7684\u58de\u8655\u5c31\u662f\u4e0d\u592a\u5b89\u5168\uff0c\u800c\u4e14\u5f48\u6027\u4e0d\u5927\uff0cPureFTPd with MySQL \u7684\u610f\u601d\u5c31\u662f\u4f7f\u7528MySQL\u8cc7\u6599\u5eab\u53bb\u7ba1\u7406\u4f7f\u7528\u8005\u7684\u5e33\u865f\/\u5bc6\u78bc\u8cc7\u6599\uff0c\u751a\u81f3\u53ef\u4ee5\u7ba1\u7406\u4e0a\u4e0b\u8f09\u983b\u5bec\u3001\u786c\u789f\u4f7f\u7528\u914d\u984d\u7684\u9650\u5236\uff0c\u7ba1\u7406\u4f7f\u7528\u8005\u7684\u5e33\u865f\u8b8a\u5f97\u5f88\u6709\u5f48\u6027\u3001\u5f88\u8f15\u9b06\u3002<\/p>\n<p>\u4e00\u958b\u59cb\u6211\u5011\u5148\u5207\u63db\u5230 root \u8eab\u4efd<\/p>\n<p># sudo su &#8211;<\/p>\n<p>\u5b89\u88dd mysql server,mysql client,apache2,phpmyadmin&#8230;\u9019\u4e9b\u5957\u4ef6<br \/># apt-get update<br \/># apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2<\/p>\n<p>\u5982\u679c\u4f60\u9084\u6c92\u5b89\u88dd\u904e mysql \u8ddf apache \u4f60\u6703\u51fa\u73fe\u4ee5\u4e0b\u5169\u500b\u554f\u984c\uff1a<br \/>New password for the MySQL &#8220;root&#8221; user:(\u8a2d\u5b9amysql root\u7684\u5bc6\u78bc)<br \/>Web server to reconfigure automatically: (\u9078\u64c7apache2)<\/p>\n<p>\u5b89\u88dd pureftpd with mysql \u7684\u57fa\u672c\u8a2d\u5b9a\u5957\u4ef6<br \/># apt-get install pure-ftpd-mysql<\/p>\n<p>\u63a5\u8457\u6211\u5011\u8981\u65b0\u589e\u4e00\u7d44\u7cfb\u7d71\u5e33\u865f\uff0c\u9019\u500b\u5e33\u865f\u662f\u7d66\u767b\u5165\u9032\u4f86User\u9810\u8a2d\u7684\u8eab\u4efd\uff0c\u56e0\u70ba\u53ea\u8981\u9023\u9032unix-like\u7cfb\u7d71\u88e1\u8981\u5b58\u53d6\u7cfb\u7d71\u4e00\u5b9a\u8981\u53d6\u5f97\u4e00\u7d44UID,GID\uff0c\u4e0d\u7ba1\u9019\u7d44UID,GID\u7684\u6b0a\u9650\u591a\u5927\uff0c\u6240\u4ee5\u6211\u5011\u5c31\u8981\u65b0\u589e\u4e00\u7d44\u516c\u7528\u7684\u7cfb\u7d71\u5e33\u865f\uff0c\u4f7f\u7528\u8005 ftpuser\uff0c\u7fa4\u7d44 ftpgroup\uff0c\u6c92\u6709sheel\uff0c\u9650\u5236\u4e00\u822clogin(\u6307 ssh \u6216 telnet)\uff0cUID\u8ddfGID\u90fd\u662f2001<br \/># groupadd -g 2001 ftpgroup<br \/># useradd -u 2001 -s \/bin\/false -d \/bin\/null -c &#8220;pureftpd user&#8221; -g ftpgroup ftpuser<\/p>\n<p>\u518d\u4f86\u6211\u5011\u958b\u59cb\u8a2d\u5b9aMySQL<br \/>\u4f7f\u7528 root \u8eab\u4efd\u767b\u5165mysql\uff0c\u4e26\u5efa\u7acb pureftpd database\uff0c\u5efa\u7acb\u7ba1\u7406\u8005 pureftpd\uff0c\u4e26\u8a2d\u5b9a\u7ba1\u7406\u8005\u5bc6\u78bc <font color=\"#ff0000\">ftpdpass<\/font> (\u81ea\u8a02)<br \/># mysql -u root -p<\/p>\n<p class=\"command\">CREATE DATABASE pureftpd;<br \/>GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#8216;pureftpd&#8217;@&#8217;localhost&#8217; IDENTIFIED BY &#8216;<font color=\"#ff0000\">ftpdpass<\/font>&#8216;; <br \/>GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#8216;pureftpd&#8217;@&#8217;localhost.localdomain&#8217; IDENTIFIED BY &#8216;<font color=\"#ff0000\">ftpdpass<\/font>&#8216;; <br \/>FLUSH PRIVILEGES;<\/p>\n<p>\u5efa\u7acb tables<\/p>\n<p><!--more--><\/p>\n<p><\/p>\n<p class=\"command\">USE pureftpd;<br \/>CREATE TABLE ftpd (<br \/>User varchar(16) NOT NULL default &#8221;, <br \/>status enum(&#8216;0&#8242;,&#8217;1&#8217;) NOT NULL default &#8216;0&#8217;, <br \/>Password varchar(64) NOT NULL default &#8221;, <br \/>Uid varchar(11) NOT NULL default &#8216;-1&#8217;,<br \/>Gid varchar(11) NOT NULL default &#8216;-1&#8217;,<br \/>Dir varchar(128) NOT NULL default &#8221;, <br \/>ULBandwidth smallint(5) NOT NULL default &#8216;0&#8217;,<br \/>DLBandwidth smallint(5) NOT NULL default &#8216;0&#8217;, <br \/>comment tinytext NOT NULL, <br \/>ipaccess varchar(15) NOT NULL default &#8216;*&#8217;, <br \/>QuotaSize smallint(5) NOT NULL default &#8216;0&#8217;, <br \/>QuotaFiles int(11) NOT NULL default 0,<br \/>PRIMARY KEY (User), <br \/>UNIQUE KEY User (User) ) TYPE=MyISAM;<br \/>quit;<\/p>\n<p>\u8a2d\u5b9a pureftpd<\/p>\n<p>\u5099\u4efd pureftpd \u8a2d\u5b9a\u6a94<br \/># cp \/etc\/pure-ftpd\/db\/mysql.conf \/etc\/pure-ftpd\/db\/mysql.conf_orig<\/p>\n<p>\u6e05\u7a7a\u8a2d\u5b9a\u6a94<br \/># cat \/dev\/null &gt; \/etc\/pure-ftpd\/db\/mysql.conf<\/p>\n<p>\u7de8\u8f2f\u8a2d\u5b9a\u6a94\u5982\u4e0b<br \/># vi \/etc\/pure-ftpd\/db\/mysql.conf<\/p>\n<blockquote>\n<p>MYSQLSocket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/var\/run\/mysqld\/mysqld.sock<br \/>#MYSQLServer&nbsp;&nbsp;&nbsp;&nbsp; localhost<br \/>#MYSQLPort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3306<br \/>MYSQLUser&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pureftpd<br \/>MYSQLPassword&nbsp;&nbsp; <font color=\"#ff0000\">ftpdpass<\/font> (\u4e4b\u524d\u81ea\u8a02)<br \/>MYSQLDatabase&nbsp;&nbsp; pureftpd<br \/>#MYSQLCrypt md5, cleartext, crypt() or password() &#8211; md5 is VERY RECOMMENDABLE uppon cleartext<br \/>MYSQLCrypt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; md5<br \/>MYSQLGetPW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT Password FROM ftpd WHERE User=&#8221;\\L&#8221; AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MYSQLGetUID&nbsp;&nbsp;&nbsp;&nbsp; SELECT Uid FROM ftpd WHERE User=&#8221;\\L&#8221; AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MYSQLGetGID&nbsp;&nbsp;&nbsp;&nbsp; SELECT Gid FROM ftpd WHERE User=&#8221;\\L&#8221;AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MYSQLGetDir&nbsp;&nbsp;&nbsp;&nbsp; SELECT Dir FROM ftpd WHERE User=&#8221;\\L&#8221;AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&#8221;\\L&#8221;AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&#8221;\\L&#8221;AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MySQLGetQTASZ&nbsp;&nbsp; SELECT QuotaSize FROM ftpd WHERE User=&#8221;\\L&#8221;AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<br \/>MySQLGetQTAFS&nbsp;&nbsp; SELECT QuotaFiles FROM ftpd WHERE User=&#8221;\\L&#8221;AND status=&#8221;1&#8243; AND (ipaccess = &#8220;*&#8221; OR ipaccess LIKE &#8220;\\R&#8221;)<\/p>\n<\/blockquote>\n<p>\u4f7f\u7528\u8005\u767b\u5165\u4e4b\u5f8c\uff0c\u9650\u5236\u53ea\u80fd\u5728\u81ea\u5df1\u7684\u76ee\u9304\u4e2d<br \/># echo &#8220;yes&#8221; &gt; \/etc\/pure-ftpd\/conf\/ChrootEveryone<\/p>\n<p>\u7b2c\u4e00\u6b21\u767b\u5165\u6c92\u6709\u5efa\u7acb\u76ee\u9304\u7684\u8a71\uff0c\u81ea\u52d5\u5efa\u7acb\u76ee\u9304<br \/># echo &#8220;yes&#8221; &gt; \/etc\/pure-ftpd\/conf\/CreateHomeDir<\/p>\n<p>\u91cd\u65b0\u555f\u52d5 pureftpd<br \/># \/etc\/init.d\/pure-ftpd-mysql restart<\/p>\n<p>\u63a5\u8457\u6211\u5011\u65b0\u589e\u4e00\u7d44\u6e2c\u8a66\u5e33\u865f\uff0c\u4f7f\u7528\u8005 exampleuser\uff0c\u5bc6\u78bc secret\uff0cUID 2001\uff0cGID 2001\uff0c\u767b\u5165\u5bb6\u76ee\u9304 \/home\/www.example.com\uff0c\u4e0a\u50b3\u983b\u5bec\u9650\u5236 100 KB\/s\uff0c\u4e0b\u50b3\u983b\u5bec\u9650\u5236 100 KB\/s\uff0c\u5bb6\u76ee\u9304\u5927\u5c0f\u9650\u5236 50 MB\uff0c\u6a94\u6848\u6578\u91cf\u9650\u5236 0 (\u7121\u9650)<br \/># mysql -u root -p<\/p>\n<p class=\"command\">USE pureftpd;<br \/>INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (&#8216;exampleuser&#8217;, &#8216;1&#8217;, MD5(&#8216;secret&#8217;), &#8216;2001&#8217;, &#8216;2001&#8217;, &#8216;\/home\/www.example.com&#8217;, &#8216;100&#8217;, &#8216;100&#8217;, &#8221;, &#8216;*&#8217;, &#8217;50&#8217;, &#8216;0&#8217;);<br \/>quit;<\/p>\n<p>OK\u4e4b\u5f8c\u958b\u555fFTP Client\u767b\u5165\u8a66\u8a66\u770b\uff0c\u5e33\u865f\/\u5bc6\u78bc exampleuser\/secret<\/p>\n<p>\u4e4b\u524d\u5df2\u7d93\u5b89\u88dd\u4e86 phpmyadmin\uff0c\u6240\u4ee5\u6211\u5011\u53ef\u4ee5\u4f7f\u7528 <a href=\"http:\/\/IP\/phpmyadmin\/\">http:\/\/IP\/phpmyadmin\/<\/a> \u4f86\u65b9\u4fbf\u7ba1\u7406MySQL<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/aycu04.webshots.com\/image\/36443\/2006018215244258374_rs.jpg\"\/>&nbsp; table \u6b04\u4f4d\u7684\u610f\u7fa9:<\/p>\n<p>User: \u4f7f\u7528\u8005\u540d\u7a31<br \/>status: \u4f7f\u7528\u8005\u72c0\u614b\uff0c1\u70ba\u53ef\u767b\u5165\uff0c0\u70ba\u4e0d\u53ef\u767b\u5165<br \/>Password: \u5bc6\u78bc<br \/>UID: \u7cfb\u7d71\u7684 UID\uff0c\u5728\u9019\u88e1\u662f 2001<br \/>GID: \u7cfb\u7d71\u7684 GID\uff0c\u5728\u9019\u88e1\u662f 2001<br \/>Dir: \u767b\u5165\u7cfb\u7d71\u7684\u4f7f\u7528\u8005\u76ee\u9304<br \/>ULBandwidth: \u4e0a\u50b3\u983b\u5bec\uff0c\u55ae\u4f4d KB\/s<br \/>DLBandwidth: \u4e0b\u8f09\u983b\u5bec\uff0c\u55ae\u4f4d KB\/s<br \/>comment: \u4f7f\u7528\u8005\u8eab\u4efd\u7c21\u4ecb\u8aaa\u660e<br \/>ipaccess: \u9023\u7dda\u4f86\u6e90 IP\u9650\u5236\uff0c* \u70ba\u4e0d\u9650\u5236<br \/>QuotaSize:\u5bb6\u76ee\u9304\u7684\u5927\u5c0f\u9650\u5236\uff0c\u55ae\u4f4d MB\uff0c0\u70ba\u4e0d\u9650\u5236<br \/>QuotaFiles: \u6a94\u6848\u6578\u91cf\u9650\u5236\uff0c0\u70ba\u4e0d\u9650\u5236 <\/p>\n<p>\u8981\u65b0\u589e\u4e00\u500b\u4f7f\u7528\u8005\u7684\u8a71\uff0c\u5982\u4e0b\u5716 <\/p>\n<p><img decoding=\"async\" src=\"http:\/\/aycu34.webshots.com\/image\/36433\/2004482504033551697_rs.jpg\"\/>  <\/p>\n<p><img decoding=\"async\" src=\"http:\/\/aycu12.webshots.com\/image\/33051\/2004457917212653607_rs.jpg\"\/> <\/p>\n<p>\u5982\u679c\u60f3\u8981\u65b0\u589e\u4e00\u7d44\u533f\u540d\u7684\u5e33\u865f\uff0c\u63d0\u4f9b\u6240\u6709\u4eba\u767b\u5165\u7684\u8a71\uff0c\u6211\u5011\u9084\u662f\u4e00\u6a23\u5148\u65b0\u589e\u4e00\u7d44\u7cfb\u7d71\u7684\u5e33\u865f\uff0c\u9810\u8a2d\u8b93\u533f\u540d\u5e33\u865f\u767b\u5165\u9032\u4f86\u7684\u8eab\u4efd<\/p>\n<p># groupadd ftp<br \/># useradd -s \/bin\/false -d \/home\/ftp -m -c &#8220;anonymous ftp&#8221; -g ftp ftp<\/p>\n<p>\u8a2d\u5b9a pureftpd <br \/># echo &#8220;no&#8221; &gt; \/etc\/pure-ftpd\/conf\/NoAnonymous<\/p>\n<p>\u91cd\u65b0\u555f\u52d5 pureftpd<br \/># \/etc\/init.d\/pure-ftpd-mysql restart<\/p>\n<p>\u63a5\u8457\u8a2d\u5b9a\u4e00\u4e0b\u8b93\u533f\u540d\u4f7f\u7528\u8005\u767b\u5165\u9032\u4f86\u7684\u76ee\u9304\u4ee5\u53ca\u4f7f\u7528\u6b0a\u9650\uff0c\u4ee5\u4e0b\u7684\u8a2d\u5b9a\u7684\u6b0a\u9650\u53ea\u80fd\u8b93\u533f\u540d\u4f7f\u7528\u8005\u4e0a\u50b3\u4e0d\u80fd\u4e0b\u8f09\uff0c\u5982\u679c\u6709\u5176\u4ed6\u4e0d\u540c\u9700\u6c42\uff0c\u5c31\u5728\u4ee5\u4e0b\u81ea\u5df1\u81ea\u8a02<\/p>\n<p># cd \/home\/ftp<br \/># mkdir incoming<br \/># chown ftp:nogroup incoming\/<br \/># chmod 311 incoming\/<br \/># cd ..\/<br \/># chmod 555 ftp\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u7ffb\u8b6f\u65bc http:\/\/www.howtoforge.com\/virtual-hosting-with-pu&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-387","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/blog.smallken.site\/index.php?rest_route=\/wp\/v2\/posts\/387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.smallken.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.smallken.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.smallken.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.smallken.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=387"}],"version-history":[{"count":0,"href":"https:\/\/blog.smallken.site\/index.php?rest_route=\/wp\/v2\/posts\/387\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.smallken.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.smallken.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.smallken.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}