www.ProFTPD.de
13. März 2007, 20:54:05 *
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: SMF - Neu installiert!
 
   Übersicht   Hilfe Suche Login Registrieren  
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: proftpd mit mod_sql_mysql und mod_quota/mod_quota_sql  (Gelesen 609 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
snitch
ProFTPD
*
Offline Offline

Beiträge: 16



Profil anzeigen E-Mail
« am: 09. November 2004, 12:44:16 »

Hallo Forum,

nach einigen Tests bin ich auf eine Frage gestossen. Meine quota-Beschränkungen in der mysql-4.1.x DB funktionieren hervorragend :-D

Meine Überlegung ist nun, kann man ein quota setzen, welches dann für mehrere Benutzerkonten des proftpd gilt? Es bezieht sich ja mit der Berechnung der Tallies nur auf den Traffic der über den ftpd läuft.

Als Beispiel möchte ich user a und user b für einen domainnamen einrichten.
Dann soll diese Domain ein Webspace von bsp. 250 MB bekommen.
Wenn nun user a 100 MB hoch läd, soll der User b nur noch 150 MB hoch laden dürfen.

Gibt es dafür eine Lösung mit mod_quota und mod_quota_sql ?

Grüsse aus Oldenburg

Snitch
Gespeichert

Think global, act local! Cool
snitch
ProFTPD
*
Offline Offline

Beiträge: 16



Profil anzeigen E-Mail
« Antwort #1 am: 09. November 2004, 17:44:56 »

Hallo Forum,

ich habe nun wieder selber die Lösung gefunden.

Man muss den proftpd in der Directive -> SQLAuthenticate users* groups*
sagen, dass er user und gruppen authen soll.

Dann wird in der Gruppentabelle eine neue Gruppe angelegt mit einer gid(bsp. -> 600).
Nun noch User anlegen mit der gid der eben erstellten Gruppe.
 
Wichtig ist dabei, das in der Directive -> "SQLUserInfo pro_users username passwd NULL gid homedir NULL" die GruppenID also gid mit aus der mysql Datenbank geholt wird!
Genauso wie bei -> SQLGroupInfo auch die gid gezogen werden MUSS, damit proftpd den Zusammenhang zwischen user und gruppen erkennen kann.

Nun kann man in der quotalimits Tabelle einen eintrag schreiben.
Dort bitte group quota auswählen, und das Limit setzen. Als Gruppennamen gebt ihr den namen, der in der gruppentabelle hinter der gewünschten gid steckt, ein. Wenn also user snitch mit gid 600 angelegt wird und die gruppe snitchgrp mit der gid 600 angelegt wird, dann muss man ein quotalimit auf snitchgrp setzen.

Ich hoffe es hilft jemandem.

snitch
Gespeichert

Think global, act local! Cool
Indiana
Gast
« Antwort #2 am: 24. November 2004, 07:35:36 »

Hi,

Code:
bluepaw1:/# proftpd -vv
 -          Version: 1.2.9 (stable)
 - Scoreboard Version: 01040002
 -      Build Stamp: do mrt 22 18:28:32 CET 2001



ich benutze User und Group quota.

User Quota funktioniert ohne probleme, aber für die gruppe wird das 'quotatallies' nicht erstellt/aktualliesiert.
Im 'SQLLOGFile /var/log/proftpd.sql' ist auch wirklich nur das user quota zu sehen :-(

Hier mal meine konfig, ich dachte bei mir hätte das schon mal funktioniert.


Code:
ServerName "- Welcome to My ProFTPD Server -"
ServerType standalone
ServerAdmin xxx
ServerIdent off

DefaultServer on
DeferWelcome on

Port 21
Umask 022
MaxInstances 30

AllowForeignAddress on
AllowOverwrite on
AllowStoreRestart on
AllowRetrieveRestart on

MaxClientsPerHost 1 "Nicht mehr als %m Verbindungen"
MaxClients 5 "Leider sind schon %m Clients verbunden"
MaxLoginAttempts 3

DefaultRoot ~
RequireValidShell off
RootLogin off

TransferLog /var/log/proftpd.xferlog
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
ExtendedLog /var/log/proftpd.access_log WRITE,READ write
ExtendedLog /var/log/proftpd.auth_log AUTH auth
# ExtendedLog /var/log/proftpd.paranoid_log ALL default
# SQLLOGFile /var/log/proftpd.sql

SQLAuthTypes Crypt
SQLAuthenticate users* groups*
SQLConnectInfo xxx@xxx xxx xxx
SQLUserInfo passwd email crypt uid gid home NULL
SQLGroupInfo ftp_groups domain gid email
SQLUserWhereClause "ftp_access='yes'"
SQLDefaultGID 999
SQLDefaultUID 999
SQLMinUserGID 999
SQLMinUserUID 999
SQLHomedirOnDemand off


QuotaEngine on
QuotaShowQuotas on
QuotaDisplayUnits Mb
#QuotaDirectoryTally on
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session,limit_type, bytes_in_avail, byte
s_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftp_quotalimit
s WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_us
ed, files_in_used, files_out_used, files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quo
ta_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = byte
s_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, f
iles_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}'
AND quota_type = '%{7}'" ftp_quotatallies

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


Es funktioniert wirklich alles bis auf das GROUP-QUOTA.
Die Dateine/Verzeichnisse werden mit der richtigen uid/gid erstellt.
Gespeichert
snitch
ProFTPD
*
Offline Offline

Beiträge: 16



Profil anzeigen E-Mail
« Antwort #3 am: 24. November 2004, 10:33:50 »

Gib mal bitte ein proftpd -l ( EIn Ell für list, kein Ihh) aus.

snitch
Gespeichert

Think global, act local! Cool
snitch
ProFTPD
*
Offline Offline

Beiträge: 16



Profil anzeigen E-Mail
« Antwort #4 am: 24. November 2004, 10:44:55 »

Wie hast Du denn den Server installiert? Als rpm oder mit ./configure ... ??

Gruß
    Snitch
Gespeichert

Think global, act local! Cool
Indiana
Gast
« Antwort #5 am: 28. November 2004, 23:58:34 »

Ich hab Debian als testing (sarge).

Was mich wundert ist das quota_type = 'user' funktioniert,
'group' und 'all' funktionieren nicht. (Es wird kein quotatallies dafür angelegt)
In das 'class' hab ich mich nicht eingelesen wie der name dafür sein muss.

Und ich könte schwören das es schonmal funktioniert hat.

Code:
bluepaw1:~# proftpd -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_auth_pam.c
  mod_quotatab.c
  mod_sql.c
  mod_sql_mysql.c
  mod_quotatab_sql.c
  mod_ratio.c
  mod_tls.c
  mod_rewrite.c
  mod_radius.c
  mod_wrap.c
  mod_quotatab_file.c
  mod_readme.c
  mod_ifsession.c
  mod_cap.c


Die Tabllen- und Spalten- namen sind so "komisch" weil ich dieselben tabellen auch für exim4 nutze.
##### Ab hier detailiert alles was ich habe #####

##### USER Tabelle #####
CREATE TABLE `passwd` (
  `email` char(128) NOT NULL default '',
  `crypt` char(128) NOT NULL default '',
  `name` char(128) NOT NULL default '',
  `uid` int(10) unsigned NOT NULL default '999',
  `gid` int(10) unsigned NOT NULL default '999',
  `home` char(255) NOT NULL default '',
  `maildir` char(255) NOT NULL default '',
  `ftp_access` enum('no','yes') NOT NULL default 'no',
  `ftp_lastlogin` datetime default NULL,
  `ftp_logincount` int(10) unsigned default '0',
  PRIMARY KEY  (`email`)
) TYPE=MyISAM;

INSERT INTO `passwd` VALUES ('webmaster@example.com', '***', 'Web Master', 1001, 1002, '/vdom/xample.com/webmaster/ftpdir', '/vdom/xample.com/webmaster/Maildir', 'yes','2004-11-26 07:14:32', 2);


##### GROUP Tabelle #####

CREATE TABLE `domains` (
  `domain` char(128) NOT NULL default '',
  `gid` int(7) unsigned NOT NULL default '999',
  PRIMARY KEY  (`domain`)
) TYPE=MyISAM;

INSERT INTO `domains` VALUES ('example.com', 1002);

##### GROUP-2-USER Tabelle #####

CREATE TABLE `ftp_groups` (
  `domain` char(128) NOT NULL default '',
  `gid` int(7) unsigned NOT NULL default '999',
  `email` char(128) NOT NULL default '',
  KEY `username` (`email`)
) TYPE=MyISAM;

INSERT INTO `ftp_groups` VALUES ('example.com', 1002, 'webmaster@example.com');


##### Quota Tabellen #####
Aus dem Beispiel (inkulice config): http://www.proftpd.de/MySQL_und_Quota.25.0.html

CREATE TABLE `ftp_quotalimits` (
  `name` varchar(128) NOT NULL default '',
  `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',
  PRIMARY KEY  (`name`)
) TYPE=MyISAM;

INSERT INTO `ftp_quotalimits` VALUES ('example.com', 'group', 'false', 'hard', 1.07374e+09, 0, 0, 10000, 0, 0);
INSERT INTO `ftp_quotalimits` VALUES ('webmaster@example.com', 'user', 'false', 'hard', 1.04858e+07, 0, 0, 100, 0, 0);


CREATE TABLE `ftp_quotatallies` (
  `name` varchar(128) 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',
  PRIMARY KEY  (`name`)
) TYPE=MyISAM;

INSERT INTO `ftp_quotatallies` VALUES ('webmaster@example.com', 'user', 1.11199e+07, 0, 0, 1, 0, 0);
// Hier vermisse ich den group Eintrag :-(

Die proftpd.conf ist ja bereits im ersten post von mir.
Gespeichert
snitch
ProFTPD
*
Offline Offline

Beiträge: 16



Profil anzeigen E-Mail
« Antwort #6 am: 29. November 2004, 09:38:30 »

Hallo,

also wenn Dein user quota funktioniert, dann ist es sicherlich ein proftpd.conf problem. Was ist mit dieser zeile:

SQLGroupInfo ftp_groups domain gid email

domain???  Benutzt Du das Feld als Gruppennamen?

Du brauchst nen User der die selbe gruppenid hat, wie die gruppe. Fummel mal ein wenig mit den Parametern in der Konfig rum, das wird klappen!

Bei mir war anfangs auch ein Group quota Problem, was ich aber durch das setzen der gid im Userdatensatz beheben konnte.
Hier meine proftpd.conf:
Code:

SQLAuthTypes Crypt
SQLAuthenticate users* groups*
SQLConnectInfo *@localhost *** ***
SQLUserInfo pro_users username passwd NULL gid homedir NULL
SQLGroupInfo pro_groups groupname gid username
SQLUserWhereClause "valid = 1"
SQLDefaultUID 48
SQLHomedirOnDemand off
SQLMinUserGID 100
SQLMinUserUID 500
RequireValidShell off
SQLLog PASS updatelogin
SQLNamedQuery updatelogin UPDATE "count=count+1, lastlogin=NOW() WHERE username = '%u'" pro_users



SQLDefaultUID 48 sagt dem FTP Server das er immer als Benutzer apache nutzen soll, beim schreiben der Dateien auf der HDD.
Somit sieht eine Datei mit Ihren Rechten etwa so aus:  48:501.
Somit kann apache die Daten lesen, und du kannst über die gid quotas setzen.

Snitch[/code]
Gespeichert

Think global, act local! Cool
Indiana
Gast
« Antwort #7 am: 01. Dezember 2004, 07:28:41 »

Ich würde sagen meine .conf ist clean.
My proftpd.conf: http://nopaste.php-q.net/99944

SQL-Logging zeigt auch schön wie er UID+GID aus den beiden Tabellen läd und cached.
Beim login holt er sich dann auch das Quotalimit und Quotatally für 'user', für keinen der 3 anderen typen probiert er es auch nur.

Wenn ich Files uploade werden diese auch mit UID:GID korrekt angelegt.
Heist für mich das er meine group anerkant hat, ansonsten hätte er doch die defaultGId genommen.

Hat Debian vieleicht ein corupted package?
Gespeichert
snitch
ProFTPD
*
Offline Offline

Beiträge: 16



Profil anzeigen E-Mail
« Antwort #8 am: 01. Dezember 2004, 09:38:02 »

Also wenn Du meinst das es am package liegt, nímm doch mal die sourcen von proftpd, andernfalls weiss ich es auch nicht. Ich habe den proftpd als
src rpm gezogen, auf meinem System übersetzt, und installiert. Dann einen Tag konfiguriert, das wars. Er schreibt das Tally auch erst wenn der User der Gruppe einloggt, Daten sendet und wieder ausloggt.

Snitch
Gespeichert

Think global, act local! Cool
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS
Seite erstellt in 0.239 Sekunden mit 15 Zugriffen.