久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

FTP服務Proftpd+mysql+quota的示例分析

155次閱讀
沒有評論

共計 8425 個字符,預計需要花費 22 分鐘才能閱讀完成。

這篇文章主要介紹了 FTP 服務 Proftpd+mysql+quota 的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

1 下載相關軟件

1.1 下載 proftpd

1.2 下載 MySQL

1.3 下載 proftpd-mod-quotatab

2 安裝

2.1 解壓 proftpd-1.2.9rc1.tar.gz

2.2 解壓 proftpd-mod-quotatab-1.2.10.tar.gz

2.3 安裝 MySQL

2.4 編譯安裝 proftpd 和 proftpd-mod-quotatab

3 配置

3.1 配置 proftpd.conf 文件

3.1.1 設置磁盤限額

3.1.2 指定磁盤限額模塊使用的數據庫信息

3.1.3 配置 FTP 用戶為 MySQL 數據庫認證方式

4 創建 FTP 系統用戶和組

5 建立 FTP 用戶認證相關表

6 建立磁盤限額數據表

7 數據表數據初始化

8 運行 proftpd

9 配置 proftpd 執行腳本

10 FAQ

11 其它問題

1 下載相關軟件

1.1 下載 proftpd

在以下地址可下載到 for Linux 的 proftpd-1.2.9rc1 版:

http://www.proftpd.org/download.html

以上地址是一個 FTP 下載站點的列表,自己選一個吧。

1.2 下載 MySQL

MySQL 可以到 http://www.mysql.com 去下載,一般每一種 Linux 發行版都已經默認安裝了 MySQL,可以用以下命令查看:

rpm ndash;qa|grep MySQL

如果沒有的話,請在自己的 Linux 安裝光盤中找到并予以安裝,一般裝完后就會自動啟動了,可用如下命令查看:

ps ndash;ef|grep mysql

如果看到了相應進程則表明 MySQL 已經運行,否則請自行啟動:

/etc/rc.d/init.d/mysql start

1.3 下載 proftpd-mod-quotatab

下面是 proftpd-mod-quotatab 的下載地址:

http://www.castaglia.org/proftpd/modules/proftpd-mod-quotatab-1.2.10.tar.gz

2 安裝

2.1 解壓 proftpd-1.2.9rc1.tar.gz

假設下載的 proftpd-1.2.9rc1.tar.gz 文件在 /root 目錄下,則先進入此目錄,然后執行:

tar ndash;xzvf proftpd-1.2.9rc1.tar.gz

2.2 解壓 proftpd-mod-quotatab-1.2.10.tar.gz

tar ndash;xzvf proftpd-mod-quotatab-1.2.10.tar.gz

2.3 安裝 MySQL

假設 MySQL 的 rpm 包名字為 MySQL-3.23.56-i386.rpm

rpm ndash;ivh MySQL-3.23.56-i386.rpm

2.4 編譯安裝 proftpd 和 proftpd-mod-quotatab

首先將進入解壓后的 proftpd-mod-quotatab 目錄,將此目錄下的所有文件復制到解壓后的 proftpd 目錄下的 modules 目錄中,接著到 contrib 目錄中編輯 mod_sql_mysql.c 文件:

vi mod_sql_mysql.c

找到 #include 這一行,將 mysql.h 改成你的系統中此文件所在的路徑,如 /usr/include/mysql/mysql.h

然后在解壓后的 proftpd 目錄中執行:

./configure –prefix=/usr/local/proftpd –with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql –with-includes=/usr/include/mysql –with-libraries=/usr/lib/mysql

注意請根據自己的 Linux 系統找到 MySQL 的相應 include 和 lib 目錄,以上例子中的相關路徑是大多數 Linux 系統默認的,如果你的 MySQL 是通過源碼編譯安裝的,則這兩個目錄一般在安裝路徑下。

如果 configure 沒有錯誤,接下來就可以 make;make install 了。

make

make install

完成后,在 /usr/local 目錄下會產生一個 proftpd 目錄:

cd /usr/local/proftpd

ls 會看到 bin etc man sbin var 五個目錄,執行 sbin/proftpd 就會啟動 proftpd 服務了,但現在還是使用的系統用戶,請繼續看下面 hellip; hellip;

3 配置

3.1 配置 proftpd.conf 文件

編輯 /usr/local/proftpd/etc/proftpd.conf 文件:

3.1.1 設置磁盤限額

# 設置磁盤限額

QuotaDirectoryTally on

# 設置磁盤容量顯示時的單位

QuotaDisplayUnits Kb

# 打開磁盤限額引擎

QuotaEngine on

# 設置磁盤限額日志文件

QuotaLog /usr/local/proftpd/var/quota

# 允許顯示磁盤限額信息,ftp 登錄后可執行 quote site quota 命令查看當前磁盤使用情況

QuotaShowQuotas on

3.1.2 指定磁盤限額模塊使用的數據庫信息

在 proftpd.conf 文件中加入以下配置:

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

3.1.3 配置 FTP 用戶為 MySQL 數據庫認證方式

在 proftpd.conf 文件中加上以下配置:

