熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

proftpd+mysql+quota整合

2022-06-13   來源: MySQL 

  網上關於proftpd的安裝文章實在是不少我只是稍微整理了一下並且使用了新的 quota磁盤限額模塊由於proftpd最新版目前還是RC版加上有些設置不能通用 所以在這裡還是使用
  
  
  
  首先下載源碼
  proftpd:
  ftp:///distrib/source/proftpdtarbz

  mod_quotatab ( 版本的mod_quotatab是用在最新的rc上的)
  modquotatabtargz

  假定你的機器上已經安裝好了mysql
  開始編譯安裝
  將proftpd的源碼包解壓縮到某臨時目錄下
  localhost proftpd # tar jxvf proftpdtarbz
  解壓縮 mod_quotatab
  localhost proftpd # tar zxvf proftpdmodquotatabtargz
  進入 mod_quotatab 目錄
  localhost proftpd # cd mod_quotatab
  把mod_quotatab中的文件拷貝到 proftpd 中的modules 目錄中
  localhost mod_quotatab # cp * /proftpd/modules
  
  在開始運行configure之前我們要先改動一個文件
  進入 proftpd/contrib 目錄
  localhost mod_quotatab # cd /proftpd/contrib
  修改 mod_sql_mysqlc
  localhost contrib # vi mod_sql_mysqlc
  找到#include 把他該為你實際路徑
  如果你的mysql 安裝在 /usr/local/mysql 下就把它修改為#include r
  然後
  localhost contrib # cd
  localhost proftpd # cd
  localhost proftpd #/configure prefix=DIR withmodules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql withincludes=DIR withlibraries=DIR
  需要修改的三個地方
  prefix=DIR 你要安裝到哪裡
  withincludes=DIR mysql 的includes 目錄
  withlibraries=DIR mysql 的lib 目錄
  然後
  make
  make install 完成安裝
  
  接下來進入你安裝好的proftpd目錄 修改etc/nf 文件開始配置
  基本配置我就不多說了網上這類文章有很多實在不會的話自己找找就是了這裡主要介紹如何配置mysql用戶認證和磁盤限額
  
  mysql 用戶認證部分
  在nf中加入以下內容
  
  #設置MySQL認證
  #數據庫聯接的信息DatabaseName是數據庫名 HostName是主機名
  #Port是端口號UserName是連接數據庫的用戶名Password是密碼
  SQLConnectInfo DatabaseName@HostNameort UserName Password
  
  #數據庫認證的類型
  SQLAuthTypes Backend Plaintext
  
  #指定用來做用戶認證的表的有關信息(FTPUSERSFTPGRPS是數據表名字等一會而在下面建立)
  SQLUserInfo FTPUSERS userid passwd uid gid homedir shell
  
  SQLGroupInfo FTPGRPS groupname gid members
  
  #設置如果shell為空時允許用戶登錄
  RequireValidShell off
  
  #數據庫的鑒別
  SQLAuthenticate users groups usersetfast groupsetfast
  
  #如果home目錄不存在則系統會為根據它的home項新建一個目錄
  SQLHomedirOnDemand on
  
  然後在這個數據庫中建立一個用戶表FTPUSERS這個表是必須的
  
  use FTP;
  create table FTPUSERS (
  userid TEXT NOT NULL
  passwd TEXT NOT NULL
  uid INT NOT NULL
  gid INT NOT NULL
  home TEXT
  shell TEXT
  );
  此表格是為了用戶認證所需要的其中useridpasswd是必不可少的userid是用做FTP服務的用戶名passwd是指此用戶的密碼uid是系統用戶的ID也就是所映射的系統用戶gid是所屬系統組的IDhome是該用戶所在的HOME目錄shell可以為該用戶指定相應的shell當然你可以建立更多的字段例如用來記錄用戶登錄次數的count或者是日期的date如果你對配置熟悉了之後你可以根據自己的喜歡添加更多的功能在此就不多講
  如果你想需要所有的功能你還可以添加另外一個需要的表FTPGRPS也就是確定組的表格當然也可以不用這裡講一個它的格式
  create table FTPGRPS (
  grpname TEXT NOT NULL
  gid SMALLINT NOT NULL
  members TEXT NOT NULL
  );
  其中grpname是組的名稱gid是系統組的IDmembers是組的成員注意多成員他們之間要用逗號隔開不能使用空格
  
  為空表格插入記錄
  INSERT INTO FTPUSERS (userid passwd uid gid home shell)
  valueS (user /home/FTP/user );
  
  按此格式你可以插入這每一個用戶添加一個記錄
  如果你要想應用到更多的功能且建立了組的表格你也要為此添加記錄不過一定要注意在members的字段多個成員一定要用逗號隔開
  
  INSERT INTO FTPGRPS VALUES (FTPGRPS FTPUSR);
  四為FTP用戶建立相應的系統用戶
  在本例中只整個FTP服務只提供一個有效的系統用戶FTPUSR和組FTPGRP當然你也可以設置多個系統用戶但出於安全的考慮我只設一個用他來啟動FTP daemon並把所有的FTP用戶映射過這個用戶
  
  先建立FTPGRP組
  groupadd –g –r FTPGRP
  建立FTPUSR用戶
  adduser –u –g –d /home/FTP –s /bin/bash –r FTPUSR
  
  為FTPUSR建立HOME把所有的FTP user 活動空間全放在此目錄下
  mkdir /home/FTP
  chown FTPUSR /home/FTP
  chgrp FTPGRP /home/FTP
  
  到這裡MYSQL認證部分就算基本配置好了接下來是磁盤限額部分
  
  首先還是編輯proftpd文件
  
  #磁盤限額部分
  QuotaDirectoryTally on
  
  #磁盤限額單位 b|Kb|Mb|Gb
  QuotaDisplayUnits Kb
  
  QuotaEngine on
  
  #磁盤限額日志記錄
  QuotaLog 你的LOG路徑
  
  # 打開磁盤限額信息當登陸FTP帳戶後使用命令 quote SITE QUOTA 後可顯示當前用戶的磁盤限額
  QuotaShowQuotas on
  
  #以下是SQL調用語句不用修改直接拷貝過去
  
  SQLNamedQuery getquotalimit 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 = %{} AND quota_type = %{}
  
  SQLNamedQuery getquotatally 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 = %{} AND quota_type = %{}
  
  SQLNamedQuery updatequotatally UPDATE bytes_in_used = bytes_in_used + %{} \
  bytes_out_used = bytes_out_used + %{} bytes_xfer_used = bytes_xfer_used + %{} \
  files_in_used = files_in_used + %{} files_out_used = files_out_used + %{} \
  files_xfer_used = files_xfer_used + %{} \
  WHERE name = %{} AND quota_type = %{} quotatallies
  
  SQLNamedQuery insertquotatally INSERT %{} %{} %{} %{} %{} %{} %{} %{} quotatallies
  
  QuotaLimitTable sql:/getquotalimit
  QuotaTallyTable sql:/getquotatally/updatequotatally/insertquotatally
  
  然後建立mysql 數據表
  CREATE TABLE quotalimits (
  name VARCHAR()
  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() 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
  );
  
  說明一下quotatallies表不需要作修改它記錄了用戶當前的磁盤使用情況由程序自動記錄
  要注意的是quotalimits 表中一些字段的含意
  quota_type 磁盤限額的鑒別可以設置單各用戶也可以設置一各組中的全部用戶還可以設置全部用戶
  bytes_in_avail 上傳最大字節數就是FTP用戶空間容量 (設置個字段的時候是以byte(字節)為單位
From:http://tw.wingwit.com/Article/program/MySQL/201311/29348.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.