Ordnerfreigabe für INTRAnet

Alles, was den Apache betrifft, kann hier besprochen werden.

Ordnerfreigabe für INTRAnet

Postby dmy » 07. July 2014 22:43

Hallo zusammen

Ich hoffe, dass ich mit meinem Anliegen hier richtig bin. Ich habe gute Kenntnisse in VBA-Programmierung, in Javascript kann ich, was ich so benötige und Perl sowie LUA bin ich Anfänger, ist aber nicht so schwierig. Zum Problem: Ich habe auf meiner Synology Perl installiert, um für mein Intranet mit Perl Skripts zu arbeiten. Dies funktioniert wunderbar, die Skripts tun, was sie sollen.

Mein Problem ist jetzt, dass ich auf keinen Ordner ausserhalb des "www" Ordners zugreifen kann. Logge ich mich im Terminal (Mac OS X) als root ein, wird das Skript, welches die Datei ausserhalb des "www" Ordners verwendet, jedoch fehlerfrei ausgeführt, am Skript selbst liegt es demnach nicht. Deshalb vermute ich stark ein Berechtigungsproblem, welches sich ev. mit einer <Directory> Direktive lösen lässt. Nur, wie?

Das Intranet ist in
Code: Select all
/volume1/homes/intranet/www


Das Perl Skript ist in
Code: Select all
/volume1/homes/intranet/www/cgi-bin/


Die Daten sind in
Code: Select all
/volume1/data/


Diese Directory Direktive hat nichts gebracht
Code: Select all
<Directory "/volume1/data">                                                 
    AllowOverride None                                 
    Order allow,deny                                   
    Allow from all                                     
</Directory>


Jemand eine Idee, wie sich mein Problem lösen lässt? Vielen Dank!

PS: Die Daten sollen bewusst nicht innerhalb des "www" Ordners abgelegt werden, da diese noch anderweitig verwendet werden, und da ist der Ablageort unter "www" mehr als nur unschön...

Grüsse
dmy
dmy
 
Posts: 5
Joined: 07. July 2014 22:31
Operating System: Synology DSM 5

Re: Ordnerfreigabe für INTRAnet

Postby Nobbie » 08. July 2014 11:01

Das ist das Konzept von Apache. Das ist ja eine eigene "virtuelle" Welt, quasi ein Betriebssystem unter einem Betriebssystem und der sog. "DocumentRoot" ist der Pfad, wo quasi alle Daten liegen, die von Apache erreicht werden.

Glücklicherweise gibt es aber grundsätzlich zwei Möglichkeiten, auch auf andere Ordner zuzugreifen, obwohl sie nicht unterhalb des DocumentRoot (das ist eben bei Dir der Ordner www) liegen.

a) mit VirtualHosts mehrere Domains mit nur einem Apache verwalten und anlegen. Jeder VirtualHost verhält sich wie ein eigener Apache Server und man kann für jeden VirtualHost einen eigenen DocumentRoot angeben.

b) auch innerhalb einer Domain (ohne VirtualHosts) kann man auf Verzeichnisse außerhalb von DocumentRoot zugreifen, und das geschieht mit Hilfe des sog. "ALIAS". Das ist eine Konfigurationsdirektive für Apache.

Am besten liest Du Dir die Dokumentation zu VirtualHost und/oder Alias aufmerksam durch.

Grundsätzlich ist bei Netzwerklaufwerken zu beachten, dass für den Zugriff auf die sog. "Freigabe" bestimmte Rechte notwendig sind, die an einzelne Benutzer (User) vergeben werden, root wird sicherlich andere Rechte besitzen als Dein eigener Login. Apache läuft seinerseits auch unter einer eigenen UserID (das darf man auch ändern oder anpassen, wobei nicht empfohlen wird, dort root zu nehmen, wobei das bei lokalen Installationen zu Hause egal ist, aber im WWW wäre das eine gefährliche Sicherheitslücke) und diese UserID ist in httpd.conf unter "User = ...." angegeben, dort ist ebenso eine Group angegeben.

Da musst Du sicherstellen, dass die dort angegebenen User/Group auch auf diese Freigabe Zugriff besitzen, sonst bekommst Du mit einiger Wahrscheinlichkeit einen Error 403.

Alles weitere musst Du nun lesen, lernen und ausprobieren.

P.S.: Es gäbe übrigens auch eine dritte Variante (ohne Alias und ohne VirualHost), in dem Du auf Dateiebene einen sog. "Symbolic Link" unterhalb von www auf das Laufwerk (oder einen speziellen Ordner unterhalb der Freigabe) einfügst. Unter OSX heißt ein SymbolicLink glaube ich auch Alias (bin mir aber nicht sicher). Dann sieht es optisch so aus, als lägen die Daten doch unter www, tun sie aber physikalisch nicht. Damit Apache das Laufzeit auch richtig auflöst, muss beim entsprechenden DocumentRoot von www die Option "FollowSymLink" angegeben sein, sonst gibt es erneut Error 403.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Ordnerfreigabe für INTRAnet

Postby dmy » 08. July 2014 11:20

Hallo Nobbie

