作者 主題: [教學] [FreeBSD & Linux Ubuntu] Proftpd 支援 UTF-8 + MYSQL  (閱讀 18185 次)

0 會員 與 1 訪客 正在閱讀本文。

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
ProFTPD Version 1.2.10

Mysql Version 4.1.0 支援 UTF8

請確定你的proftpd有支援sql module

代碼: [選擇]
proftpd -l | grep mysql

[root][~][23:28:13]# proftpd -l | grep sql
mod_sql.c
mod_sql_mysql.c
mod_quotatab_sql.c

確定有支援之後 再來就是建立mysql資料庫

    * 建立 proftp 資料庫

代碼: [選擇]
      CREATE DATABASE `ftp` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;    * 建立使用者資料表

代碼: [選擇]
      CREATE TABLE `ftp` (
      `username` varchar( 60 ) default NULL ,
      `uid` int( 11 ) NOT NULL ,
      `gid` int( 11 ) default NULL ,
      `password` varchar( 30 ) default NULL ,
      `homedir` varchar( 60 ) default NULL ,
      `shell` varchar( 11 ) default ‘/bin/false’,
      PRIMARY KEY ( `uid` ) ,
      UNIQUE KEY ( `username` )
      ) TYPE = MYISAM ;

      此資料表是在紀錄使用者的基本資訊,uid是使用者系統uid,gid是使用者group的id,passwd使用者的密碼
      homedir為使用者登入的家目錄,

      shell可以為該使用者指定相應的shell
    * 建立使用者群組資料表
代碼: [選擇]
      CREATE TABLE `groups` (
      `groupname` varchar( 30 ) NOT NULL default ‘’,
      `gid` int( 11 ) NOT NULL default ‘0′,
      `members` text default NULL
      ) TYPE = MYISAM ;

      其中grpname是組的名稱,gid是系統組的ID,members是組的成員。注意:多成員,他們之間要用逗號隔開,不能使用空格
      例如 3個使用者 test1 test2 test3 ,members就要寫 (test1,test2,test3)

#設置MySQL認證:

SQLConnectInfo 資料庫 資料庫帳號 資料庫密碼

#設置user資料表資訊『對應你的設定的資料表』

SQLUserInfo ftp username password uid gid homedir shell
#設置group資料表資訊『對應你的設定的資料表』

SQLGroupInfo groups groupname gid members

#設定使用者密碼編碼方式 ex:Plaintext 純文字

SQLAuthTypes Plaintext
#設定mysql log檔

SQLLogFile /var/log/sql.log
PersistentPasswd off
#如果home目錄不存在,則系統會為根據它的home項新建一個目錄:
SQLHomedirOnDemand on

再來呢,建立ftp的專屬group,當然你如果有許多群組,請自行建立

   1. 建立groupgroupadd ftpgroup
   2. 建立一個使用者home目錄
useradd -G ftpgroup -d /home/ftp -m -s /bin/false ftp

為FTPUSR建立HOME,把所有的FTP user 活動空間全放在此目錄下:

mkdir /home/ftp #剛剛建立使用者已經建立了
chown -R ftp:ftpgroup /home/ftp
開始建立ftp的使用者,可以的話利用phpmyadmin

代碼: [選擇]
INSERT INTO user (`userid`, `passwd`, `uid`, `gid`, `home`, `shell`) values (’test’, ‘1234′, ‘1000′, ‘1001′, ‘/home/ftp/’, ‘/bin/false’ );

INSERT INTO `groups` VALUES (’ftpgroup’, 1001, ‘test’);

上面那個是新增group對應使用者,如果你有多個使用者對應到同一個group

那麼你就要修改 group 改成 VALUES (’ftpgroup’, 1001, ‘test1,test2,test3′)

所以每增加一個使用者,就要去修改一次,有點麻煩,不過寫程式就可以解決了

大致上是如此,有問題在提出吧

我的proftpd.conf設定檔

http://bbs.ee.ndhu.edu.tw/~appleboy/proftpd.conf

資料同步在我的blog上面

http://blog.wu-boy.com/index.php/2006/10/21/22/
« 上次編輯: 2012-05-22 11:02 由 appleboy »

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY

johnlp

  • 懷疑的國中生
  • **
  • 文章數: 86
    • 檢視個人資料
[教學] Ubuntu 6.06 Proftpd + Mysql 安裝方式
« 回覆 #1 於: 2007-10-19 09:21 »
可以參考xampp的設定
它已經完全將相關設定整理好了
滿有參考的價值
我最愛的楓之谷小遊戲網-有很多海綿寶寶遊戲

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
回覆: [教學] Ubuntu 6.06 Proftpd + Mysql 安裝方
« 回覆 #2 於: 2008-04-26 11:40 »
更新版

