# 403 Forbidden You don't have permission to access / on this server.



## rfe (17. Juni 2015)

Hallo Leute,
vielleicht kann mir von euch noch einen anderen Input geben. Das Thema wurde ja schon mehrfach hier besprochen, ich durchsuche schon seit Tagen auch das Netz nach Infos. Alles was ich bis jetzt versucht habe ist gescheitert.
Folgendes Problem:
Kunde hat bis dato immer brav den web-Ordner benutzt. Nun will er seine Website (Basis Typo3) in einem anderen Verzeichnis haben. Auch kein Problem, ISPCONFIG Apache Direktive DocumentRoot ändern, nun ist das aber kein Verzeichnis sondern ein SymLink auf ein anderen Verzeichnis.
Die Änderung in der Apache Direktve greift sofort, es wir laut error.log auch versuch die index.php in dem physikalischen Ordner zu laden aber wir bekommen einen 403. Ich habe alle Rechte geprüft, hab die Option +FollowSymlink auch mal direkt in der domain.vhost eingetragen nichts passiert, es kommt immer der 403-Fehler.
Dann habe ich Testweise einen physikalischen Ordner im web-Verzeichnis erstellt, eine index.php erstellt, den DocumentRoot per ISPCONFIG Apache Direktive auf das physikalische Verzeichnis gesetzt und es geht alles gut.
Ab dem web Verzeichnis hat alles 0755 als mod, alle Verzeichnisse wurde brav über webid:clientid erstellt nichts is root:root oder sonstiges.

Habt ihr nen Tipp?


----------



## Till (17. Juni 2015)

Wie lautet der exakte Fehler aus dem error.log der Webseite?


----------



## rfe (17. Juni 2015)

Der exakte Fehler lautet 
[client 217.86.243.102:61152] AH00037: Symbolic link not allowed or link target not accessible: /var/www/clients/client1/web102/web/current/index.php


----------



## rfe (17. Juni 2015)

Nach diesem Fehler habe ich auch schom im Forum gesucht


----------



## rfe (17. Juni 2015)

Braucht ihr noch weitere Infos von mir?


----------



## JeGr (18. Juni 2015)

dann ist der Link auf "current" entweder nicht korrekt oder dein VHost erlaubt den Symlink nicht. Sinnvoll wäre den Symlink mit dem Benutzer des webs/clients anzulegen, zu prüfen ob (bei Apache) +FollowSymLinks oder +SymLinksIfOwnerMatches gesetzt ist und dann noch recht wichtig, ob das Zielverzeichnis überhaupt erlaubt ist. Sprich: ob im Apache für das physikalische oder logische Verzeichnis ein Directory Eintrag existiert, der erlaubt, dass hier Daten abgerufen und Skripte ausgeführt werden. Ansonsten könnte es sein, dass hier schlicht das vererbte "deny all" greift und er damit nichts aus dem Ordner öffnen darf. Es hängt also davon ab, wo der Link "current" hin zeigt.

Ein einfacher Test wäre das Verzeichnis, auf das current zeigt (typo3_src?) einfach ebenso in den web Ordner zu schieben und den DocumentRoot dann eine Ebene tiefer auf das gewünschte Verzeichnis zu legen, damit die anderen Verzeichnisse wie sich das T3 wünscht, nicht via Web zugänglich sind. Dann hättest du aber trotzdem alles im web Verzeichnis und demzufolge auch alles im PHP "open_basedir" etc.


----------



## rfe (18. Juni 2015)

Erst mal Danke fürs schnelle Feedback.

Ich hab mir mal den Symlink angesehen, dessen rechte ja immer auf 0777 stehen, die zugewiesene Gruppe, sowie der zugewiesene Eigentümer ist korrekt auf webyx:clientxy eingestellt und wurde per ssh auch nicht via root gemacht, sondern via Benutzer ssh-Zugriff.
nachfolgend mal die vhost in welcher ISPCONFIG ja über die Apache Direktive am Schluß den Eintrag für den DocumentRoot nochmal anfügt

<Directory /var/www/xx.xxxxx.de>
     AllowOverride None
         Require all denied
     </Directory>

