ispCP - Board - Support
mysql-User nur für localhost? - Printable Version

+- ispCP - Board - Support (http://www.isp-control.net/forum)
+-- Forum: ispCP Omega International Area (/forum-22.html)
+--- Forum: German Corner (/forum-26.html)
+--- Thread: mysql-User nur für localhost? (/thread-2159.html)

Pages: 1 2


RE: mysql-User nur für localhost? - gOOvER - 01-18-2008 05:41 PM

Natürlich würde das Sinn machen. Meiner Meinung nach würde ispCP wieder ein Stück sicherer werden. Kommt drauf an, ob die Dev's das nachher auch so sehen. Smile


RE: mysql-User nur für localhost? - joximu - 01-18-2008 06:54 PM

Hi

ich denke, solange die Wahl bleibt, darf niemand dagegen sein.

Da alles innerhalb PHP stattfinden, dürfte es auch gut testbar sein (die engne-Teile in Perl sind immer ne kleine Herausforderung :-). Den 3. Teil (delete) kann man sicherlich so machen, dass alle user mit dem Namen gelöscht werden, egal welcher Host... wenn man ihn noch separat eingrichtet hat für eine bestimmte IP, dann braucht man den Eintrag wohl auch nicht mehr, meine ich...

Vielleicht die Variable so benennen, dass man sich auch wirklich nichts anderes drunter vorstellen kann (ONLYLOCALHOST könnte auch etwas sein, was in my.cnf Änderungen bewirkt). "MYSQL_USERDB_HOSTWILDCARD = false" oder so???
Toll wäre ne Liste ... = "localhost, %" oder eben nur "localhost"... aber das ist Zukunftsmusik...

Übrigens: das ganze bezieht sich ja neben mysql.user auch auf die mysql.db Tabelle: die Datenbanken dürfen dann auch nur von den zugelassenen Hosts aus angespochen werden...

Gruss J


RE: mysql-User nur für localhost? - jmeyerdo - 01-18-2008 07:11 PM

Hi!

Danke für die ausführliche Rückmeldung...
joximu Wrote:Den 3. Teil (delete) kann man sicherlich so machen, dass alle user mit dem Namen gelöscht werden, egal welcher Host... wenn man ihn noch separat eingrichtet hat für eine bestimmte IP, dann braucht man den Eintrag wohl auch nicht mehr, meine ich...
Ja, das stimmt. Das wird wohl in 99,98% der Fälle so sein...

joximu Wrote:Vielleicht die Variable so benennen, dass man sich auch wirklich nichts anderes drunter vorstellen kann (ONLYLOCALHOST könnte auch etwas sein, was in my.cnf Änderungen bewirkt). "MYSQL_USERDB_HOSTWILDCARD = false" oder so???
Ok, das klingt wirklich präziser. Das kommt dann mit in die ispcp.conf, oder? Arbeitet Ihr da wirklich mit true/false? An anderen Stellen habe ich auch schon ein "yes" gesehen.

joximu Wrote:Übrigens: das ganze bezieht sich ja neben mysql.user auch auf die mysql.db Tabelle: die Datenbanken dürfen dann auch nur von den zugelassenen Hosts aus angespochen werden...
Da beim INSERT mit "grant all" gearbeitet wird, ist das ein Befehl, der mysql.user und mysql.db gleichzeitig betrifft.
Beim Löschen (in der sql_delete_user()) werde ich das mal testen, da werden scheinbar erst alle Rechte global entfernt und dann wird der User-Eintrag gelöscht. Ist damit auch der Eintrag in der mysql.db weg? Schaue ich heute abend mal und schicke dann am Wochenende den "Mini-Patch".

Viele Grüße,

Jens


RE: mysql-User nur für localhost? - jmeyerdo - 01-19-2008 07:04 AM

Hallo allerseits!

So, ich habe mit den Tests für meinen kleinen Patch begonnen. Dabei ist mir allerdings aufgefallen, dass bei mir (auch mit Download des Files client-functions.php aus dem Trunk - und ohne Änderungen meinerseits) das Löschen der User nicht 100%ig funktioniert.
Und zwar bleibt der Eintrag in der Tabelle mysql.db weiter vorhanden.

Obwohl der Code für den REVOKE auf die Tabellen vorhanden ist, wird er scheinbar aufgrund folgender if-Abfrage nicht ausgeführt:
Code:
if (count_sql_user_by_name($sql, $rs->fields['sqlu_name']) == 0) {
...
} else {
REVOKE
}
Wird an der Stelle nicht nur abgefragt, ob tatsächlich keine User mehr dieses Namens in der ispCP-sql-user-Tabelle vorhanden sind? Warum wird in diesem Fall dann nicht revoked?

Interessanterweise funktionert das REVOKE an der Stelle tatsächlich nicht (mehr?). Warum überhaupt revoken und nicht einfach die Zeile löschen, wenn ohnehin die Rechte geflusht werden (ein paar Zeilen drüber, das kann ja runter).

Soweit meine abendlichen 2 Ct. Was sagen die Profis? Wink

Viele Grüße, Jens


RE: mysql-User nur für localhost? - Zothos - 01-19-2008 11:15 AM

Verbessere es ruhig. Aber teste es auch ob es dann auch funktioniert Tongue


RE: mysql-User nur für localhost? - jmeyerdo - 01-19-2008 06:27 PM

Zothos Wrote:Verbessere es ruhig. Aber teste es auch ob es dann auch funktioniert Tongue
;-) Naja, bei meinen Zweifeln, warum das an der Stelle so ist, hätte ich gerne Rückmeldung von jemandem, der die Stelle/das System deutlich besser kennt.

