# ispConfig 3 cgi-bin, FTP Schreibrecht & phpmyadmin probleme



## donald (14. Aug. 2009)

hallo leute wir setzen zum ersten mal einen ispconfig 3 auf und alles klappt super nur noch drei probleme / wünsche sind übrig geblieben

1. Cgi skripte lassen sich nicht ausführen auf der suche nach lösungen habe ich ein logg file mit jedem schritt geführt. ich kopiere mal diese da rein damit ihr nachvollziehen könnt was ich schon ausprobiert hab

Logfile/schritte:
-meine-webseite.de test-cgiscript(datetime.cgi) in cgi-bin ordner laden. (web/cgi-bin)
-http://www.meine-webseite.de/cgi-bin/datetime.cgi
-Fehlermeldung: You don't have permission to access /cgi-bin/ on this server.

-Leserechte der datetime.cgi dateiändern auf 775 und 777 brachte keine resultate / nun eingestellt auf 755 
da das vom datetime programmierer empfohlen ist.

-Versuch ob andere datein in ordner aufrufbar sind hat geklappt (images/bild.jpg) an den allgemeinen 
ordner/lese rechten liegts daher nicht.

-erstelle nun eine einfache seite aus den tags html, body und script in welchen die datei aufgerufen wird
-lade sie per ftp rauf und stelle die lese rechte auf 755
-fehlermeldung You don't have permission to access /cgi-bin/date.html on this server.

-Versuche ein bild aus dem cgi-bin ordner zu aufrufen /leserecht 777
-Fehlermeldung: You don't have permission to access /cgi-bin/bild.jpg on this server.
-Bild gelöscht

offenbar kann ich nichts aus dem ordner web/cgi-bin/aufrufen

ich verscuhte einen anderen weg:
-----------------------------------
aufklärung verscheidene phpModi

CGI:

PHP als Modul des Apache nutzt – wie andere Scriptsprachen auch (beispielsweise Perl oder ASP) – das CGI, 
um Anfragen an einen Webserver zu senden und das Ergebnis an den Client zurück zu schicken. Für jede Anfrage 
muss dabei ein neuer Prozess angelegt werden, der nach der abgeschlossenen Bearbeitung des Scripts wieder beendet 
wird. Das Problem dabei ist, dass das Starten und Initialisieren sehr viel länger dauert als das eigentliche 
Ausführen des Scripts – es entsteht also ein großer Overhead.

Fast-CGI:

FastCGI kann dabei helfen diesen angesprochenen Overhead massiv zu verringern (ganz eliminieren nicht, aber dazu 
später mehr). FastCGI kann man sich als große Endlos-Schleife vorstellen, die ständig auf Requests wartet. 
Der Prozess läuft also ständig und ist sofort einsatzbereit, wenn eine Anfrage an den Server ankommt.

Mod_PHP:

Die am häufigsten genutzte Möglichkeit, PHP in den Apache zu integrieren, ist wohl mod_php. Vorteile sind hier die 
extrem einfache Konfiguration und die sehr gute Performance. Allerdings hat mod_php auch mindestens einen gravierenden 
Nachteil. Es führt sämtliche PHP-Scripte als User des Apache aus.
Ein weiterer Nachteil ist, dass PHP nicht threadsafe ist, und somit nicht mit dem apache2-mpm-worker benutzt werden kann, 
sondern nur mit dem apache2-mpm-prefork, wodurch man eine wesentliche Erneuerung/Verbesserung des Apache2 verliert.

SuPHP:

Viele Server-Administratoren benutzen deshalb PHP-CGI in Verbindung mit mod_suphp. Der Vorteil ist, dass hierbei die PHP 
Dateien immer mit dem User ausgeführt werden, dem die Dateien auch gehören.Der Nachteil von dieser Kombination ist 
aber, dass bei jedem PHP-Request das PHP-Binary neu gestartet werden muss. [...]
-----------------------------------

-stelle daher die webseite auf Suphp nur um sicher zu gehen, dass durch die ständige ausführung der cgi(fast-cgi) nicht der andere cgi 
geblockt wird.

-http://www.meine-webseite.de/cgi-bin/date.html aufgerufen klappt nicht
-warte einige minuten um ein server delay auszuschliessen
-leider kein resultat stelle seite auf fast cgi zurück

==============================================

logfile fertig

warum kann ich keine cgi skripte ausführen wenn ich neue seiten anlege?

2. Wenn etwas per FTP draufgeladen wird hat es immer die standard berechtigung 644 kann mann das auf automatische  755 stellen?

3a..datenbanken erstellen und phpmyadmin ist kein problem wenn ich den server/phpmyadmin aufrufe ist alles da. aber ist das auch möglich mit webseite und dann irgendwie phpmyadmin in der url?

3b. kann ich irgendwo einstellen das der kunde seine datenbanken selber anlegen kann und die z.b. auf 5DB/kunde beschränken?
wenn ja wie?


mfg & Danke im voraus


----------



## Till (14. Aug. 2009)