Vielen lieben Dank für Deine detaillierte Antwort, wirklich sehr hilfreich und nett!

Ich habe gestern kurz vor Mitternacht per Zufall die "Alias" Direktive gelesen und gehofft, dass dies mein Problem lösen wird. Heute Abend werde ich das ausprobieren. Wobei mir die Variante mit dem Symbolic-Link (ja, die Shortcuts heissen unter OS X auch "Alias") fast am Einfachsten erscheint.

Nochmals danke für Deine Hilfe!

Grüsse
dmy
Last edited by dmy on 08. July 2014 12:03, edited 1 time in total.
dmy
 
Posts: 5
Joined: 07. July 2014 22:31
Operating System: Synology DSM 5

Re: Ordnerfreigabe für INTRAnet

Postby Nobbie » 08. July 2014 11:59

So oder so musst Du das tun, womit Du auch schon angefangen hast (aber das reicht eben alleine nicht), nämlich eine Directory-Anweisung für die Freigabe einzufügen, also im Prinzip genau, was du schon getan hast:

<Directory "/volume1/data">
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Damit wird angeben, wer in der "Apache Welt" (also eine Ebene höher als die OSX Ebene) auf diese Ordner zugreifen darf. In diesem Fall sind es alle "Allow From All". Wie gesagt, Apache ist selbst eine Art Betriebssystem und kennt auch Zugriffrechte. Ohne diese Angabe würdest Du wahrscheinlich einen Error 404 bekommen. Das ist der wichtige Unterschied, den viele nicht verstehen: Error 403 bedeutet, dass Apache an sich nicht zugreifen kann, entweder mangels notwendiger Rechte auf OSX Ebene, oder weil einfach der Ordner oder die Datei gar nicht existiert.

Und der Error 404 bedeutet, dass Apache durchaus darf, aber der Client (also der Browser, der meistens von außen zugreift), der darf das nicht, das verbietet nun Apache.

Wobei ich jetzt nicht gesehen habe, welches Apache Release Du verwendest, leider hat es eine schreckliche Entscheidung im Entwicklungsteam von Apache gegeben (aus meiner Sicht eine ganz schlimme Geschichte), beim Wechsel auf Apache 2.x (wobei ich nicht weiß, ob das 2.2 oder 2.4 war, ist auch egal) nicht mehr die Direktiven "Order ...." und "Allow From ..." gibt (die versteht Apache einfach nicht mehr), diese beiden Zeilen sind obsolet und stattdessen heißt heute (bzw. eben ab einer bestimmten Apache Version) so:

Require All Granted

Das sieht dann so aus:

<Directory "/volume1/data">
AllowOverride None
Require All Granted
</Directory>

Und warum ist das schrecklich? Das liegt auf der Hand: wenn man Apache updatet hat man irgendwann die neue Version drauf - und dann funktioniert die bisherige Konfiguration nicht mehr, das führt unweigerlich zu Kompatibilitätsproblemen. Ist mir absolut unbegreiflich, wie man das beschließen konnte. Aber so ist es nun und deswegen ist eine verbreitete Fehlerursache.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Ordnerfreigabe für INTRAnet

Postby dmy » 08. July 2014 12:33

Ja ich werde zusätzlich erst in der Directory Direktive "Options FollowSymLinks" hinzufügen und einen Shortcut zum Datenordner im www-Verzeichnis ablegen. Sollte das nicht gehen, werde ich die Alias Direktive benutzen.

Das mit den geänderten Angaben innerhalb der Directory Direktive ist allerdings sehr unschön. Laut Angaben im Synology Forum läuft auf auf meiner Diskstation Apache 2.2.26, welche "Order..." und "Allow From..." versteht, ist in der Original httpd.conf-user Datei jedenfalls mehrfach so benutzt. Auf http://httpd.apache.org/docs/ sieht es für mich so aus, als der Wechsel zwischen 2.2 und 2.4 stattgefunden hat. Ist ein wirklich hilfreicher Hinweis, sollte Synology mal auf 2.4 aktualisieren. Danke!

Viele Grüsse,
dmy
dmy
 
Posts: 5
Joined: 07. July 2014 22:31
Operating System: Synology DSM 5

Re: Ordnerfreigabe für INTRAnet

Postby Altrea » 08. July 2014 12:40

Nobbie wrote:Ohne diese Angabe würdest Du wahrscheinlich einen Error 404 bekommen.

Ich behaupte er würde einen HTTP Status Code 403 bekommen, wenn die Zugriffsregeln des Apache den Zugriff der Anfrage verwehren, die Ressource für Apache über die Betriebssystemrechte aber erlaubt wären.

Einen Status Code 404 bekommt man für gewöhnlich nur dann, wenn eine Ressource garnicht existiert (zum Beispiel kein Index Dokument vorhanden ist und der autoindex deaktiviert ist).
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Ordnerfreigabe für INTRAnet

Postby Nobbie » 08. July 2014 12:50

Altrea wrote:Ich behaupte er würde einen HTTP Status Code 403 bekommen,


Stimmt, ist genau anders herum.

