top
Loading...
MySQL驗證的Quota磁盤限額安裝手記

最近嘗試了在FreeBSD上配置了一個基于Proftpd的FTP服務器,要求使用MySQL數據庫存放ftp用戶信息,并在數據庫內存放用戶Quota磁盤限額信息,同時還支持anonymous匿名用戶登陸。

之前網上搜索到一些文章,好像都出自同一個朋友的手,到處都是轉載或者稍微的修改。下面是Michael根據大家的經驗和proftpd的MAN文檔進行的實際安裝手記。

本次Michael的FTP服務器使用的是FreeBSD 4.10 Release版本,Michael決定使用FreeBSD非常優秀的Ports系統進行所有軟件的安裝。以下的所有操作均是在Root用戶或者sudo root的情況下完成。

一、安裝MySQL

#cd /usr/ports/databases/mysql41-server

#make install

系統會自動下載mysql的安裝包mysql-4.1.14.tar.gz,并完成編譯和安裝過程。

注1:對于mysql的安裝,需要說明幾點要注意的地方,FreeBSD的Ports自動完成mysql安裝后,還需要自己完成下面幾件事情后才能正常使用。

1、創建mysql用戶和mysql用戶組,并修改目錄權限。

#pw groupadd mysql -g 88

#pw adduser mysql -u 88 -g 88 -d /nonexistent -s /sbin/nologin

#chown -R mysql:mysql /var/db/mysql

#chown -R mysql:mysql /usr/local/share/mysql

2、創建mysql系統數據庫

#/usr/local/bin/mysql_install_db

#/usr/lcoal/bin/mysql_create_system_tables

3、創建mysql自啟動腳本

#cp /usr/local/share/mysql/mysql.server /usr/local/etc/rc.d/mysql-server.sh

4、創建mysql配置文件 my.cnf

#cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf (有my-medium、small、large、huge等可選)

現在,你可以通過 /usr/local/etc/rc.d/mysql-server.sh start 或者重啟系統來啟動mysql了。

二、安裝proftpd

和mysql的安裝很相似,使用ports安裝:

#cd /usr/ports/ftp/proftpd-mysql

#make install

安裝的時候會要求選擇proftpd要安裝的模塊,選擇好mysql和quota,其他的根據情況選擇然后系統自動下載proftpd-1.3.0rc2.tar.bz2并完成編譯和安裝。










三、配置proftpd.conf

完成上面的安裝,proftpd其實已經可以運行了,但是我們還需要根據自己的安裝要求進行必要的配置,所以先備份默認的配置文件。

#cp /usr/local/etc/proftpd.conf /usr/local/etc/proftpd.conf.sample

1、重新編寫proftpd.conf,下面是Michael的文件,大家完全照抄就基本可以了。

