Syscp PHP mit fcgi (Rechteproblem)

Mordor

Registered User
Hallo Zusammen
Ich bin gerade dabei mir Syscp in ner Test-VM zu installieren, nur bin ich gerade auf ein Problem gestossen.

Hier mal kurz zur Konfiguration
- Debian Lenny
- Apache-mpm-Worker mit fcgi/suexec und php5-cgi
- nss-mysql für die user
Die Pakete stammen alle aus den Debian-Quellen

Hier das Problem:
Lege ich einen Kunden an, wird für diesen eine index.html mit den Rechten 750 und dem User und der Gruppe des Kunden angelegt. Rufe ich diese index.html im Browser auf, sagt mir der Apache, dass ich nicht genügend Rechte habe. Das Problem ist anscheinend, dass die Datei zwar dem User und der Gruppe des Kunden gehört, dass Apache wenn er eine html-Datei liest, dies aber mit dem User www-data macht. Normalerweise würde man ja jetzt den User www-data der Gruppe des Kunden zuweisen. Das müsste ich aber für jeden Kunden händisch machen. Ausserdem sind die User und Gruppen ja dem System nicht bekannt, da sie mit nss-mysql aus der Datenbank von Syscp gelesen werden.

Gibt es hier eine Möglichkeit, das ganze irgendwie hinzubekommen, so dass es Syscp von alleine löst, und die Rechte beim Erstellen des Kunden schon richtig setzt???

Danke schon mal

Gruß Mordor
 
Du könntest nss-mysql auch für die Gruppenverwaltung einsetzen. Dann könnte man das automatische Eintragen vielleicht sogar durch die Datenbank erledigen lassen ;)
 
Und da war dann auch schon mein Problem :D

Also die Gruppen für den fcgi_user werden ja über nss gesetzt. Die Frage ist ja dann, wie ich es schaffe, nss zu übereden, dass er den user www-data in die Gruppe des Kunden schreibt?
 
Du sollst ja auch nicht nss überreden, sondern die Datenbank ;) Eigentlich sollten sich in der Gruppentabelle doch die entsprechenden Verknüpfungen zu der Syscp-Datenbank erstellen lassen.

Hm... vielleicht doch nicht (bin nicht der DB-Profi). In diesem Fall könnte ein cronjob die DB-Einträge ein paar Mal am Tag aktualisieren.
 
Bin gerade dabei mir das mal richtig reinzuziehen.

Es ist anscheinend schon möglich, über den nss die Gruppenzugehörigkeit von Usern festzustellen. Nur wird das nicht mit der Syscp Datenbank funktionieren, denn da kann ich den User www-data ja schwehr anlegen. Den müsste ich also in einer anderen Tabelle anlegen, wo nur dieser User drinnen steht.

Irgendwo muss es da noch nen anderen workaround geben. Das einfachste wäre wohl die Rechte der html-Dateien auf 755 zu setzen. Dann brauch ich das aber fast nicht mehr mit fcgi machen.
 
Ich bin jetzt schön langsam mit meinem Latein am Ende.

Irgendwie gelingt es mir nicht, den nss-mysql so zu manipulieren, dass er den User www-data mit in die Gruppen der Kunden rein schreibt.

Die Frage die ich mir stelle ist, wie das bei anderenist, die Syscp mit fcgi nutzen? Sind da dann die Rechte der Dateien der User auf 755 oder wird hier der User www-data mit in die Gruppen der User geschrieben?

Was besagt auf einem System mit syscp und fcgi die Ausgabe
Code:
groups www-data
Und welche Rechte haben die Dateien in den Kundenwebordnern?

Gruß Mordor
 
So, das ganze hat sich erledigt.

Das Problem war folgendes:
Immer wenn Syscp nen neuen Kunden erstellt, wird aus dem Template-Ordner von Syscp eine index.html in das neue Kundenverzeichnis kopiert. Da auch Syscp selbst mit fcgi und 750 rechten läuft, hat diese index.html eben auch 750 rechte. ich hab jetzt mal die Rechte der html geändert, und schon geht es.
 
Mordor, hast Du die index auf 755 im Template gesetzt? Das Problem würde ja auch bei per FTP hochgeladenen Bildern bestehen, wenn diese standardmäßig 750 bekommen. Der Apache kann diese dann nicht lesen. Setzt man die Umask auf 022, kann man sich das fcgi-Geraffel sparen, da php-Skript mit 750 statt 755 laufen sollten.

Wie machst Du das in diesem Kontext?
 
Wegen dem Posting bin ich doch überhaupt erst aktiv geworden :=)

*überleg*

Das mit der index.html ist mir nun klar, aber was ist mit den Bilder? Die landen als user.usergroup/750 auf dem Server und der apache versucht als www-data darauf zuzugreifen. Was passiert dann?

Meinen neuen Usergroups füge ich den User www-data deswegen hinzu - wie funktioniert das nun bei syscp?

Sorry, wenn es sich mir noch nicht ganz erschliesst :confused: Noch ein Posting weiter oben lässt mich vermuten, dass keine neuen Usergroups angelegt werden, sondern jeder neue User eine user.www-data Zuordnung bekommt?!

