Du bist nicht angemeldet.

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

1

15.03.2013, 20:20

Nicht vergebene UID für virtuellen Nutzer

Hallo,
ich habe auch mal wieder eine Frage die es (meiner Meinung nach) Wert ist im Forum besprochen zu werden. Es geht im allgemeinen um das Aufsetzen eines Servers unter Linux bzw. genau Debian. Ich möchte auf einem Server verschiedene Dienste installieren auf die auch andere Zugriff bekommen sollen. Das ist vorranging erstmal ein Apache auf dem Hosts eingerichtet werden können und ein FTP-Server mit virtuellen Accounts über die auf die Webspaces zugegriffen werden kann. Derzeit habe ich es so eingerichtet das alle virtuellen FTP-Accounts die UID und GID 33 von 'www-data' nutzen und Apache arbeitet auch einfach immer mit 'www-data'. Das ist auch erstmal kein großes Problem da ich alle sehr gut kenne die Daten auf dem Server hosten und das sind wirklich nicht sehr viele. Ich würde das System aber gerne so verändern das die Verzeichnise von den verschiedenen Nutzern unschiedliche UID's als Besitzser haben damit man wirklich auf seinen Bereich beschränkt werden kann.

Nun zur eigendlichen Frage: Wie wird so ein Vorhaben sonst gelöst? Meine Idee währe jedem Nutzer in der Datenbank der virtuellen FTP-Accounts eine andere UID zuzuweißen und in den Apache2-vHosts einfach einen entsprechenden Eintrag über suexec anzugeben. Würde das so funktionieren? Weil immerhin existiert zu den entsprechenden UID's kein Systemnutzer und wenn das funktioniert und durchaus so gemacht werden kann, wie verhindert man dann am bessten das eine UID eines FTP-Accounts doch mal als Systemnutzer existiert?

Weiter hätte ich dan noch Fragen zu suexec. Wiso ist die Verwenung von suexec auf einen Bereich beschränkt (standart /var/www) und wiso muss man bei Änderungen an dem Bereich recompilen? Hätten die das nicht in die Einstellungen integrieren können oder habe ich da irgendwas missverstanden? Wenn es zufällig jemand weiß würde ich weiter wissen ob es mit suexec überhaupt möglich ist nur eine UID und eine GID und nicht den Nutzernamen und Gruppennamen anzugeben. Wenn das keiner weiß versuche ich es einfach mal.
Signatur ?

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

2

15.03.2013, 20:41

also ich würde dafür einfach systemaccounts benutzen... spricht da irgendwas gegen?
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

3

16.03.2013, 02:13

Also einmal würde ich die Accounts gerne von den "eigendlichen" Systemnutzern abgrenzen und die Systemnutzer nicht mit den ganzen Accounts für irgendwelche Webprojekte und so "zumüllen". Außerdem müsste ich dann ja festlegen für welche Nutzer ein bestimmter Service funktionieren soll. Da ich nicht ständig die "Whitelist" bzw. "Blacklist" in den Konfigurationen der Dienste aktualisieren möchte müsste ich irgendwie definieren welche "Art" von Nutzer der Service akzeptieren soll.

Zum anderen währe die Handhabung der Nutzer umständlicher (und vieleicht auch langsamer) als wenn sie in einer (My)SQL-Datenbank gespeichert werden würden. Mein Ziel ist es unter anderem auch die Handhabung ein wenig zu automatisieren und den paar Nutzern die ich da habe ein paar Funktionen über kleines Webinterface zur verfügung zu stellen.

Ein drittes Problem das mir gerade beim schreiben eingefallen ist: Wenn ich weitere Services installiere (z.B. Mail-System) kann es vorkommen das sich diese nicht mehr 1:1 decken. Damit meine ich das es Mail-Kontos geben kann zu der es aber kein FTP-Zugang gibt genau so wie es FTP-Zugänge geben kann zu den es keinen Mail-Zugang gibt. Und auch jetzt würde ich schon Probleme bekommen wenn ich mehrere FTP-Accounts einrichten bräuchte die auf das selbe Verzeichnis verweißen.

Ich werde nur das nochmal durch den Kompf gehen lassen aber mir scheint das derzeit keine gute Lösung zu sein.
Signatur ?

JuKu

Profi

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

4

16.03.2013, 09:51

Also Froxlor macht das auch so ähnlich.
Vllt. schaust du dir da mal den Quelltext an. ;)
Jeder Kunde bekommt dort eine feste ID, diese wird auch glaube irgendwie dem FTP-Server übergeben (sodass jeder immer nur seine Verzeichnisse sieht).
Dann bekommt jeder FTP-Account des Kunden noch die selbe UID und GID.
(Also es gibt zusätzlich noch ne Tabelle, wo die Nutzer auch in Gruppen einsortiert werden)
Die GID und UID ist bei Froxlor übrigens immer gleich, was man aber manuell auch abändern kann.
Die FTP-Accounts sind ja virtuell und proftpd mit dem MySql-Modul lädt diese auch einfach so aus der Datenbank, weßhalb das keine großen Probleme machen wird.
Du musst also gar keine System-User anlegen, das ist mit dem MySql-Modul doch überflüssig.^^
Ich glaube auch nicht, dass man dafür noch nen extra Eintrag in der vHost-Datei braucht.
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

