{"id":18171,"date":"2014-01-28T06:38:16","date_gmt":"2014-01-27T22:38:16","guid":{"rendered":"https:\/\/2blog.ilc.edu.tw\/25793\/2014\/01\/28\/proftpd-ftp-server-%e4%bd%bf%e7%94%a8-mysql-%e8%99%9b%e6%93%ac%e5%b8%b3%e8%99%9f\/"},"modified":"2014-01-28T06:38:16","modified_gmt":"2014-01-27T22:38:16","slug":"proftpd-ftp-server-%e4%bd%bf%e7%94%a8-mysql-%e8%99%9b%e6%93%ac%e5%b8%b3%e8%99%9f","status":"publish","type":"post","link":"https:\/\/2blog.ilc.edu.tw\/25793\/2014\/01\/28\/proftpd-ftp-server-%e4%bd%bf%e7%94%a8-mysql-%e8%99%9b%e6%93%ac%e5%b8%b3%e8%99%9f\/","title":{"rendered":"ProFTPd FTP Server \u4f7f\u7528 MySQL \u865b\u64ec\u5e33\u865f"},"content":{"rendered":"<p>ProFTPd FTP Server \u9664\u4e86\u4e00\u822c\u7cfb\u7d71\u5e33\u865f\u4e4b\u5916\uff0c\u4e5f\u652f\u63f4 MySQL \/ LDAP \u7684\u865b\u64ec\u5e33\u865f\uff0c\u5e95\u4e0b\u662f\u5b89\u88dd\u53ca\u8a2d\u5b9a<\/p>\n<p>\u5b89\u88dd MySQL <br \/># <span style=\"color: #ff0000;\">yum install mysql mysql-server<\/span><br \/>\u5b89\u88dd ProFTPd FTP Server<br \/># <span style=\"color: #ff0000;\">yum install proftpd proftpd-mysql &#8211;enablerepo=rpmforge<\/span><\/p>\n<p>\u5efa\u7acb\u8cc7\u6599\u5eab proftpdb<br \/># <span style=\"color: #ff0000;\">\/usr\/bin\/mysqladmin -u root -p create proftpdb<\/span><br \/>\u5efa\u7acb\u865b\u64ec\u7fa4\u7d44 virtualgrp GID 501<br \/># <span style=\"color: #ff0000;\">groupadd -g 501 virtualgrp<\/span><br \/>\u5efa\u7acb\u865b\u64ec\u5e33\u865f virtualuser UID 501<br \/># <span style=\"color: #ff0000;\">useradd -g 501 -u 501 virtualuser<\/span><br \/>[@more@]<br \/>proftpd \u8cc7\u6599\u5eab\u7684 ftpuser \u8cc7\u6599\u8868<br \/># <span style=\"color: #ff0000;\">cat \/root\/users.sql<\/span><br \/><span style=\"color: #0000ff;\">CREATE TABLE IF NOT EXISTS `ftpuser` (<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `userid` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT &#8221;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `passwd` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT &#8221;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `uid` smallint(6) NOT NULL DEFAULT &#8216;501&#8217;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `gid` smallint(6) NOT NULL DEFAULT &#8216;501&#8217;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `homedir` varchar(255) COLLATE utf8_general_ci NOT NULL DEFAULT &#8221;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `shell` varchar(16) COLLATE utf8_general_ci NOT NULL DEFAULT &#8216;\/sbin\/nologin&#8217;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 PRIMARY KEY (`id`),<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 UNIQUE KEY `userid` (`userid`)<\/span><br \/><span style=\"color: #0000ff;\">) ENGINE=MyISAM\u00a0 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT=&#8217;ProFTP user table&#8217;;<\/span><br \/><span style=\"color: #0000ff;\">insert into ftpuser values (&#8216;1&#8242;,&#8217;s0990001&#8217;,encrypt(&#8216;123456&#8242;),&#8217;501&#8242;,&#8217;501&#8242;,&#8217;\/home\/virtualuser\/s0990001&#8242;,&#8217;\/sbin\/nologin&#8217;);<\/span><br \/><span style=\"color: #0000ff;\">insert into ftpuser values (&#8216;2&#8242;,&#8217;s0990002&#8217;,encrypt(&#8216;123456&#8242;),&#8217;501&#8242;,&#8217;501&#8242;,&#8217;\/home\/virtualuser\/s0990002&#8242;,&#8217;\/sbin\/nologin&#8217;);<\/span><\/p>\n<p>proftpd \u8cc7\u6599\u5eab\u7684 ftpgroup \u8cc7\u6599\u8868<br \/># <span style=\"color: #ff0000;\">cat \/root\/groups.sql<\/span><br \/><span style=\"color: #0000ff;\">CREATE TABLE IF NOT EXISTS `ftpgroup` (<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `groupname` varchar(16) COLLATE utf8_general_ci NOT NULL,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `gid` smallint(6) NOT NULL DEFAULT &#8216;5500&#8217;,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 `members` varchar(16) COLLATE utf8_general_ci NOT NULL,<\/span><br \/><span style=\"color: #0000ff;\">\u00a0 KEY `groupname` (`groupname`)<\/span><br \/><span style=\"color: #0000ff;\">) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT=&#8217;ProFTP group table&#8217;;<\/span><br \/><span style=\"color: #0000ff;\">insert into ftpgroup values (&#8216;virtualgrp&#8217;,&#8217;501&#8242;,&#8217;s0990001&#8242;);<\/span><br \/><span style=\"color: #0000ff;\">insert into ftpgroup values (&#8216;virtualgrp&#8217;,&#8217;501&#8242;,&#8217;s0990002&#8242;);<\/span><\/p>\n<p>\u532f\u5165\u8cc7\u6599\u8868 ftpuser<br \/># <span style=\"color: #ff0000;\">\/usr\/bin\/mysql -u root -p proftpdb &lt; \/root\/users.sql<\/span><br \/>\u532f\u5165\u8cc7\u6599\u8868 ftpgroup<br \/># <span style=\"color: #ff0000;\">\/usr\/bin\/mysql -u root -p proftpdb &lt; \/root\/groups.sql<\/span><br \/>\u6307\u5b9a proftpdb \u7684\u7ba1\u7406 proftpd \u5bc6\u78bc\u662f proftpdpass<br \/># <span style=\"color: #ff0000;\">\/usr\/bin\/mysql -u root -p -e &#8220;GRANT ALL PRIVILEGES ON proftpdb.* TO &#8216;proftpd&#8217;@&#8217;localhost&#8217; IDENTIFIED BY &#8216;proftpdpass&#8217;;&#8221;<\/span><\/p>\n<p>\u4fee\u6539 ProFTPd FTP Server \u8a2d\u5b9a\u6a94 \/etc\/proftpd.conf<br \/># <span style=\"color: #ff0000;\">vim \/etc\/proftpd.conf<\/span><\/p>\n<p><span style=\"color: #0000ff;\">AuthOrder\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mod_sql.c<\/span><\/p>\n<p><span style=\"color: #0000ff;\">&lt;IfModule mod_dso.c&gt;<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 LoadModule mod_sql.c<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0 LoadModule mod_sql_mysql.c<\/span><br \/><span style=\"color: #0000ff;\">#\u00a0\u00a0 LoadModule mod_sql_postgres.c<\/span><br \/><span style=\"color: #0000ff;\">&lt;\/IfModule&gt;<\/span><\/p>\n<p><span style=\"color: #0000ff;\">\u00a0 &lt;IfModule mod_sql.c&gt;<\/span><\/p>\n<p><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 # We need our &#8220;default&#8221; connection to the userdb database<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLConnectInfo proftpdb@localhost proftpd proftpdpass<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLBackend mysql<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLAuthTypes Backend Plaintext Crypt<\/span><\/p>\n<p><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLAuthenticate on<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLMinUserUID 500<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLMinUserGID 500<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 RequireValidShell off<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 CreateHome on<\/span><\/p>\n<p><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 # Point mod_sql at our users\/groups tables<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLUserInfo ftpuser userid passwd uid gid homedir shell<\/span><br \/><span style=\"color: #0000ff;\">\u00a0\u00a0\u00a0 SQLGroupInfo ftpgroup groupname gid members<\/span><\/p>\n<p><span style=\"color: #0000ff;\">\u00a0 &lt;\/IfModule&gt;<\/span><\/p>\n<p>\u6e2c\u8a66\u8a2d\u5b9a\u6a94\u8a9e\u6cd5\u662f\u5426\u6b63\u78ba<br \/># <span style=\"color: #ff0000;\">proftpd -t<\/span><br \/><span style=\"color: #0000ff;\">Checking syntax of configuration file<\/span><br \/><span style=\"color: #0000ff;\">Syntax check complete.<\/span><\/p>\n<p>\u91cd\u65b0\u555f\u52d5 ProFTPd FTP Server<br \/># <span style=\"color: #ff0000;\">service proftpd restart<\/span><br \/><span style=\"color: #0000ff;\">\u6b63\u5728\u95dc\u9589 proftpd\uff1a\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\u00a0\u00a0 [\u00a0 \u78ba\u5b9a\u00a0 ]<\/span><br \/><span style=\"color: #0000ff;\">\u6b63\u5728\u555f\u52d5 proftpd\uff1a\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\u00a0\u00a0 [\u00a0 \u78ba\u5b9a\u00a0 ]<\/span><\/p>\n<p>\u9032\u884c\u6e2c\u8a66<br \/>#<span style=\"color: #ff0000;\"> lftp -u s0990001 192.168.1.20<\/span><br \/><span style=\"color: #0000ff;\">\u5bc6\u78bc\uff1a<\/span><br \/><span style=\"color: #0000ff;\">lftp s0990001@192.168.1.20:~&gt; ls<\/span><br \/><span style=\"color: #0000ff;\">lftp s0990001@192.168.1.20:\/&gt;<\/span><\/p>\n<p>\u5728 Log \u6a94\u4e5f\u53ef\u4ee5\u770b\u5230\u76f8\u95dc\u8a18\u9304<br \/># <span style=\"color: #ff0000;\">tail -f \/var\/log\/proftpd\/proftpd.log<\/span><br \/><span style=\"color: #0000ff;\">Jan 04 13:35:15 . proftpd[3875] 192.168.1.20 (192.168.1.20[192.168.1.20]): FTP session opened.<\/span><br \/><span style=\"color: #0000ff;\">Jan 04 05:35:15 . proftpd[3875] 192.168.1.20 (192.168.1.20[192.168.1.20]): Preparing to chroot to directory &#8216;\/home\/virtualuser\/s0990001&#8217;<\/span><br \/><span style=\"color: #0000ff;\">Jan 04 05:35:15 . proftpd[3875] 192.168.1.20 (192.168.1.20[192.168.1.20]): USER s0990001: Login successful.<\/span><br \/><span style=\"color: #0000ff;\">Jan 04 05:35:25 . proftpd[3875] 192.168.1.20 (192.168.1.20[192.168.1.20]): FTP session closed.<\/span><\/p>\n<p>\u865b\u64ec\u4f7f\u7528\u8005\u7684\u76ee\u9304\u4e5f\u6703\u81ea\u884c\u5efa\u7acb<br \/># <span style=\"color: #ff0000;\">ls -ld \/home\/virtualuser\/*<\/span><br \/><span style=\"color: #0000ff;\">drwx&#8212;&#8212; 2 virtualuser virtualgrp 4096 2014-01-04 13:33 \/home\/virtualuser\/s0990001<\/span><br \/><span style=\"color: #0000ff;\">drwx&#8212;&#8212; 2 virtualuser virtualgrp 4096 2014-01-04 13:35 \/home\/virtualuser\/s0990002<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ProFTPd FTP Server \u9664\u4e86\u4e00\u822c\u7cfb\u7d71\u5e33\u865f\u4e4b\u5916\uff0c\u4e5f\u652f\u63f4 MySQL \/ LDAP \u7684\u865b\u64ec\u5e33\u865f\uff0c\u5e95\u4e0b &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/2blog.ilc.edu.tw\/25793\/2014\/01\/28\/proftpd-ftp-server-%e4%bd%bf%e7%94%a8-mysql-%e8%99%9b%e6%93%ac%e5%b8%b3%e8%99%9f\/\" class=\"more-link\">\u95b1\u8b80\u5168\u6587<span class=\"screen-reader-text\">\u3008ProFTPd FTP Server \u4f7f\u7528 MySQL \u865b\u64ec\u5e33\u865f\u3009<\/span><\/a><\/p>\n","protected":false},"author":55,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130,116],"tags":[],"class_list":["post-18171","post","type-post","status-publish","format-standard","hentry","category-c-78475","category-c-78461"],"meta_key":{"_encloseme":["1"],"lt_post_id":["469640"]},"_links":{"self":[{"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/posts\/18171"}],"collection":[{"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/comments?post=18171"}],"version-history":[{"count":0,"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/posts\/18171\/revisions"}],"wp:attachment":[{"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/media?parent=18171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/categories?post=18171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2blog.ilc.edu.tw\/25793\/wp-json\/wp\/v2\/tags?post=18171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}