SQLConnectInfo databaseName@hostName:port userName password

#databaseName 是為 proftpd 建立的 MySQL 數據庫的名字

#hostName 是 MySQL 數據庫所在的服務器的名字或 ip 地址

#port 是 MySQL 服務所使用的端口

#userName 是數據庫的用戶名

#password 是數據庫用戶密碼

SQLAuthTypes Backend Plaintext

#Backend 表示用戶認證方式為 MySQL 數據庫的認證方式

#Plaintext 表示明文認證方式,排在最前面的為 *** 使用的方式

SQLUserInfo ftpUser userid passwd uid gid homedir shell

# 指定 ftp 用戶數據表的名字和其中的字段名,表名可自行定義,字段名不要改動。

SQLGroupInfo ftpGroup groupname gid members

# 指定 ftp 用戶組數據表的名字和其中的字段名,這個數據表是可選的,字段名不要改動。

RequireValidShell off

# 指定是否必須為 FTP 用戶指定一個系統 shell,off 表示不用指定,on 表示必須指定。為了系統安全應該指定為 off。

SQLAuthenticate users groups usersetfast groupsetfast

# 校驗數據表

SQLHomedirOnDemand on

# 如果用戶主目錄不存在,則系統會根據此用戶在用戶數據表中的 homedir 字段的值新建一個目錄

4 創建 FTP 系統用戶和組

創建一個 FTP 用戶和組,以后所有的其它 FTP 用戶實際上都是通過這個系統用戶進行 FTP 的:

groupadd ndash;g 2003 ftpGroup

useradd ndash;u 2003 ndash;g ftpGroup ndash;d /home ftpUser

以上建立了一個名為 ftpGroup 的 ftp 組,組 id 為 2003; 建立了一個 ftp 用戶,用戶 id 為 2003,并加入 ftpGroup 組,用戶主目錄為 /home

接著修改 /home 的屬主和訪問權限:

chown ndash;R ftpUser.ftpGroup /home

chmod 644 /home

644 的具體含義請自查看相關文檔。

再修改 proftpd.conf 文件,找到 User 和 Group,將 User 指定為 ftpUser,Group 指定為 ftpGroup,替換掉原默認值,否則如果系統中沒有原默認值所指定的用戶和組的話,proftpd 是不能成功啟動的。

5 建立 FTP 用戶認證相關表

mysql ndash;u root

use mysql

添加一個 mysql 用戶:ftp

添加一個數據庫:proftpd

具體指令請參考 MYSQL 手冊。

建完用戶和數據庫后,以新建的用戶登錄 MYSQL:

mysql ndash;u ftp

use proftpd;

create table ftpUser (userid TEXT NOT NULL,passwd TEXT NOT NULL,uid INT NOT NULL,gid INT NOT NULL,homedir TEXT,shell TEXT);

userid 是用戶名,passwd 是用戶密碼,uid 是用戶 id,gid 是用戶所在組的 id,homedir 是用戶主目錄,shell 是用戶的系統 shell。

create table ftpGroup (groupname TEXT NOT NULL,gid SMALLINT NOT NULL,members TEXT NOT NULL);

groupname 是組名,gid 是組 id,members 是組的成員,有多個成員時,要用逗號隔開。

以上建立了 FTP 用戶和用戶組的數據表。

6 建立磁盤限額數據表

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

);

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

);

以上 quotalimits 表是 FTP 用戶的磁盤限額配置信息,quotatallies 表存放的是用戶磁盤限額變動的信息。

quotatallies 表不需要作修改,由程序自動記錄

下面是 quotalimits 表中各字段的含意:

quota_type 磁盤限額的鑒別

bytes_in_avail 上傳 *** 字節數,就是 FTP 用戶空間容量

bytes_out_avail 下載 *** 字節數

bytes_xfer_avail 總共可傳輸的文件的 *** 字節數 (上傳和下載流量)

files_in_avail 總共能上傳文件的數目

files_out_avail 能從服務器上下載文件的總數目

files_xfer_avail 總共可傳輸文件的數目 (上傳和下載)

7 數據表數據初始化

表全部建完后,就可以創建 FTP 用戶了,在 ftpUser 表中插入一條記錄如下:

