Webserver für mehrere Nutzer konfigurieren

Falk

New Member
Einen wunderschönen guten Morgen!

Seit nun knapp 4 Stunden bin ich mal wieder am experimentieren mit meinem kleinen lokalen Server. Woran ich mich heute einmal versuchen wollte, war die Einrichtung eines Webservers für verschiedene Nutzer, ähnlich wie es bei jeden Webhoster alltäglich ist. An sich hat auch bisher alles ganz gut geklappt, jedoch sind ein paar Fragen meinerseits offen. Vielleicht kann mir ja jemand dort einmal weiterhelfen. Zunächst aber kurz meine Vorgehensweise.

Wie bereits gesagt war die Aufgabe. Einrichtung des Webserver für verschiedene Nutzer, wobei ein Nutzer mehrere Domains besitzen kann. Diese sollen selbstverständlich ihre Daten per FTP hochladen können, ansonsten aber vom System ausgeschlossen sein. Der Vollständigkeit halber noch die verwendete Serverversion: Apache 2 auf Ubuntu Server 7.10.

Ok, was hab ich bisher getan?

Zunächst sollte ein neuer Benutzer mit der Kennung web1 angelegt werden, dessen Homeverzeichnis im DocumentRoot des Apache-Server liegt (srv/www/web1).
Als Shell hat der neue Webmaster /bin/false zugewiesen bekommen, so dass er sich anderweitig nicht auf dem System einloggen bzw. bewegen kann. Per
Code:
chown web1:www-data /srv/www/web1
wurde anschließend das neue Homeverzeichnis dem Apache zugewiesen.
In dem Homeverzeichnis habe ich dann die Unterverzeichnisse html, cgi-bin, tmp erstellt. Da wie oben bereits erwähnt wurde, ein Nutzer mehrere Domains besitzen kann, sollten nun in html vom Nutzer die zur Domain zugehörigen Datenverzeichnisse angelegt werden.

Beispielsweise soll die Domain meineDomain.net auf das lokale Verzeichnis meineDomain referenziert werden. In diesem landet dann der eigentliche Inhalt des Nutzer. Realisiert wird dies letztlich durch die VirtualHost-Definition auf die ich nun an dieser Stelle zunächst nicht weiter eingehen möchte.
Mein derzeitiges Problem liegt im korrekten Zuordnen der Verzeichnis- und Benutzerrechte. Also wem muss welches Verzeichnis gehören, damit zum einen die Seite unter meineDomain angezeigt wird, gleichzeitig aber auch der Nutzer per FTP beispielsweise ein neues Verzeichnis / Datei (bsp.: meineDomain/test/index.html) erstellen kann und diese auf Anhieb auch korrekt gelesen werden kann. Das hat bei mir heute Abend irgendwie nicht richtig klappen wollen. Die Fragestellung ist sicherlich einfach, allerdings hab ich heute Abend den Wald vor lauter Bäumen nicht gesehen.

Auch würde mich generell mal interessieren, ob dieser Weg halbwegs ok ist bzw. was man anders machen sollte. Mir geht es hierbei zunächst nur um den reinen Lernfaktor, darum können auch gerne Alternativen vorgeschlagen werden.

Ich danke euch fürs Lesen und hoffe, dass ihr meinen Ausführungen halbwegs folgen konntet.

Schöne Grüße
Falk
 
Hallo Falk,

deine Idee ist schonmal gut. Du musst nur die Schreibrechte / Leserechte soweit anpassen.

Dazu gibt es in der Wikipedia einen umfangreichen Artikel: Unix-Dateirechte – Wikipedia

Für dich wäre wenn man nach diesem Artikel geht der Wert 770 optimal.
Daher der Benutzer (web1) kann die Datei lesen / schreiben / ausführen und die Gruppe (www-data) kann ebenfalls die Datei lesen / schreiben / ausführen.

Achte bei diesem Setup in Verbindung mit PHP auf die Open Basedir Anweißung. Die solltest du in jedem Vhost für den jeweiligen Benutzer setzten damit dieser nicht aus seinem Verzeichniss ausbrechen kann. Bei nicht gesetztem Open Basedir kann jeder in der Gruppe (www-data) die Dateien von anderen webX verändern.

Alternativ dazu könntest du PHP suphp (http://www.suphp.org) einbinden. Wenn du suphp verwendest läuft der PHP Prozess unter dem von dir im Vhost definierten Benutzer.

Natürlich kannst anstatt suphp auch fcgid in Verbindung mit suexec nehmen. Damit lässt sich mit ein wenig mehr aufwand ein änhliches Setup wie bei der Verwendung von suphp einrichten.
 
Hallo bibabu!

Danke für deine Antwort. Ich denke ich habe es jetzt auch soweit hin bekommen. Allerdings würde ich gerne an dieser Stelle nun einmal einer meiner VHost-Konfigurationen vorstellen und würde mich freuen, wenn jemand da mal drüber schauen könnte.

Code:
<VirtualHost *>
	ServerAdmin webmaster@localhost
	ServerName server-1.dyndns.org
	DocumentRoot /srv/www/web1/html/test
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /srv/www/web1/html/test>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
		# This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
                #RedirectMatch ^/$ /apache2-default/
	</Directory>

	ScriptAlias /cgi-bin/ /srv/www/web1/cgi-bin/
	<Directory "/srv/www/web1/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>
	
	php_admin_value open_basedir /srv/www/web1
	php_admin_value upload_tmp_dir /srv/www/web1/phptmp
	php_admin_value session.save_path /srv/www/web1/phptmp
	php_admin_value safe_mode on

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /srv/www/web1/log/access.log combined
	ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Als nächsten Test steht nun die Einrichtung der MySQL - Datenbank für mehrere Benutzer.
Allerdings habe ich nun festgestellt, dass durch die Kapselung der php-Skripte auf web1 phpmyadmin nicht mehr funktioniert. Und zwar erhalte ich bei Aufruf von domain/phpmyadmin folgende Fehlermeldung:
Code:
Warning: Unknown: open_basedir restriction in effect. File(/usr/share/phpmyadmin/index.php) is not within the allowed path(s): (/srv/www/web1) in Unknown on line 0

Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0

Fatal error: Unknown: Failed opening required '/usr/share/phpmyadmin/index.php' (include_path='.') in Unknown on line 0
.

Leider hab ich mit Google & Co noch keine weitere Hilfestellung gefunden, so dass ich aktuell absolut nicht weiß, wo ich da ansetzen muss.

Würde mich wieder über ein paar Anregungen freuen.

Schöne Grüße
Falk
 
Last edited by a moderator:
Back
Top