5

16.03.2013, 13:17

Vom Prinziep hatte ich es ja so vor wie du es gerade beschriebst. Ich weiß nur eben nicht ob es vieleicht zu irgendwelchen Problemen kommen kann und was man vieleicht zu beachten hat.
Signatur ?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Johannes S.« (16.03.2013, 15:38)


JuKu

Profi

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

6

17.03.2013, 17:50

Hmmm... Da kann ich dir leider auch nicht weiterhelfen. :S
Aber wenn Froxlor das so macht, kann man davon ausgehen, dass es zu keinen Problemen kommt. ;)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

7

18.03.2013, 00:23

Was mir gerade noch aufgefallen ist:
Die GID und UID ist bei Froxlor übrigens immer gleich

Wie ist das genau gemeint. Wenn alle Nutzer die selbe UID und GID haben, dan wird es denke ich einen Systemnutzer geben von dem diese "geklaut" wird wie bei mir derzeit eben von www-data (33). Ich habe mich schon ein wenig in den Sources umgesehen aber noch nicht gesehen wie das worum es mir geht gemacht wird.

Weiter habe ich nach etwas suchen auch festgestellt das suexec überprüft ob es einen Nutzer zu der angegebenen UID und eine Gruppe zu der angegebenen GID gibt und abbricht wen nicht. Daher bezweifle ich das es eine so gute Idee ist. Ich vermute zwar das man diesen check recht einfach auskommentieren könnte um dann zu recompilen aber wenn dieser Ceck eingebaut wurde wird der einen Sinn haben.
Signatur ?

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

8

18.03.2013, 09:08

Ich weiß zwar nicht welchen FTP-Server du verwendest, aber in der Ubuntu Wiki steht zum ProFTPD beispielsweise, dass die UserIDs existieren müssen.

Und wenn die die Benutzer abgrenzen willst kannst du sie doch einfach auf ein Verzeichnis beschränken, auf welches nur sie Zugriff haben oder?

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Johannes S. (18.03.2013)

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

9

18.03.2013, 11:23

Ok, bei ProFTPd habe ich nich garnicht nachgeschaut ob der verlangt das die Nutzer existieren oder nicht. Dann scheint das so wohl nicht zu funktionieren.
Zur Begrenzung auf ein Verzeichnis: Bei dem FTP-Server ist das wohl möglich aber was ist mit den PHP-Skripten. Wenn ein PHP-Script unter /var/www/site1/index.php aufgreufen wird, kann dieser doch einfach über ../site2/... auf die Daten einer anderen Seite zugreifen und auch deren Daten bearbeiten. Wie soll ich das unterbinden ohne unterschiedliche Nutzer zu nehmen und die entsprechenden Rechte zu entziehen?
Oder gibt es da einen Weg?
Signatur ?

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

10

18.03.2013, 11:41

Ich bin mir nicht sicher weil ich das nie gemacht habe, aber ich glaube mit openbase dir könnte das funktionieren.

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

11

18.03.2013, 13:35

mit systemtem accs könnte man das doch voll einfach begrenzen :D
just sayin...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

JuKu

Profi

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

12

18.03.2013, 15:39

Was mir gerade noch aufgefallen ist:
Die GID und UID ist bei Froxlor übrigens immer gleich

Wie ist das genau gemeint. Wenn alle Nutzer die selbe UID und GID haben, dan wird es denke ich einen Systemnutzer geben von dem diese "geklaut" wird wie bei mir derzeit eben von www-data (33). Ich habe mich schon ein wenig in den Sources umgesehen aber noch nicht gesehen wie das worum es mir geht gemacht wird.

Weiter habe ich nach etwas suchen auch festgestellt das suexec überprüft ob es einen Nutzer zu der angegebenen UID und eine Gruppe zu der angegebenen GID gibt und abbricht wen nicht. Daher bezweifle ich das es eine so gute Idee ist. Ich vermute zwar das man diesen check recht einfach auskommentieren könnte um dann zu recompilen aber wenn dieser Ceck eingebaut wurde wird der einen Sinn haben.


Da hast du was falsch verstanden.
DIe UID und GID eines Nutzers / Kunden sind immer gleich. ;)

Kann wirklich sein, dass Froxlor die Benutzer anlegt.
Auch wenn ich mir das nicht vorstellen kann, da die Liste dann viel länger sein müsste.^^
Aber in der Tat möglich, muss ja nur /bin/false in die /etc/passwd eintragen. ;)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

13

18.03.2013, 18:44

Ich bin mir nicht sicher weil ich das nie gemacht habe, aber ich glaube mit openbase dir könnte das funktionieren.

Danke für den Tip, aber so wie ich das verstehe kann man mit dem Tool in keine Verzeichnise die nicht Unterverzeichnise von dem aktuellen Verzeichnis, wo das Script ausgeführt wird, sind. Das heißt auch wenn jemand auf seine eigenen Daten zugreifen möchte, die im Root-Verzeichnis seines Webspaces liegt, das Script das ausgeführt wird aber selbst in einem Unterverzeichnis liegt wird die Aktion geblockt. So habe ich es zumindest auf die schneller verstanden. Vieleicht gibt es auch noch Möglichkeiten solche Aktionen zu erlauben.