#基本配置ServerName "Michael's Ftp Site" ServerType standalone DefaultServer on  #設置用戶登陸時不顯示ftp服務器版本信息 ServerIdent off  #設置ftp服務使用的端口,可以修改Port 21  #設置ftp目錄的權限Umask 022  #設置系統各種超時時間和重試次數MaxLoginAttempts 3 TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 TimeoutStalled 3600  #允許最大的同時連接用戶數MaxClients 10 #允許每個用戶主機最大并發連接數 MaxClientsPerHost 3  AllowOverwrite no AllowStoreRestart on UseReverseDNS off  #如果shell為空時允許用戶登錄 RequireValidShell off  #將用戶限制在自己的主目錄下 ,這個設置很重要DefaultRoot ' #設置系統最大的進程數,防止dos攻擊,默認是30MaxInstances 10  #設置系統用于運行proftpd服務的用戶和用戶組(需要后面自己創建) User FTPUSR Group FTPGRP  #設置對全局的文件可以進行改寫     AllowOverwrite on   #設置系統運行日志和文件傳輸日志SystemLog                       /var/log/proftpd.syslog  TransferLog                     /var/log/proftpd.transferlog   ######################## 下面是匿名登陸部分的設置 ##################匿名用戶登陸后訪問的目錄為 ftp用戶的主目錄 User ftp Group ftpusers  #設置anonymous用戶為系統實際用戶ftp的別名UserAlias anonymous ftp  #設置匿名用戶同時在線最大用戶數#此用戶數受限于前面的全局同時在線用戶數MaxClients 5 #設置welcome.msg文件作為用戶登陸的提示信息文件#.message文件作為用戶每次進入的目錄提示信息DisplayLogin welcome.msg DisplayFirstChdir .message  #設置一些特殊的權限,比如寫文件和登陸限制等 (可以不用)     DenyAll       Order deny,allow    Deny from 61.101.201.0/32     Allow from all  ######################## 完成匿名登陸的設置 #################  ######################## 下面是磁盤限額Quota設置 #############啟用磁盤限額 QuotaDirectoryTally on  SQLHomedirOnDemand on  #磁盤限額單位 b"|"Kb"|"Mb"|"Gb" QuotaDisplayUnits "Mb"  QuotaEngine on  #磁盤限額日志記錄 QuotaLog "/var/log/proftpd.quotalog"  #打開磁盤限額信息 "quote SITE QUOTA"命令 QuotaShowQuotas on ####################### 完成磁盤配額設置 ####################  ####################### 下面是MySQL數據庫部分設置 ############數據庫聯接的信息#FTP是數據庫名,localhost是MySQL主機名,3306是mysql服務的端口號#Michael是連接數據庫的用戶名,testpwd是密碼(如果沒有密碼留空) SQLConnectInfo FTP@localhost:3306 Michael testpwd  #數據庫認證的類型 SQLAuthTypes Backend Plaintext  #指定用來做用戶認證的表的有關信息。(將在后面創建) SQLUserInfo FTPUSERS userid passwd uid gid homedir shell SQLGroupInfo FTPGRPS groupname gid members  #數據庫認證 SQLAuthenticate users groups usersetfast groupsetfast  #proftpd進行的mysql調用語句,別修改任何地方。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  QuotaLimitTable sql:/get-quota-limit QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

至此,完成了proftpd.conf配置文件的編寫。

注2:之前Michael按照網上的部分文檔編寫了最后部分的mysql調用語句,結果最后運行proftpd后,登陸時總是出現421 Service not available 的錯誤,后來發現是最后部分的語句有問題,上面的語句是Michael經過修改后的,將不會有問題。

四、完成MySQL數據庫表配置

完成proftpd.conf配置文件后,需要進行數據庫表的配置,包括創建表和插入數據。

1、登陸mysql或者使用phpmyadmin工具創建數據庫 FTP

#mysqladmin create FTP

2、運行下面的sql語句創建表和插入必要數據

-- phpMyAdmin SQL Dump

-- version 2.6.4-pl2

-- http://www.phpmyadmin.net

--

-- 主機: localhost

-- 生成日期: 2005 年 11 月 03 日 14:23

-- 服務器版本: 4.1.14

-- PHP 版本: 4.4.0

--

-- 數據庫: `FTP`

--

-- --------------------------------------------------------

--

-- 表的結構 `FTPGRPS`

--

CREATE TABLE `FTPGRPS` (

`groupname` text NOT NULL,

`gid` smallint(6) NOT NULL default '0',

`members` text NOT NULL

) ENGINE=MyISAM;;

--

-- 導出表中的數據 `FTPGRPS`

--

INSERT INTO `FTPGRPS` VALUES ('FTPGRP', 2001, 'FTPUSR');

INSERT INTO `FTPGRPS` VALUES ('ftpusers', 2002, 'ftp');

-- --------------------------------------------------------

--

-- 表的結構 `FTPUSERS`

--

CREATE TABLE `FTPUSERS` (

`userid` text NOT NULL,

`passwd` text NOT NULL,

`uid` int(11) NOT NULL default '0',

`gid` int(11) NOT NULL default '0',

`homedir` text,

`shell` text

) ENGINE=MyISAM;;

--

-- 導出表中的數據 `FTPUSERS`

--

INSERT INTO `FTPUSERS` VALUES ('Michael', 'testftp', 2001, 2001, '/var/ftp/incoming', '');

-- --------------------------------------------------------

--

-- 表的結構 `quotalimits`

--

