Folgendes soll umgesetzt werden:
in einem Webspace soll zum Einen an PHP Files entwickelt werden, zum Anderen soll das Ergebnis auch als normale Website sichtbar sein.
Der Zugang soll nur authentifiziert möglich sein, allerdings soll weder FTP noch SSH als Zugang verwendet werden.
Warum?
- FTP läuft auf dem Server gar nicht erst und würde das übliche "die Datei / der Ordner gehört nicht dem Apache User" Problem mit sich bringen (da keine fcgi Konstruktion).
- SSH ist bei Weitem zu privilegiert, dem authentifizierten User soll kein Zugang zum Dateisystem gewährt werden. (und Dateirechte Problem siehe Punkt 1)
Der Lösungsansatz: Zwei VirtualHosts (eigene Subdomain) mit einem gemeinsamen DocumentRoot, einer als normaler Webspace, einer mit Webdav.
Getestet und für gut befunden mit Linux-Server (mit Apache als Webserver) und Linux-Client.
Voraussetzungen:
- mod_dav und mod_dav_fs sind geladen (Apache)
- mod_auth_digest ist geladen (da Authentifizierung via Digest)
- Direktive NameVirtualHost *:80 ist aktiv
Die entsprechende Konfiguration der VirtualHosts sieht so aus:
<VirtualHost *:80>
ServerName beta.mydomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/beta
<Directory /var/www/beta>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
<Location />
AuthType Digest
AuthName "Mydomain Beta Web"
AuthDigestDomain / http://beta.mydomain.com/
AuthUserFile /etc/apache2/authfiles/passwd-beta
Require valid-user
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName beta-dav.mydomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/beta
<Directory /var/www/beta>
Options Indexes
AllowOverride None
Order allow,deny
allow from all
DAV On
# we also need to edit these:
<Files ~ "^\.ht">
Order allow,deny
allow from all
</Files>
# show plain text source
<FilesMatch "\.(html?|php)$">
ForceType text/plain
</FilesMatch>
# just in case.. always show directory listing
DirectoryIndex index.notusedhere
# don't parse php at all
php_value engine off
</Directory>
<Location />
AuthType Digest
AuthName "Mydomain Beta Files"
AuthDigestDomain / http://beta-dav.mydomain.com/
AuthUserFile /etc/apache2/authfiles/passwd-beta
Require valid-user
</Location>
</VirtualHost>
Hinweis zu DirectoryIndex: Damit auf alle Fälle eine Liste der Dateien und nicht automatisch der Inhalt von index.php oder index.html o.ä. ausgegeben wird, verwende ich hier einen Dateinamen, der höchst unwahrscheinlich ist. Läge in einem Ordner tatsächlich eine Datei mit dem Namen
index.notusedhere, würde Apache die als index ausgeben.
Die passende Digest passwd Datei wird wie folgt angelegt:
cd /etc/apache2/authfiles/
htdigest -c passwd-beta "Mydomain Beta Web" userlein
### password prompt...
htdigest passwd-beta "Mydomain Beta Files" userlein
### password prompt
Jeder User, der sowohl über den Browser, als auch über einen Webdav Client (z.B. Nautilus) Zugang haben soll, muss zweimal - einmal für jeden
realm - angelegt werden. Die realms (Mydomain Beta Web/Mydomain Beta Files) müssen mit den
AuthName Einträgen des VirtualHost übereinstimmen.
Ubuntu LTS User (lucid, 10.4) haben dann noch ein Problem mit der umask, die Rechte der hoch geladenen Dateien sind immer 600 - wie auf
bugs.launchpad.net/ubuntu/.../+bug/540747 beschrieben.
Unerschrockene greifen sich ein Debian Paket und "entlehnen" die dav module
- /usr/lib/apache2/modules/mod_dav_fs.so
- /usr/lib/apache2/modules/mod_dav_lock.so
- /usr/lib/apache2/modules/mod_dav.so
Das wiederum hab ich auf
blog.fh-kaernten.at/...webdav-0600-file-mask-problem-ubuntu-lucid/ gefunden.
Allerdings überschreibt das nächste Ubuntu Apache Update die Dateien klarerweise wieder. Es handelt sich also um eine krude Notlösung.
Update: das Problem mit den Berechtigungen ist endlich behoben (apache2 (2.2.14-5ubuntu8.9), 15.3.2012) - es hat ziemlich gedauert.
Tipp: mit
mount.davfs (Paket davfs2) kann ein Webdav Ordner gemounted werden. Dadurch kann man so arbeiten, als wäre alles lokal auf Platte (shell, git,...)