Mir geht es im Prinzip auch nur darum, dass viele Menschen den Unterschied an sich nicht verstehen. Wann Apache zwar kann, aber der Client nicht darf, oder Apache erst gar nicht kann.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Ordnerfreigabe für INTRAnet

Postby Altrea » 08. July 2014 13:00

Nobbie wrote:Mir geht es im Prinzip auch nur darum, dass viele Menschen den Unterschied an sich nicht verstehen. Wann Apache zwar kann, aber der Client nicht darf, oder Apache erst gar nicht kann.

Dem kann ich auch garnicht widersprechen :D
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Ordnerfreigabe für INTRAnet

Postby dmy » 08. July 2014 20:21

Hallo

Ich bekomme es nicht hin.

Auf der Synology in der httpd.conf-user Datei habe ich folgendes hinzugefügt:
Code: Select all
<Directory "/volume1/homes/intranet/www">               
    Options ExecCGI                     
    AllowOverride All                                   
    Order allow,deny                                   
    Allow from all                                     
</Directory>
Dies funktioniert, denn ohne diese Direktive wird das Perl Skript nicht ausgeführt. Das ist ja schon mal gut.

Dann habe ich jetzt auch noch für den Ordner, wo die Daten liegen folgenden Eintrag gemacht. Keine Ahnung, ob das nötig ist.
Code: Select all
<Directory "/volume1/KNX_Log">                         
    AllowOverride All                                   
    Order allow,deny                                   
    Allow from all                                     
</Directory>


Jetzt noch den Alias, aber da stehe ich mit dem Pfad etwas am Berg, habe alles mögliche versucht, kein Erfolg.
Code: Select all
<IfModule alias_module>                                                         
    Alias /webman/pingpong.php /usr/syno/synoman/phpsrc/pingpong.php           
    Alias /~intranet/cgi-bin/KNX_Log/ /volume1/KNX_Log/                         
</IfModule>
Die Zeile mit dem Pingpong war schon da, ist Synology Standard.

Jedenfalls klappt das mit dem Zugriff jetzt noch nicht. Den Apache User habe ich jeweils nach Änderung neu gestartet.

Die vollen Pfade gemäss Terminal sind:
Code: Select all
/volume1/KNX_Log

für die Daten,

Code: Select all
volume1/homes/intranet/www/cgi-bin/

ist der Pfad, in welchem das Skript liegt und

aufrufen im Browser wird via folgenden Link gemacht
Code: Select all
10.0.1.xx/~intranet/cgi-bin/testscript.pl


Und im Skript möchte ich auf /volume1/KNX_Log/ wie folgt zugreifen
Code: Select all
my $file = '/KNX_Log/2014-07-01.csv';


Ich stehe jetzt etwas auf dem Schlauch, zumal ich auch noch die UserDir Direktive gefunden habe :shock:

Danke schon im Voraus für eure Hilfe, viele Grüsse
dmy
dmy
 
Posts: 5
Joined: 07. July 2014 22:31
Operating System: Synology DSM 5

Re: Ordnerfreigabe für INTRAnet

Postby dmy » 08. July 2014 22:25

Es geht nun doch. chmod 755 Datenordner hat gefehlt. Danke an alle! Gruss, dmy
dmy
 
Posts: 5
Joined: 07. July 2014 22:31
Operating System: Synology DSM 5

Re: Ordnerfreigabe für INTRAnet

Postby Nobbie » 09. July 2014 11:50

Dann habe ich jetzt auch noch für den Ordner, wo die Daten liegen folgenden Eintrag gemacht. Keine Ahnung, ob das nötig ist.


Das könntest Du aber herleiten.

Wozu ist die Directory Direktive vorhanden? Damit wird in der "Schicht" Apache für einen Ort bestimmte Eigenschaften (Rechte und Verhaltensweisen) festgelegt. Diese kommen wann zum Tragen? Wenn man via Apache auf dieses Verzeichnis zugreift. Und wie greift man via Apache zu? Grundsätzlich mit einem Client, meistens ein Browser und der schickt einen HTTP Request an Apache und der kümmert sich dann darum.

Wie aber greifst Du bzw. das Perlscript auf das Verzeichnis zu? Via Apache? Nein. Möglicherweise "im Auftrag" von Apache (aber das ist genau umgekehrt, da bittet Apache ein Perlscript um Daten und nicht das Perlscript irgendeinen Apache), aber das Perlscript greift seinerseits direkt, mit normalen open/close Funktionen via Betriebssystem auf den Ordner zu. Wird irgendein Apache dafür bemüht? Nein.

Also - braucht man diesen Directory Eintrag?

Nein, natürlich nicht.

Alias /~intranet/cgi-bin/KNX_Log/ /volume1/KNX_Log/


Auch das brauchst Du nicht - gibst Du in irgendeinem Browser http://10.x.x.x/~intranet/cgi-bin/KNX_Log/ ein? Nein, auch nicht. Also wozu dieser Alias?

Das einzige "Modul", was Du via Apache finden (und ausführen) willst, ist das Perlscript. Sonst nichts. Welche Daten das Perlscript benötigt, das ist dem Apachen vollkommen egal, davon bekommt er nichts mit.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: No registered users and 17 guests