筍子工作雜記

十一月 18, 2009

Proftpd 支援 UTF-8 + MYSQL 虛擬帳號 + Quota 限制

Filed under: FreeBSD,ftp,Services — 標籤:, , , , — shinnlu @ 11:20 下午

原文參考:[FreeBSD & Linux Ubuntu] Proftpd 支援 UTF-8 + MYSQL 虛擬帳號 + Quota 限制
原始文章中有一些錯誤,我會在內文中更正這些錯誤

安裝之前準備工作
[cc lang="c"]portsnap fetch && portsnap update
Mysql 要先安裝好[/cc]

安裝時才不會安裝到不支援 UTF8 的舊版本,本次安裝為 proftpd-1.3.2b
實驗環境:
FreeBSD 7.2-Release
proftpd 1.3.2b

安裝方式
cd /usr/ports/ftp/proftpd-mysql
make install clean

選擇
NLS
Quota
Mysql
Ratio

建立資料庫

CREATE DATABASE `ftp` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

建立使用者資料表,這個資料表是紀錄使用者的所有資料

# username 使用者帳號
# uid 系統的 uid 這個可以自己隨便給個數字,不要重複到系統帳號
# gid 系統的 gid 這個看你用途是什麼來去對應
# password 使用者密碼
# homedir 使用者家目錄
# shell 使用者的 shell 最好是填 /sbin/nologin
# accessed 使用者最後登入的時間
# count 登入次數
#這個部份增加了兩個欄位 accessed, count ,因為使用者登入時,會執行 updatecount 的SQL語法,但沒有這兩個欄位,會寫不進去
#其實還少了 modified 欄位,但是我想不出來儲存這個欄位有什麼用途,所以不修正

DROP TABLE IF EXISTS `ftp`;
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’,
`accessed` datetime NOT NULL,
`count` int(11) NOT NULL,
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

UseReverseDNS off
#建議開啟 Log,登入發生錯誤時,也比較好抓問題
SystemLog /var/log/proftpd/ftp.log
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 的部份尚未測試,先整個貼過來

接下來是要介紹如何設定 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’, ‘/usr/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);

錯誤訊息以及說明:

USER test 1 (Login failed): Invalid shell: ‘/sbin/nologin’
系統不允許使用這個 shell 請在 /etc/shells 加入一行
/usr/sbin/nologin

如果檔案無法上、下傳、刪除,請檢查權限
ftp 資料表中的 uid, gid 就是檔案系統中的權限,必須設定相對應的權限才能正常運作