<VirtualHost *:80>
           DocumentRoot /var/www/xx.xxxxx.de/web

     ServerName xx.xxxxx.de
     ServerAlias www.xx.xxxxx.de
     ServerAdmin webmaster@xx.xxxxx.de

     ErrorLog /var/log/ispconfig/httpd/xx.xxxxx.de/error.log


     <IfModule mod_ssl.c>
     </IfModule>

     <Directory /var/www/xx.xxxxx.de/web>
         # Clear PHP settings of this website
         <FilesMatch ".+\.ph(p[345]?|t|tml)$">
             SetHandler None
         </FilesMatch>
         Options +FollowSymLinks
         AllowOverride All
                 Require all granted

         # ssi enabled
         AddType text/html .shtml
         AddOutputFilter INCLUDES .shtml
         Options +Includes
     </Directory>
     <Directory /var/www/clients/client1/web102/web>
         # Clear PHP settings of this website
         <FilesMatch ".+\.ph(p[345]?|t|tml)$">
             SetHandler None
         </FilesMatch>
         Options +FollowSymLinks
         AllowOverride All
                 Require all granted

         # ssi enabled
         AddType text/html .shtml
         AddOutputFilter INCLUDES .shtml
         Options +Includes
     </Directory>

     <IfModule mod_ruby.c>
       <Directory /var/www/xx.xxxxx.de/web>
         Options +ExecCGI
       </Directory>
       RubyRequire apache/ruby-run
       #RubySafeLevel 0
       AddType text/html .rb
       AddType text/html .rbx
       <Files *.rb>
         SetHandler ruby-object
         RubyHandler Apache::RubyRun.instance
       </Files>
       <Files *.rbx>
         SetHandler ruby-object
         RubyHandler Apache::RubyRun.instance
       </Files>
     </IfModule>

     <IfModule mod_perl.c>
       PerlModule ModPerl::Registry
       PerlModule Apache2::Reload
       <Directory /var/www/xx.xxxxx.de/web>
         PerlResponseHandler ModPerl::Registry
         PerlOptions +ParseHeaders
         Options +ExecCGI
       </Directory>
       <Directory /var/www/clients/client1/web102/web>
         PerlResponseHandler ModPerl::Registry
         PerlOptions +ParseHeaders
         Options +ExecCGI
       </Directory>
  <Files *.pl>
         SetHandler perl-script
  </Files>
     </IfModule>

     <IfModule mod_python.c>
       <Directory /var/www/xx.xxxxx.de/web>
         <FilesMatch "\.py$">
           SetHandler mod_python
         </FilesMatch>
         PythonHandler mod_python.publisher
         PythonDebug On
       </Directory>
     </IfModule>

     # cgi enabled
   <Directory /var/www/clients/client1/web102/cgi-bin>
             Require all granted
           </Directory>
     ScriptAlias  /cgi-bin/ /var/www/clients/client1/web102/cgi-bin/
     <FilesMatch "\.(cgi|pl)$">
       SetHandler cgi-script
     </FilesMatch>
     # suexec enabled
     <IfModule mod_suexec.c>
       SuexecUserGroup web102 client1
     </IfModule>
     # php as fast-cgi enabled
   # For config options see: http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html
     <IfModule mod_fcgid.c>
         IdleTimeout 300
         ProcessLifeTime 3600
         # MaxProcessCount 1000
         DefaultMinClassProcessCount 0
         DefaultMaxClassProcessCount 100
         IPCConnectTimeout 3
         IPCCommTimeout 600
         BusyTimeout 3600
     </IfModule>
     <Directory /var/www/xx.xxxxx.de/web>
         <FilesMatch "\.php[345]?$">
           SetHandler fcgid-script
         </FilesMatch>
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php3
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php4
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php5
         Options +ExecCGI
         AllowOverride All
                 Require all granted
             </Directory>
     <Directory /var/www/clients/client1/web102/web>
         <FilesMatch "\.php[345]?$">
           SetHandler fcgid-script
         </FilesMatch>
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php3
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php4
         FCGIWrapper /var/www/php-fcgi-scripts/web102/.php-fcgi-starter .php5
         Options +ExecCGI
         AllowOverride All
                 Require all granted
             </Directory>


     # add support for apache mpm_itk
     <IfModule mpm_itk_module>
       AssignUserId web102 client1
     </IfModule>

     <IfModule mod_dav_fs.c>
     # Do not execute PHP files in webdav directory
       <Directory /var/www/clients/client1/web102/webdav>
         <ifModule mod_security2.c>
           SecRuleRemoveById 960015
           SecRuleRemoveById 960032
         </ifModule>
         <FilesMatch "\.ph(p3?|tml)$">
           SetHandler None
         </FilesMatch>
       </Directory>
       DavLockDB /var/www/clients/client1/web102/tmp/DavLock
       # DO NOT REMOVE THE COMMENTS!
       # IF YOU REMOVE THEM, WEBDAV WILL NOT WORK ANYMORE!
  # WEBDAV BEGIN
       # WEBDAV END
     </IfModule>