[FreeBSD & Linux Ubuntu] Proftpd 支援 UTF-8 + MYSQL 虛擬帳號 + Quota 限制

今天突然想到要玩一下 Proftpd 的 MYSQL 虛擬帳號認證部份,我是用 FreeBSD 7.0 Release 下去安裝的,剛剛去看了一下官方網站,從 1.3.1rc1 版開始,支援 UTF-8 傳送跟接收了,請看 RELEASE_NOTES-1.3.1rc1,所以1.2.10版本之前的都不支援 UTF-8 不過台灣有人 patch 出來可以支援 Big5,現在都不用了,裡面有一段簡介
引用
    UseUTF8
    Disables use of UTF8 encoding for file paths. If the --enable-nls
    configure option is used, then UTF8 encoding support will be
    enabled by default.

如果你的 server 是用此版本,或者是更高,請在編譯的時候加入 --enable-nls

引用
    --enable-nls

    This configure option enables handling of translated message
    catalogs for response messages, and also enables handling of
    UTF8 paths in client commands.


這樣就可以處理 Client UTF-8 的支援問題了

實驗環境:

引用
    FreeBSD 7.0 Release
    Ubuntu 7.10
    proftpd-1.3.1_12

安裝方式:FreeBSD 版本 & Linux Ubuntu 7.10
代碼: [選擇]
#
# FreeBSD
#
cd /usr/ports/ftp/proftpd-mysql
make install clean

#
# Linux
#
apt-get install proftpd-mysql

其餘的大概就是 apache 跟 mysql 要事先裝好,還有 phpmyadmin
#
# Linux 安裝
#
apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin
#
# FreeBSD
#
cd /usr/ports/www/apache22/; make install clean
cd /usr/ports/databases/mysql51-server/; make install clean
cd /usr/ports/databases/phpmyadmin/; make install clean
#
# 設定 mysql 密碼
#
mysqladmin -u root password yourrootsqlpassword

再來進入主題,MYSQL 帳號認證部份,首先建立資料庫
CREATE DATABASE `ftp` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