1) Der cgi-bin Folder ist nicht im web folder sondern ein bestender Folder auf der gleichen Ebene. Mit PHP hat das alles nichts zu tun.

2) Kannst Du in der Konfigurationsdatei des FTP Programms einstellen, in diesem Fall pure-ftp

3a) Kannst Du z.B. mit apache rewrite Rules machen.
3b) Das kannst Du bei den Einstellungen des Kunden machen, wie alle anderen Limits auch.


----------



## donald (17. Aug. 2009)

1. wie soll ich das aufrufen? 

http://server/srv/www/clients/client2/web2/cgi-bin/date.html?

kommt die gleiche meldung

2. wie meinst du im z.b. filezila oder im ftp system des linux?

3a.  hast du ein tutorial? 
3.b. danke habs nun gesehen ich wollte das bei der seite einstellen.

p.s. priorität hat aber das cgi skript. wie kann ich herausfinden ob das cgi skript funkt?


----------



## Quest (17. Aug. 2009)

2: Er meint die Konfigurationsdatei des FTP-Servers, der sich auf deiner Linuxkiste im Verzeichnis /etc befindet, vermutlich noch in einem Unterordner names 'pureftpd' oder so.

3a: 
Trage das hier in die Apache Direktiven des Kunden ein: 

```
Alias /phpmyadmin /pfad/zu/phpmyadmin
```
Den zweiten Pfad musst du durch den genauen Pfad zu deinem PHPMyAdmin-Verzeichnis ersetzen. den weiß ich nicht auswendig. Liegt glaub ich irgendwo unter /usr/share/...


----------



## donald (17. Aug. 2009)

Danke sehr werds mal austetsten aber das hauptproblem ist im moment das cgi skript. wir sollten heute eine webseite aufschalten aber das können wir nicht ohne cgi-skripte

hat jemand eine idee?


----------



## donald (17. Aug. 2009)

ok der aktuelle stand

-test.cgi erstellt mit inhalt

#!/usr/bin/perl
print "cgi funktioniert";