Und danke für die Aufklärung :)
 
Last edited by a moderator:
Das Problem war nicht Syscp!

Ich habe für Syscp einen eigenen Systemuser mit Gruppe angelegt, und www-data der Gruppe von Syscp hinzugefügt. Danach hab ich den kompletten Webordner mit den Rechten 750 versehen. Also waren auch alle Templatedateien von Syscp mit den Rechten 750 versehen.
Wenn man jetzt mit Syscp einen neuen Account mit einer Domain anlegt, wird bei der Auccounterstellung eine index.html aus dem Templatesordner von Syscp in den Webordner des neuen Accounts kopiert. Da man ja den Syscpordnenr mit 750 versehen hat, hat diese HTML-Datei auch die Rechte 750, kann also von www-data nicht gelesen werden, da Syscp fr den neuen Account nen eigenen Fcgid-User erstellt, in dessen Gruppe www-data ja nicht enthalten ist. Lädt man in diesen neuen Webordner jedoch etwas mit FTP hoch, so werden die Daten mit 755 Rechten erstellt, der Webserver kann diese also lesen. Genau so ist es auch, wenn man etwas über ein PHP-Skript hochlädt.

Der Konfigurationsfehler lag also ganz klar auf meiner Seite, da ich den Templatesordner von Syscp mit den falschen Rechten belegt hatte.

Die User für Fcgid die Syscp anlegt, stehen nicht in der passwd, sondern in der Datenbank, und werden mit hilfe von libnss-mysql ausgelesen und mit nscd gecached. Das Problem hier ist, dass man nicht ohne weiteres www-data den Gruppen hinzufügen kann, da man sonst das komplette Skript von libnss-mysql hacken müsste. Deshalb verwendet Syscp eben 755 Rechte auf den Webordnern der Kunden.
 
Jo, dann ist es ja so, wie ich vermutet habe. Leider wird durch den 755 chmod das Sicherheitskonzept von fcgi/suexec für PHP-Skripte etwas aufgeweicht...

Danke für Deine ausführliche Erklärung!
 
Jupp, das mit den 755 Rechten passt mir auch noch nicht so ganz. Bin da gerade am rumprobieren, ob ich das noch irgendwie mit nicht ganz so viel Aufwand hinbekommen kann. Nur der libnss scheint da etwas Probleme zu machen. Dateirechte mit 750 würden mir auch wesentlich besser passen, denn das wäre noch ein stück Sicherheit mehr in der Tasche.
 
Open_basedir ist ja immerhin etwas, wenn auch nur ein Changeroot auf Applikationsebene. Und mit der der Disable-Direktive hat man erstmal einen Schutz, der zumindest PHP selbst mit dem was möglich ist, abschottet.

Immer noch besser als dieses Schrott mod_php mit einem hochpriveligierten www-data als User und wirren Rechten durch FTP-/PHP-Uploads :D
 
hi mordor,
würdest du evtl. die angepassten datein:
*
/etc/nss-mysql-root.conf
*
/etc/nss-mysql.conf
*
/etc/nsswitch.conf
weitergeben?
ich tu mich schwer mit denen.

vielen dank!
 
Die stimmen eigentlich so, wie sie bei Syscp drinnen stehen. Kann sie dir aber gerne geben:

nss-mysql-root.conf
Code:
conf.version = 2;
shadow.host = inet:localhost:3306;
shadow.database = syscp;
shadow.db_user = syscp; 
shadow.db_password = yourpasswd;
shadow.backup_host = ;
shadow.backup_database = ;
shadow.table = ftp_users u;
shadow.where_clause = ;
shadow.userid_column = u.id;
shadow.user_column = u.username;
shadow.password_column = u.password;
shadow.lastchange_column = UNIX_TIMESTAMP()-10;
shadow.min_column = 1;
shadow.max_column = 2;
shadow.warn_column = 7;
shadow.inact_column = -1;
shadow.expire_column = -1;
nss-mysql.conf
Code:
conf.version = 2;
        users.host = inet:localhost:3306;
        users.database = syscp;
        users.db_user = syscp;
        users.db_password = yourpasswd;
        users.table = ftp_users u;
        users.where_clause =;
        users.user_column = u.username;
        users.password_column = u.password;
        users.userid_column = u.id;
        users.uid_column = u.uid;
        users.gid_column = u.gid;
        users.realname_column = u.username;
        users.homedir_column = u.homedir;
        users.shell_column = u.shell;
        groups.group_info_table = ftp_groups g;
        groups.where_clause = ;
        groups.group_name_column = g.groupname;
        groups.groupid_column = g.id;
        groups.gid_column = g.gid;
        groups.password_column = "x";
        groups.members_table = ftp_groups ug;
        groups.member_userid_column = ug.customerid;
        groups.member_groupid_column = ug.id;
nsswitch.conf
Code:
passwd:         compat mysql
group:          compat mysql
shadow:         compat mysql

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis
Danach dann bitte noch ein
Code:
chmod 700 /etc/nss-mysql-root.conf
dass die Rechte richtig gesetzt sind. Dann sollte eigentlich alles funktionieren. Wenn nicht, dann stehen die Logeinträge im auth.log.
 
Back
Top