Meine Analyse sql_delete_user():

[...]
1. User wird in ispCP gelöscht.

2. Die globalen Rechte werden "revoked" (mysql.user). Dieses setzt alle ggf. in der Tabelle gesetzten Rechte auf "N", löscht aber keinen Eintrag.
Warum? Die sollten doch eh komplett deaktiviert sein.
3. Die Einträge in mysql.user werden gelöscht und die Rechte geflusht.
Und hier kommt das ELSE:
4. Die Rechte auf der Tabelle werden "revoked" (mysql.db).
Das scheint nur zu funktionieren, wenn es den mysql.user noch gibt?
Wenn der User entfernt wurde, bekomme ich einen Fehler. Im Standardfall bleiben die Einträge vorhanden.


1. Zum ELSE:
Morgendliche Idee: Ist das eventuell dafür da, falls der User ggf. noch andere Tabellen hat? Ist das über die ispCP-GUI überhaupt möglich?
2. Fehler:
Bleibt aber der Fehler, dass die Einträge in der mysql.db nicht gelöscht werden.
3. Revoke:
Ist das überhaupt notwendig? Mein Problem ist, dass ich an der Stelle meines Wissens nicht prüfen kann, ob die Rechte überhaupt existieren. Ist kein Eintrag für user@% vorhanden (so meine neue Konfig-Möglichkeit) gibt es somit einen Fehler. Ein Löschen des Eintrags wäre einfacher.

Warum nicht "einfach":
1. delete user in mysql.user (wenn vorhanden)
2. delete tabellenrechte mysql.db (wenn vorhanden)
3. flush privileges

Für mich selbst kann ich das natürlich funktionsfähig hacken. Für einen sinnvollen Patch bitte ich um Diskussion. Wink

Viele Grüße, Jens


RE: mysql-User nur für localhost? - joximu - 01-19-2008 07:19 PM

Hi Jens

es wird nur wenige geben, die diesen Code schonmal gelesen haben - ob du denjenigen findest, der ihn geschrieben hat, wage ich zu bezweifeln...
Also, ephigenie und RatS kommen noch vom VHCS her - vielleicht wissen sie mehr. Raphael hat sich sonst schon stark mit dem Code auseinandergesetzt (und bei solche stellen einfach das ganze neu gemacht).

Ich hab nun auch mal diese Funktion angesehen und sehe, vom lesen alleine - nicht durch (erinnert mich an die Forum-Sig von Zothos).

Ich würde vorschlagen: Funktion neu machen, aber ich bitte noch Raphael um seine Meinung (da er zeitverschoben wohnt, kommt die Antwort wohl erst heute Abend).

Gruss Joxi


RE: mysql-User nur für localhost? - RatS - 01-20-2008 09:05 PM

bitte keine globale Konfigurationen, sondern vom Reseller einstellbar für jede Domain und vom Admin einstellbar für jeden Reseller, ob externe Verbindungen erlaubt sind. Würde heißen:

Admin
-- Reseller (nein)
---- Kunde (nein)
-- Reseller (ja)
---- Kunde (ja)
---- Kunde (nein)


RE: mysql-User nur für localhost? - rbtux - 01-20-2008 09:24 PM

RatS Wrote:bitte keine globale Konfigurationen, sondern vom Reseller einstellbar für jede Domain und vom Admin einstellbar für jeden Reseller, ob externe Verbindungen erlaubt sind. Würde heißen:

Admin
-- Reseller (nein)
---- Kunde (nein)
-- Reseller (ja)
---- Kunde (ja)
---- Kunde (nein)


Als Erweiterung für ein zukünftige Version wäre eventuell denkbar bei bestimmten Domains den Zugriff für bestimmte IPs freizuschalten und nicht %...


RE: mysql-User nur für localhost? - jmeyerdo - 01-20-2008 10:02 PM

Na, Ihr seid ja lustig. Wink

Vielleicht fangen wir mit Schritt 1 (globale Konfiguration) an. Das zieht weniger Änderungen nach sich - die aber alle für die weiteren Schritte grundlegend notwendig sind (z.B. sollte man User löschen können, ohne dass es Fehler gibt, weil der "user@%"-Eintrag nicht gesetzt ist.

Also zurück zu den Kernfragen würde das bedeuten:

- ist mein oben angesprochener Fehler (Einträge werden nicht gelöscht) bei Euch reproduzierbar?
- wäre mein Workaround/neuer Weg (kein Revoke, Löschen der Einträge und flushen der Rechte) der richtige?

Viele Grüße,

Jens