-in ftp ordner cgi-bin geladen
-kopiere die url der datei (--> ftp://server/cgi-bin/test.cgi)in den browser; ergebnis:


#!/usr/bin/perl
print "cgi funktioniert";

ändere die kopierte url von ftp auf http ergebniss:
*Forbidden*

 You don't have permission to access /cgi-bin/test.cgi on this server.
 Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
  Apache/2.2.10 (Linux/SUSE) Server at server Port 80

CHood ändern bringt keine ergebnisse
 :S


----------



## Burge (17. Aug. 2009)

Hat die Seite das recht cgi scripte auszuführen?


----------



## donald (17. Aug. 2009)

Sites -> webseite -> Domain -> CGI häcken an

wenn du das meinst dann ja


----------



## Burge (17. Aug. 2009)

mhm ok mehr fällt mir auch nicht ein


----------



## Till (18. Aug. 2009)

Schau ins error log der Webseite, wenn Du wissen möchtest wo der Fehler liegt.


----------



## donald (18. Aug. 2009)

wo wäre der genau?


----------



## Till (19. Aug. 2009)

Im log Verzeichnis der Webseite. Schau Dir mal die Unterverzeichnisse Deines Webs an, da gibt ves nur ein Verzeichnis mit dem Namen und darin auch nure eine Datei mit dem Namen error.log


----------



## donald (21. Aug. 2009)

naja das problem ist ich hab folgenden ordner 

cgi-bin
ssl
tmp
web
  -error
  -stats

und im error ordner befinden sich nur html fehelerseiten hmmm :S
und das die datei niocht versteckt ist darauf habe ich auch geschaut


----------



## Burge (21. Aug. 2009)

schau mal /var/log/ispconfig/httpd/ und da name deine seite nach dem log.
Dann fehlt dir der symlink in das verzeichniss des webs.


----------



## donald (21. Aug. 2009)

hey danke habs gefunden.

nun die fehlermeldung
[Mon Aug 17 14:46:21 2009] [error] [client ip.ip.ip.ip] client denied by server configuration: /srv/www/clients/client2/web2/cgi-bin/test.cgi


----------



## Till (21. Aug. 2009)

Poste mal die Ausgabe von:

ls -la /srv/www/clients/client2/web2/cgi-bin/test.cgi


----------



## donald (21. Aug. 2009)

-rwxr-xr-x 1 web2 client2 42 Aug 17 14:36 ls -la /srv/www/clients/client2/web2/cgi-bin/test.cgi


----------



## Till (23. Aug. 2009)

Und Du hast cgi und suexec in diesem Web aktiviert und rufst die cgi datei mit http:///www.deinedomain.de/cgi-bin/test.cgi im browser auf und nicht über die IP?


----------



## donald (25. Aug. 2009)

ja ist so. ich hab auch mal extra ein schreibfehler reingemacht /cgi-bin/tet.cgi und es kommt die gleiche fehlermeldung.

kann dass auc mit den server einstellungen zu tun haben? yast oder weiss ich was. die installation ist von howtoforge - also das iso da sollte ja eigentlich alles ok sein


----------



## donald (28. Aug. 2009)

hallo leute ich bins wieder. leider funktioniert es immer noch nicht. wir habens mit dem vmware image von debian, ubuntu, opensuse und letzte stable version von ubuntu getestet. klappt immer noch nicht. bei sites ist cgi und susexec aktiviert bei server webserver, fileserver und dbserver. irgendetwas machen wir falsch. nur was?

p.s. liegt es villeicht an dem script selbst?

#!/usr/bin/perl
print "cgi funktioniert";

wobei auch html dokumente und bilder sind aus dem ordner nicht mehr aufrufbar und es kommt wieder die forbidden meldung


----------



## Burge (28. Aug. 2009)

setz doch mal selber ne maschine auf evtl taucht dann irgendwo ein denkfehler auf. Bilder etc und html Seiten sollen auch nicht im cgi-bin verzeichniss liegen sonder im Web.


----------



## donald (28. Aug. 2009)

ich weiss schon aber ich wollte nur irgendwie die "blockade orten".

hab jetz folgendes gemacht:

web -> html anzeigen - OK
web -> html zeigt web-> image an - OK
web -> html zeigt cgi-bin -> cgi an - keine funktion
web -> html zeigt externe webseite -> cgi an - OK
web -> html zeigt web -> cgi an - keine funktion
web -> html zeigt web/cgi-bin -> cgi an - keine funktion
web -> html zeigt cgi-bin -> image an - keine funktion

cgi-bin -> html anzeigen - keine funktion
cgi-bin -> cgi anzeigen - keine funktion
cgi-bin -> image anzeigen - keine funktion

locales html zeigt externe webseite -> cgi - OK
locales html zeigt www.meinedomain.com/cgi-bin -> cgi - keine funktion

keine funktion bedeutet :
*Forbidden*

 You don't have permission to access /cgi-bin/comments.pl on this server.
 Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
  Apache/2.2.10 (Linux/SUSE) Server at www.domain.com Port 80
die test datei war diese 
http://de.selfhtml.org/servercgi/cgi/cgihtml.htm

irgendwie komme ich einfach beim türsteher vom cgi-bin ordner nicht durch. hmm....


----------



## Till (28. Aug. 2009)

Du kannst antürlich keine images oder html Dateien aus dem cgi-bin aufrufen. Das ist ein geschütztes Verzeichnis in das ausschließlich CGI Scripte kommen, ein direkter Zugriff um z.B. Bilder daraus aufzurufen existiert nicht. Die Ergebnisse oben sind somit ok. dass Dein CGI Script nicht geht muss also nicht unbedingt an der Konfiguration liegen sondern kann genauso am Script oder dessen Rechten liegen.


----------



## donald (28. Aug. 2009)




----------



## donald (28. Aug. 2009)

ich hab mal die server, klient und site einstellungen da. villeicht sieht jemand was. 

p.s. das script ist auch hier:
*HTML*
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kommentarseite</title>
</head>
<body bgcolor="#E0E0E0">
<h1>Ihr Kommentar</h1>
<form action="http://domain.com/cgi-bin/comments.pl" method="post">
<p>Name:<br><input type="text" name="AnwenderName" size="40" maxlength="40"></p>
<p>Text:<br><textarea rows="5" cols="50" name="Kommentartext"></textarea></p>
<p><input type="submit" value="Absenden"></p>
</form>
</body>
</html>

*SCRIPT*
#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

read(STDIN, my $Daten, $ENV{'CONTENT_LENGTH'});
my @Formularfelder = split(/&/, $Daten);
my ($Feld, $Name, $Wert);
my %Formular;
foreach $Feld (@Formularfelder) {
  (my $Name, my $Wert) = split(/=/, $Feld);
  $Wert =~ tr/+/ /;
  $Wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $Wert =~ s/</&lt;/g;
  $Wert =~ s/>/&gt;/g;
  $Formular{$Name} = $Wert;
 }
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>CGI-Feedback</title></head>\n";
print "<body><h1>CGI-Feedback vom Programm <i>comments.pl</i></h1>\n";
print "<p><b>Name:</b> $Formular{AnwenderName}</p>\n";
print "<p><b>Kommentartext:</b> $Formular{Kommentartext}</p>\n";
print "</body></html>\n";

das script ist im cgi-bin ordner und hat chmod 755

formular wird ausgeführt ala 

http://de.selfhtml.org/servercgi/cgi/anzeige/comments.htm

danach kommt aber die verweigrt meldung


----------



## Till (30. Aug. 2009)

Sieht an sich ok aus. Du kannst es ja mal im bugtracker posten, damit es mal getestet wird.


----------



## mrairbrush (26. Apr. 2011)

An dem Problem hänge ich auch schon lange. Vielleicht sollte man die Einstellungen mit jemanden vergleichen bei dem CGI funktioniert sofern es jemand gibt. Kann man das Verzeichnis nicht einfach eine Ebene höher setzen? web/cgi-bin


----------

