Titel: proftpd mit mod_sql_mysql und mod_quota/mod_quota_sql Beitrag von: snitch 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 Titel: Mal wieder selbst beantwortet ;) Beitrag von: snitch 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 Titel: proftpd mit mod_sql_mysql und mod_quota/mod_quota_sql Beitrag von: Indiana 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. Titel: proftpd Beitrag von: snitch am 24. November 2004, 10:33:50 Gib mal bitte ein proftpd -l ( EIn Ell für list, kein Ihh) aus.
snitch Titel: installation? Beitrag von: snitch am 24. November 2004, 10:44:55 Wie hast Du denn den Server installiert? Als rpm oder mit ./configure ... ??
Gruß Snitch Titel: proftpd mit mod_sql_mysql und mod_quota/mod_quota_sql Beitrag von: Indiana 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. Titel: Group Quota Beitrag von: snitch 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] Titel: proftpd mit mod_sql_mysql und mod_quota/mod_quota_sql Beitrag von: Indiana 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? Titel: kaputtes Paket? Beitrag von: snitch 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 |