39 則迴響 »

  1. yandanxvurulmus.zSFsgLiOX3GE

    迴響 by porno izle — 十二月 30, 2023 @ 1:34 上午

  2. xyandanxvurulmus.6ByjRGBXa8d0

    迴響 by dunner — 十二月 30, 2023 @ 3:46 上午

  3. xbunedirloooo.EqSc2a3anPK3

    迴響 by congregationalisms — 十二月 30, 2023 @ 4:55 上午

  4. gleyings xyandanxvurulmus.ofun4TfRYNI1

    迴響 by gleyings — 十二月 30, 2023 @ 4:30 下午

  5. am siteleri vurgunyedim.wsvm7N3Y8nak

    迴響 by porn — 一月 16, 2024 @ 11:14 下午

  6. eski rahatiniz olmayacak yaralandinmieycan.ix2IGuVk5iei

    迴響 by porn sex — 一月 17, 2024 @ 3:01 下午

  7. eski rahatiniz olmayacak citixx.p0gRAX6RDdhf

    迴響 by house porn — 一月 20, 2024 @ 4:24 下午

  8. porn hyuqgzhqt.LrceX5vpFkhm

    迴響 by porn — 一月 20, 2024 @ 4:47 下午

  9. porn siteleri ewrjghsdfaa.c2diIsmR6aGQ

    迴響 by craft porn — 一月 20, 2024 @ 4:56 下午

  10. anal sikis siteleri wrtgdfgdfgdqq.MWtd0sAOywa7

    迴響 by bahis porno — 一月 20, 2024 @ 5:38 下午

  11. escort pompadirha.4aYCiYBfhrl3

    迴響 by craft porn — 二月 2, 2024 @ 7:37 下午

  12. bahis siteleri incest category asillartaklitler.DGg7ueTkxA1E

    迴響 by house porn — 二月 2, 2024 @ 7:53 下午

  13. eski rahatiniz olmayacak hephupx.5ppBUF7OXyht

    迴響 by watch porn video — 二月 3, 2024 @ 12:36 上午

  14. BİZİ SİK BİZ BUNU HAK EDİYORUZ hepxhupx.Xbqo6wRkFPea

    迴響 by pornhub bahis siteleri — 二月 3, 2024 @ 8:08 下午

  15. bahis siteleri incest category juljulfbi.te9Sqvw63m9b

    迴響 by house porn — 二月 3, 2024 @ 9:03 下午

  16. viagra bjluajszz.oUGxvtyLlPwp

    迴響 by porn — 二月 5, 2024 @ 3:04 下午

  17. fuck bxjluajsxzz.nkLwGYvhZdZk

    迴響 by craft porn — 二月 5, 2024 @ 3:23 下午

  18. food porn 0qbxjluaxcxjsxzz.hqkfSEhEKVeu

    迴響 by anal siteleri — 二月 5, 2024 @ 3:43 下午

  19. www porn video free download com gghkyogg.MqqxZVia94o

    迴響 by hd pprn videos — 三月 13, 2024 @ 4:04 下午

  20. 4k porn downloads ggjennifegg.G0FZq4LESEL

    迴響 by 4k sex videos free download — 三月 13, 2024 @ 10:00 下午

  21. porn hd downlod ggjinnysflogg.VLaOMIqEiJo

    迴響 by hd homemade porn — 三月 13, 2024 @ 11:52 下午

  22. fashionflag hd pirn videos download fashionflag.4dikz1hVZcX

    迴響 by fashionflag porn video hd download — 三月 27, 2024 @ 4:31 下午

  23. goodhere Small Tits porn vurucutewet.8FYGYJz0vJZ

    迴響 by goodhere Anal porn — 三月 28, 2024 @ 12:18 下午

  24. ladyandtherose Cartoons porn backlinkseox.INF7M73We7B

    迴響 by ladyandtherose Small Tits porn — 三月 28, 2024 @ 3:44 下午

  25. jenniferroy ぽっちゃりポルノ japanesexxporns.QOiZiIU9Py3

    迴響 by jenniferroy 寝取られポルノ — 三月 28, 2024 @ 10:18 下午

  26. landuse Old and Young porn lancdcuse.ROoTysVGVEX

    迴響 by landuse DP porn — 三月 29, 2024 @ 3:02 下午

  27. falbobrospizzamadison MILF porn jkkıjxxx.BhP8ve0F028

    迴響 by falbobrospizzamadison POV porn — 三月 29, 2024 @ 10:03 下午

  28. किशोर अश्लील qqyyooppxx.57LjzFQY6Lz

    迴響 by गर्भवती अश्लील — 三月 30, 2024 @ 2:37 下午

  29. मजेदार सेक्स पोर्न के बा hjkvbasdfzxzz.1EwafiR2cdR

    迴響 by किशोर अश्लीलता के बा — 三月 30, 2024 @ 10:36 下午

  30. विंटेज पोर्न txechdyzxca.50OpbqoKSCZ

    迴響 by किशोर अश्लीलता — 四月 1, 2024 @ 6:02 下午

  31. कट्टर अश्लीलता hkyonet.FGo3A7IZqGE

    迴響 by गर्भवती अश्लीलता — 四月 3, 2024 @ 1:23 上午

  32. milf ਪੋਰਨ madisonivysex.5xAhqUJYMAj

    迴響 by ਨੰਗਾ ਨਾਚ ਪੋਰਨ — 四月 3, 2024 @ 11:03 下午

  33. ladesbet ਵੱਡੇ ਗਧੇ ਪੋਰਨ ladesinemi.p6p5BtkuHvi

    迴響 by ladesbet ਕੁੱਕਲਡ ਪੋਰਨ — 四月 5, 2024 @ 12:31 下午

  34. ladesbet 妊娠中のポルノ ladestinemi.BxDWfEFwlOz

    迴響 by ladesbet 毛深いポルノ — 四月 5, 2024 @ 2:11 下午

  35. ポルノのキャスティング .iKaGtDIqv3v

    迴響 by gobigbrain ポルノのキャスティング — 六月 7, 2024 @ 1:22 上午

  36. ਅਰਬ ਪੋਰਨ .OYWv5nMmRWH

    迴響 by kidzkaboodle ਅਰਬ ਪੋਰਨ — 六月 7, 2024 @ 1:39 上午

  37. ਗਰੁੱਪ ਸੈਕਸ ਬਾਰੇ .IpOyxM1YRl2

    迴響 by kidzkaboodle ਗਰੁੱਪ ਸੈਕਸ ਬਾਰੇ — 六月 7, 2024 @ 1:48 上午

  38. ਲਾਤੀਨੀ ਪੋਰਨੋਗ੍ਰਾਫੀ .lBwcdOrUL0U

    迴響 by glencovesaltcave ਲਾਤੀਨੀ ਪੋਰਨੋਗ੍ਰਾਫੀ — 六月 7, 2024 @ 1:51 上午

  39. https://arxlfnfdijzvwp.erfassung.info/ .8WwaKt0MaZu

    迴響 by mustard — 七月 6, 2024 @ 5:02 下午

此篇文章迴響的訂閱源料 TrackBack URL

發表迴響

Powered by WordPress