CREATE TABLE `quotalimits` (

`name` varchar(30) default NULL,

`quota_type` enum('user','group','class','all') NOT NULL default 'user',

`per_session` enum('false','true') NOT NULL default 'false',

`limit_type` enum('soft','hard') NOT NULL default 'soft',

`bytes_in_avail` float NOT NULL default '0',

`bytes_out_avail` float NOT NULL default '0',

`bytes_xfer_avail` float NOT NULL default '0',

`files_in_avail` int(10) unsigned NOT NULL default '0',

`files_out_avail` int(10) unsigned NOT NULL default '0',

`files_xfer_avail` int(10) unsigned NOT NULL default '0'

) ENGINE=MyISAM;;

--

-- 導出表中的數據 `quotalimits`

--

-- 設置Michael用戶,磁盤配額1G,可以上傳下載流量2G,最多文件數10個

INSERT INTO `quotalimits` VALUES ('Michael', 'user', 'false', 'soft', 1.024e+09, 0, 2.048e+09, 10, 0, 0);

-- --------------------------------------------------------

--

-- 表的結構 `quotatallies`

--

CREATE TABLE `quotatallies` (

`name` varchar(30) NOT NULL default '',

`quota_type` enum('user','group','class','all') NOT NULL default 'user',

`bytes_in_used` float NOT NULL default '0',

`bytes_out_used` float NOT NULL default '0',

`bytes_xfer_used` float NOT NULL default '0',

`files_in_used` int(10) unsigned NOT NULL default '0',

`files_out_used` int(10) unsigned NOT NULL default '0',

`files_xfer_used` int(10) unsigned NOT NULL default '0'

) ENGINE=MyISAM;;













如果你想設置quota,只要在ftpquotalimits表里設置一下就行了,這個表里的各個參數分別代表:

代碼:

quotalimits表name: - 用戶帳號quota type: - user, group, class, all (we use user)per_session: - true or false (we use true)limit_type: - 硬限制 or 軟限制 (我們一般用硬限制)bytes_in_avail: - 允許上傳的字節數bytes_out_avail: - 允許下載的字節數bytes_xfer_avail: - 允許傳輸的字節數(包括上傳/下載)files_in_avail: - 允許上傳的文件數files_out_avail: - 允許下載的文件數files_xfer_avail: - 允許傳輸的文件數(包括上傳/下載)

五、完成最后的用戶、用戶組和目錄設置

1、創建proftpd服務運行的用戶和用戶組

#pw groupadd FTPGRP -g 2001

#pw adduser FTPUSR -u 2001 -g 2001 -d /var/ftp/incoming -s /sbin/nologin

2、創建匿名登陸用戶映射的系統用戶和用戶組

#pw groupadd ftpusers -g 2002

#pw adduser ftp -u 2002 -g 2001 -d /var/ftp/incoming -s /sbin/nologin

六、運行測試配置系統服務

1、運行proftpd服務

#/usr/local/sbin/proftpd

2、測試

在任何一臺可以訪問服務器的機器上測試ftp連接,使用Michael用戶和testftp口令登陸,然后運行quote SITE QUOTA命令查看設置的磁盤限額信息,然后測試使用anonymous匿名用戶登陸測試。

3、監控和調試proftpd服務

#/usr/local/sbin/proftpd proftpd -n -d 5 -c /usr/local/etc/proftpd.conf

這樣在測試和連接ftp的時候,可以在主機上看到所有的proftpd運行信息

4、日志監控

可以使用下面的命令查看系統日志、傳送日志等。

#tail -f /var/log/proftpd.syslog

#tail -f /var/log/proftpd.transferlog

5、配置系統自啟動proftpd服務

#vi /etc/rc.conf

加入下面一行

proftpd_enable=”YES”

這樣系統啟動的時候會調用/usr/local/etc/rc.d/proftpd.sh腳本啟動proftpd服務。

ok

大功告成,大家可以根據自己的需要修改上面任何一個部分的細節,最好在自己理解的基礎上進行修改,整個過程包括proftpd的配置都很簡單。有問題歡迎大家來和我討論,經過Michael測試使用,發現proftpd的確是個不錯的東東!

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