Ich war die letzten beiden Tage mit anderen Sachen beschäftigt aber ich werde mich jetzt nochmal mit dem Thema beschäftigen.
Ich denke auch nochmal darüber nach ob ich eine sinvolle Möglichkeit finde, das System über Systembenutzer zu verwalten.
Danke auf jeden Fall erstmal für die Hilfe, ich werde mich hier dann nochmal melden.
Signatur ?

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

14

19.03.2013, 13:44

Nochmal zu open_basedir: Ich habe es mir nochmal angesehen und es währe doch eine Möglichkeit. Allerdings müsste man dan für jeden Webspace eine eigene php.ini erstellen, wenn ich das richtig verstehe.
Signatur ?

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

15

19.03.2013, 15:29

Kannst du das nicht über den Apache vhost setzen?

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

16

20.03.2013, 17:58

Danke, nach dem direckten Googlen nach so einer Möglichkeit habe ich eine entsprechende Funktion gefunden. Hier ein Beispiel:

Quellcode

1
php_admin_value open_basedir     \ "/www-home/example.com/:/usr/lib/php/"

Das kann man dan in eine Directory oder Location-Node packen. Ich denke Directory ist besser damit man z.B. phpmyadmin nicht beeinflusst falls man ein Alias für den vHost definiert hat.

Aber ich habe mit auch die Sources von Froxlor weiter angesehen und dort gibt es in der Tabelle für die Nutzer eine Spalte namens "guid" welche (so wie es bisher aussieht) einfach fortlaufend nummeriert wird und als gid und uid dient. Allerdings fehlen auch noch einige Teile um den Ablauf beim erstellen eines Nutzers wirklich zu verstehen und vieleicht wird der Systemnutzer ja an einer anderen Setlle des Systems angelegt. Auch die Stelle wo der Counter hochgezehlt wird habe ich noch nicht gefunden.
Die stelle wo die nächste guid "generiert" wird lautet lediglich

PHP-Quelltext

1
$guid intval($settings['system']['lastguid']) + 1;
Signatur ?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Johannes S.« (20.03.2013, 18:04)


JuKu

Profi

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

17

20.03.2013, 18:44

Naja, das ist eine Einstellung, die einfach die GID bzw. UID enthält, die zuletzt angelegt wurde. ;)
Und die wird einfach hochgezählt. ;)

Die EInstellung befindet sich in der Settings-Tabelle.
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Johannes S.

Fortgeschrittener

  • »Johannes S.« ist der Autor dieses Themas

Beiträge: 444

Registrierungsdatum: 24.06.2011

Wohnort: Lychen

Danksagungen: 71

  • Private Nachricht senden

18

20.03.2013, 20:47

Ja, aber wo wird die den hochgezählt? Etwa in der intval-Methode? Das währe dan aber kein gut gewählter Bezeichner. Oder wird bei jedem Seitenaufruf die letzte ID aus der DB gelesen, was ich für etwas unnötigen Balast halten würde? Ich habe weiter unten zumindest keine Stelle gesehen die das macht, aber vieleicht habe ich es ja auch nur übersehen bei den ganzen Code-Zeilen.

UPDATE: Ich habe die Stelle gefunden, wo der Wert hochgezählt wird. Es existiert weiter unten ein SQL-Update-Query der den Wert in der Datenbank um eins erhöt. Wobei ich da sagen würde, dass das doch zu einem Fehler führen würde, wenn 2 Nutzer (mehr oder weniger) gleichzeitig generiert werden. Die hätten dann beide die selbe guid O.o
Naja, vieleicht habe ich auch hier irgendetwas übersehen, dass das verhindern soll.
Signatur ?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Johannes S.« (21.03.2013, 18:16)


JuKu

Profi

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

19

22.03.2013, 21:23

Ja, aber wo wird die den hochgezählt? Etwa in der intval-Methode? Das währe dan aber kein gut gewählter Bezeichner. Oder wird bei jedem Seitenaufruf die letzte ID aus der DB gelesen, was ich für etwas unnötigen Balast halten würde? Ich habe weiter unten zumindest keine Stelle gesehen die das macht, aber vieleicht habe ich es ja auch nur übersehen bei den ganzen Code-Zeilen.

UPDATE: Ich habe die Stelle gefunden, wo der Wert hochgezählt wird. Es existiert weiter unten ein SQL-Update-Query der den Wert in der Datenbank um eins erhöt. Wobei ich da sagen würde, dass das doch zu einem Fehler führen würde, wenn 2 Nutzer (mehr oder weniger) gleichzeitig generiert werden. Die hätten dann beide die selbe guid O.o
Naja, vieleicht habe ich auch hier irgendetwas übersehen, dass das verhindern soll.


Ich glaube, diese Möglichkeit besteht in der Tat, wenn sie auch sehr unwahrscheinlich ist. ;)
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D