DocumentRoot /var/www/clients/client1/web102/web/current
</VirtualHost>

Wie gesagt, stelle ich den DocumentRoot auf ein physikalisches Verzeichnis, z.B. typo3_src, dann funktionieren es auch, auch die darin enthaltenen Symlinks die typo3 bei der Installation anlegt. Nur sobald vom Verzeichnis web/ auf den Symlink current verweise, welcher dann auf einen Ordner in einem anderen Ordner verweist und die dortige typo3 index.php versucht zu öffnen, bekomme ich keinen Zugriff. Eine .htaccess ist drin.


----------



## JeGr (18. Juni 2015)

Ist die Konfigurtation nur für ein Typo3? Dann würde ich da aber mal ganz schön aufräumen und einigen Salat rauswerfen - auch im Panel. Wenn da T3 läuft, was braucht der dann SSI Includes, Perl, Ruby, Python und sonstigen Krawall... Ich setze sowas wie eine Firewall auf - so wenig wie möglich erlauben, damit hinterher keiner kommt weil ihm einer ne perl/ruby/python/sonstwas Shell reingeladen hat. PHP ist schon genug Streß sicher zu halten.

Bei Apache bin ich mir unschlüssig, wie ein zweiter DocumentRoot greift, ob dieser Präferenz über dem obigen hat, aber nehmen wir mal an, dass er funktioniert (da Fehlermeldung darauf hindeutet). 

1) Ist der DocRoot unten im gleichen Verzeichnis wie oben? Also client1/web102 oder ist es ein anderer? Dann hättest du hier ein Problem wegen Rechten
2) auf welches Ziel zeigt der current Symlink? Ist das Ziel innerhalb von .../web/ oder außerhalb? Wenn außerhalb und User/Client/Gruppe unterschiedlich sind, wirds problematisch, da dann die Filesystem Rechte nicht mehr passen
3) Ist das Ziel von current überhaupt im PHP open_basedir?

Das sind alles Punkte die mir gerade spontan auffallen.


----------



## rfe (18. Juni 2015)

Nein, die Konfiguration ist nicht nur für Typo3.
Der zweite DocumentRoot greift, getestet an einem physikalischen Verzeichnis inkl. SymLinks z.B. alte TYpo3 Installation in diesem.
1) ist das gleiche Verzeichnis
2) der Symlink current zeigt auf ein Verzeichnis innerhalb des eigentlichen DocuemntRoot web/
3) das Ziel current ist im PHP open_basedir -> Eintrag erfolgte über IPSONFIG ebenso die Apache Direktive


----------



## rfe (18. Juni 2015)

Wir haben zum Test einen neuen Symlink erstellt, der auf ein Verzeichnis innerhalb eines Verzeichnisses und hier auf eine index.php zeigte. Und siehe da, es funtkioniert alles. Dann haben wir uns mal die Kunden Typo3 index.php angesehen. Tja da wars dann, Fehler gefunden. 
Error caused by Typo3 Agentur. In der index.php war der Fehler versteckt.
Herzlichen Dank an euch für die Unterstützung, Till und JeGr. 
Das System läuft einwandfrei und ein großes Lob an die Entwickler von ISPCONFIG.


----------