INSERT INTO ftpUser (userid, passwd, uid, gid, homedir, shell) values (shine , password( lsquo;yourpassword rsquo;), 2003 , 2003 , /home/shine ,

以上建立了一個新的 FTP 用戶,用戶名為 shine, 密碼為 yourpassword,可以看到密碼用 mysql 的系統函數 password 進行了加密,用戶 id 和組 id 均為 2003,這里隨便填,我填了和系統用戶 ftpUser 和系統組 ftpGroup 相同的 id,不知道會不會有問題。/home/shine 為用戶主目錄,用戶 shell 為空。

如果要想應用到更多的功能,且建立了組的數據表,你也要為此添加記錄,不過一定要注意在 members 的字段多個成員一定要用逗號隔開。

INSERT INTO ftpGroup VALUES (ftpGroup , 2003, ftpUser

下面再來建立初始的用戶磁盤限額信息:

將已經建立的 shine 帳號賦予 50M 空間,最多能上傳 500 個文件,文件傳輸流量為 512k,總共只能傳輸 2000 個文件,插入記錄如下:

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 (lsquo;shine rsquo;, lsquo;user rsquo;, lsquo;true rsquo;, lsquo;soft rsquo;, lsquo;51200000 rsquo;, lsquo;0 rsquo;, rsquo;512000 rsquo;, lsquo;500 rsquo;, rsquo;0 rsquo;, rsquo;2000 rsquo;);

8 運行 proftpd

執行以下命令啟動 proftpd 服務:

/usr/local/proftpd/sbin/proftpd

開一個控制臺輸入:

ftp ftpHostName

輸入用戶名:shine

輸入用戶密碼:yourpassword

成功登錄后執行:

quote site quota

可以看到此用戶的磁盤使用情況。

9 配置 proftpd 執行腳本

cd /usr/local/proftpd/bin

vi proftpd

輸入以下內容:

#!/bin/sh

# ProFTPD files

FTPD_BIN=/usr/local/proftpd/sbin/proftpd

FTPD_CONF=/usr/local/proftpd/etc/proftpd.conf

PIDFILE=/usr/local/proftpd/var/proftpd.pid

# If PIDFILE exists, does it point to a proftpd process?

if [-f $PIDFILE]; then

pid=`cat $PIDFILE`

fi

if [! -x $FTPD_BIN]; then

echo $0: $FTPD_BIN: cannot execute

exit 1

fi

case $1 in

start)

if [-n $pid]; then

echo $0: proftpd [PID $pid] already running

exit

fi

if [-r $FTPD_CONF]; then

echo Starting proftpd…

$FTPD_BIN -c $FTPD_CONF

else

echo $0: cannot start proftpd — $FTPD_CONF missing

fi

;;

stop)

if [-n $pid]; then

echo Stopping proftpd…

kill -TERM $pid

else

echo $0: proftpd not running

exit 1

fi

;;

restart)

if [-n $pid]; then

echo Rehashing proftpd configuration

kill -HUP $pid

else

echo $0: proftpd not running

exit 1

fi

;;

*)

echo usage: $0 {start|stop|restart}

exit 1

;;

esac

exit 0

存盤退出。

chmod +x proftpd

修改此腳本為可執行。

ln ndash;s ./proftpd /etc/rc.d/init.d/proftpd

在 /etc/rc.d/init.d/ 目錄中做一個軟鏈接指向 proftpd 腳本文件。

cd /etc/rc.d/rc0.d

ln ndash;s ../init.d/proftpd ./K15proftpd

cd ../rc1.d

ln ndash;s ./init.d/proftpd /K15proftpd

cd ../rc2.d

ln ndash;s ./init.d/proftpd /K15proftpd

cd ../rc3.d

ln ndash;s ./init.d/proftpd /S91proftpd #注意 S 后面的數字,如果在此目錄中存在 mysql 相關的鏈接文件,請保證這個數字比那個文件中 S 后面的數字大! 這樣 proftpd 將在 mysql 數據庫服務啟動以后再啟動,這是個良好的啟動順序,當然不用管它也沒什么問題。

cd ../rc4.d

ln ndash;s ./init.d/proftpd /S91proftpd

cd ../rc5.d

ln ndash;s ./init.d/proftpd /S91proftpd

cd ../rc6.d

ln ndash;s ./init.d/proftpd /K15proftpd

經過以上設置,每次系統開機時 proftpd 服務將會自動啟動,關機時則會自動停止。

當然,也不必在每個 rc 目錄中都加上鏈接,實際上只需要在執行啟動任務的 rc 目錄中加上就行了,比如 rc3.d,rc4.d,rc5.d,其中 rc4.d 也不是必需的,而 rc3.d 是在系統進入運行級三時自動運行的,無論如何這里要有 proftpd 的鏈接,運行級三是系統正常啟動的級別,而運行級四則是預留的用戶自定義的運行級,所以可不管它,運行級 5 是啟動 X -Window 的,但一般情況下是先進入運行級三,然后才是運行級五,所以也不用在 rc5.d 目錄中建立 proftpd 的鏈接,而運行級六是系統重啟,就不用說了。

一句題外話:

想切換系統運行級可執行:init number,number 是代表運行級的數字,舉個例子:

init 5 等同于 startx

init 6 等同于 reboot

其它運行級就不在這里一一介紹了,有興趣的朋友可自行查閱相關資料。

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“FTP 服務 Proftpd+mysql+quota 的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計8425字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 灯塔市| 清流县| 观塘区| 东方市| 汉寿县| 宁蒗| 西青区| 鹰潭市| 潼关县| 万源市| 沙河市| 丰原市| 临夏县| 甘泉县| 忻城县| 枣阳市| 胶州市| 盐城市| 闻喜县| 大邑县| 山东省| 共和县| 宁化县| 夏河县| 肥西县| 大邑县| 南郑县| 冀州市| 高州市| 玉溪市| 土默特左旗| 阿拉善右旗| 兴城市| 安达市| 宁陵县| 横峰县| 界首市| 阳山县| 宁都县| 沧源| 曲靖市|