建立使用者資料表,這個資料表是紀錄使用者的所有資料
代碼: [選擇]
#
# username 使用者帳號
# uid 系統的 uid 這個可以自己隨便給個數字,不要重複到系統帳號
# gid 系統的 gid 這個看你用途是什麼來去對應
# password 使用者密碼
# homedir 使用者家目錄
# shell 使用者的 shell 最好是填 /sbin/nologin
#
CREATE TABLE IF NOT EXISTS `ftp` (
  `username` varchar(60) DEFAULT NULL,
  `uid` int(11) NOT NULL,
  `gid` int(11) DEFAULT NULL,
  `password` varchar(30) DEFAULT NULL,
  `homedir` varchar(60) DEFAULT NULL,
  `shell` varchar(32) DEFAULT '/usr/bin/nologin',
  PRIMARY KEY  (`uid`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

接下來建立 group 資料表
代碼: [選擇]
#
# groupname 群組帳號
# gid 系統的 gid 這個對應到系統 /etc/group 的 gid 值,也可以不用,看你怎麼用
# members 這個群組的成員
#
CREATE TABLE IF NOT EXISTS `groups` (
  `groupname` varchar(30) NOT NULL DEFAULT '',
  `gid` int(11) NOT NULL DEFAULT '0',
  `members` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

members 這個比較重要的是,每個成員都是以逗點隔開的喔,所以一個群組可以無限多個成員,例如
代碼: [選擇]
#
# 這樣一直隔開
#
test1,test2,test3

接下來就是去修改 proftpd.conf 了
代碼: [選擇]
#
# 關掉反查 DNS
#
UseReverseDNS off

DefaultAddress ::
#
# 使用 mysql 資料庫為主
#
SQLBackend mysql

# SQLAuthTypes Backend
# 密碼認證 已 PASSWORD() 產生為主
# 密碼使用明碼 Plaintext
SQLAuthTypes Plaintext

#
# 開啟認證
#
SQLAuthenticate on
#
# MySQL 連線資訊,資料庫名稱@主機 帳號 密碼
#
SQLConnectInfo ftp@localhost root wwwadmin080225
#
# 使用者資料庫欄位
#
SQLUserInfo ftp username password uid gid homedir shell
#
# 群組資料庫欄位
#
SQLGroupInfo groups groupname gid members
#
# SQL Log 檔
#
SQLLogFile /var/log/proftpd/sql.log
#
# 當 Home 目錄不存在,會自己產生。
#
SQLHomedirOnDemand on
#
# SQL Log 格式,當正確登入時,要執行的 SQL 語法
#
SQLLog PASS updatecount
#
#  updatecount 增加登入跟時間
#
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() where userid='%u'" ftp
#
# SQL Log 格式,當儲存或刪除檔案時,要執行的 SQL 語法
#
SQLLog STOR,DELE modified
#
# modified 語法
#
SQLNamedQuery modified UPDATE "modified=now() where userid='%u'" ftp

接下來是要介紹如何設定 quota ,然后建立 mysql 相關資料表
代碼: [選擇]
#
#quota_type 硬碟限額的鑒別,可以設置單各使用者,也可以設置一各組中的全部使用者,還可以設置全部使用者
#bytes_in_avail 上傳最大位元組數,就是FTP使用者空間容量 (設置個字段的時候是以byte(位元組)為單位,如果要限額在10M,那就是10240000,下面也一樣)
#bytes_out_avail 下載最大位元組數,需要注意的是,這個字段中記錄的是使用者總共能從伺服器上下載多少資料,資料是累計的。
#bytes_xfer_avail 總共可傳輸的文件的最大位元組數(上傳和下載流量)需要注意的是,這個字段中記錄的是使用者總共能傳輸文件的最大位元組數,資料是累計的。
#files_in_avail INT 總共能上傳文件的數目
#files_out_avail INT 能從伺服器上下載文件的總數目
#files_xfer_avail INT 總共可傳輸文件的數目(上傳和下載)
#
CREATE TABLE quotalimits (
name VARCHAR(30),
quota_type ENUM("user", "group", "class", "all") NOT NULL,
per_session ENUM("false", "true") NOT NULL,
limit_type ENUM("soft", "hard") NOT NULL,
bytes_in_avail FLOAT NOT NULL,
bytes_out_avail FLOAT NOT NULL,
bytes_xfer_avail FLOAT NOT NULL,
files_in_avail INT UNSIGNED NOT NULL,
files_out_avail INT UNSIGNED NOT NULL,
files_xfer_avail INT UNSIGNED NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE quotatallies (
name VARCHAR(30) NOT NULL,
quota_type ENUM("user", "group", "class", "all") NOT NULL,
bytes_in_used FLOAT NOT NULL,
bytes_out_used FLOAT NOT NULL,
bytes_xfer_used FLOAT NOT NULL,
files_in_used INT UNSIGNED NOT NULL,
files_out_used INT UNSIGNED NOT NULL,
files_xfer_used INT UNSIGNED NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

再來是修改 proftpd.conf 的檔案
代碼: [選擇]
#
# 硬碟限額部分
#
QuotaDirectoryTally on
#
#硬碟限額單位 b | Kb | Mb| Gb
#
QuotaDisplayUnits "Kb"
#
# 啟動 Quota
#
QuotaEngine on
#
# 硬碟限額日志記錄
#
QuotaLog "你的LOG路徑"
#
# 打開硬碟限額資訊,當登陸FTP帳戶后,使用命令 "quote SITE QUOTA" 后可顯示當前使用者的硬碟限額
#
QuotaShowQuotas on
#
#以下是SQL調用語句,不用修改直接拷貝過去
#
SQLNamedQuery 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}'"

SQLNamedQuery 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}'"

SQLNamedQuery 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

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies

首先呢,先建立一個 group 給 ftp
代碼: [選擇]
#
# FreeBSD 建立 FTP group
#
pw group add ftp
mkdir /home/ftp
chown appleboy:ftp /home/ftp
#
# ftp 這個群組的都可以在資料夾底下新增刪除
#
chmod 775 /home/ftp
#
# 新增 sql 語法
#
INSERT INTO `ftp` (`username`, `uid`, `gid`, `password`, `homedir`, `shell`) VALUES
('test1', 1500, 1004, '1234', '/home/ftp', '/sbin/nologin');
INSERT INTO `groups` (`groupname`, `gid`, `members`) VALUES
('ftp', 1004, 'appleboy,test1,test2');
INSERT INTO `quotalimits` (`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`) VALUES
('test1', 'user', 'false', 'soft', 1024000, 0, 204800, 500, 0, 10);

然後在利用 lftp 去做測試,測試結果如下:



參考網站:
http://www.myunix.idv.tw/forum/viewtopic.php?p=622
http://howtoforge.com/proftpd_mysql_virtual_hosting_p2

文章同步於: http://blog.wu-boy.com/2008/04/25/191/
« 上次編輯: 2008-04-26 11:42 由 appleboy »

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY