Chyba 500 v Lighttpd

MilanC

Chyba 500 v Lighttpd
« kdy: 11. 08. 2015, 13:59:31 »
Zdravím Vás, a prosím o radu,

nemáte někdo zkušenost s interní chybou serveru 500 při spouštění skriptu, i když máte dojem, že máte vše nastaveno dobře?
V .conf souborech mám:

$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( ".c" => "/usr/bin/cc",
                    ".cgi" => "/usr/bin/cc")
...

static-file.exclude-extensions = ( ".c", ".cgi" )

...též spuštěný mód cgi,
... práva skript má, spouštění jako programu je zatrhnuto
...server restartovávám
...cesta: /var/www/index.html, /var/www/cgi-bin/skript.c

Mám vyguglováno mnoho důvodů, které jsem zkoušel použít k vyřešení. Změna prohlížeče, jeho nastavení apod.

Verze Lighttpd 1.4.33. Zkoušel jsem vlastně taky apače a chová se stejně. Používám LinuxMint.

Díky, MilanC


Filip Jirsák nepřihlášený

Re:Chyba 500 v Lighttpd
« Odpověď #1 kdy: 11. 08. 2015, 14:44:56 »
Máte chybu buď v konfiguraci a nebo v samotném skriptu. Zkuste nejprve zprovoznit nějaký úplně jednoduchý skript. Podrobnější informace o chybách najdete v logu serveru.

Jenda

Re:Chyba 500 v Lighttpd
« Odpověď #2 kdy: 11. 08. 2015, 16:30:47 »
Podle mě ta konfigurace dělá to, že když si vyžádám soubor.c, tak se tento zkompiluje (a nic dalšího se nestane). To je dost nestandardní - seš si jistý, že to tak chceš?

A jinak v error.log je chybový výstup CGI skriptu.

MilanC

Chyba 500 v Lighttpd
« Odpověď #3 kdy: 12. 08. 2015, 16:44:44 »
Jsem si jistý, že to tak nechci.

Hodila by se mi učebnice, kdyby nějaká existovala. Nasát to všechno z těch mnoha opakujících se článků popisující základní konfiguraci je pro mě jaksi nedostačující. Nějak se to nenasává, a je to v podstatě to následující.

Ještě jsem to zjednodušil, ale píše mi to jinou chybu: 403 - Forbidden. (práva mám)

/* /var/www/soubor.c */
!/usr/bin/cc         ... toto být myslím nemusí.
#include <stdio.h>
int main(void)
{
   printf("Ahoj světe!");
return 0;
}


lighttpd.conf (výběr):
server.document-root        = "/var/www"
index-file.names            = ( "soubor.c" )
static-file.exclude-extensions = ( ".c" )


10-cgi.conf:
server.modules += ( "mod_cgi" )
$HTTP["url"] =~ "/var/www" {
   cgi.assign = ( ".c" => "/usr/bin/cc" ) }


V  /var/log/lighttpd/error.log  nic zajímavého nebylo. Tam je jen kdy jsem stopnul a startnul server. Ale umí to jiné věci ... abych si tento soubor mohl otevřít, musel jsem si dát práva (chown). Jenže pak mi server nějak zamrzl, a pomohlo na to pouze  apt-get purge lighttpd. Pak už jsem se na tento soubor díval jen v terminálu pomocí less .... Jak si ho vy prohlížíte?.


(Dám-li souboru příponu .html, vypíše mi to do firefoxu krásně ten céčkový kód.)

Tak co s tím prosím?
A prosím polopaticky, umím jen číst a psát. Díky

Re:Chyba 500 v Lighttpd
« Odpověď #4 kdy: 12. 08. 2015, 17:23:40 »
Nešlo by to nějak takhle?
cgi.assign = (".c" => "/usr/bin/jmeno_skriptu")
A /usr/bin/jmeno_skriptu:

#!/bin/bash
FILENAME=$(basename $1)
/usr/bin/cc $1 -o /tmp/$FILENAME
/tmp/$FILENAME

Lighttpd moc neznám, jenom střílím od boku


Re:Chyba 500 v Lighttpd
« Odpověď #5 kdy: 12. 08. 2015, 18:42:44 »
Viz např. http://www.acmesystems.it/foxg20_cgi
Ovšem myslím si, že člověk s vašimi znalostmi (pletete si interpret a kompilátor) by to dělat neměl.
Vám by mělo na všechno, co potřebujete, stačit PHPko.

Jenda

Re:Chyba 500 v Lighttpd
« Odpověď #6 kdy: 12. 08. 2015, 20:52:16 »
Udělej z toho binárku (gcc blabla -o binárka.cgi) a nastav pro .cgi prázdný handler.

Citace od: Markaos kdy 12. 08. 2015, 17:23:40
Nešlo by to nějak takhle?
cgi.assign = (".c" => "/usr/bin/jmeno_skriptu")
A /usr/bin/jmeno_skriptu:

#!/bin/bash
FILENAME=$(basename $1)
/usr/bin/cc $1 -o /tmp/$FILENAME
/tmp/$FILENAME

Lighttpd moc neznám, jenom střílím od boku
On to určitě nechce při každém načtení stránky znova kompilovat (což trvá dost dlouho).

MilanC

Chyba 500 v Lighttpd
« Odpověď #7 kdy: 13. 08. 2015, 17:58:25 »
Jak málo stačí, aby to šlo. Díky.

   Nicméně, je to jen polovička. Ano, bash se doučím, ale věřím, že i samotný server se dá lehce nastavit tak, aby byl program při každém zavolání nutně znovu zkompilován a spuštěn, protože bude mít pokaždé jiný obsah, např. při zpracování html formuláře. Ale ať to zkouším, jak to zkouším, nejede to.
   Ví někdo jak na to? Díky

Jenda

Re:Chyba 500 v Lighttpd
« Odpověď #8 kdy: 13. 08. 2015, 18:37:36 »
> že i samotný server se dá lehce nastavit tak, aby byl program při každém zavolání nutně znovu zkompilován a spuštěn

Nedá. A jinak to dělá ten bashový skript. Myslím, že spuštění bashe je oproti kompilaci programu zanedbatelné a nijak se na výkonu neprojeví.

> protože bude mít pokaždé jiný obsah, např. při zpracování html formuláře

Cože?!? Při zpracování formuláře bude mít jiný obsah *ten* *program*? Tohle vypadá na nějakou fakt šílenou divokost, a pokud kompiluješ co ti kdo pošle formulářem, koleduješ si o opravdu velký problém, pokud to není nějaké dobře zabezpečené řešení pro pouze důvěryhodná data. Důrazně bych ti doporučil vykašlat se na psaní CGI skriptů v C a použít nějaký ,,bezpečnější" jazyk (a pokud potřebuješ něco v C, tak to tam přidat jenom jako modul).

MilanC

Chyba 500 v Lighttpd
« Odpověď #9 kdy: 13. 08. 2015, 20:20:15 »
Informace nad zlato. Skvělé, díky, teď jsem spokojen.
   Myslím si, že teď už mám všechno, co jsem potřeboval pro započetí práce na konečně už dynamickém webu. I na ten bash se těším.
      Kompilovat někomu osobní údaje samozřejmě nechci, takovou věc jsem mohl, a zcela neurčitě, tvrdit jen proto, že jsem se k té dynamice ještě nedostal.
Myslím si ale, že to snad zvládnu, příkladů (s php)  je dost.

Mějte se dobře,   MilanC

Jenda

Re:Chyba 500 v Lighttpd
« Odpověď #10 kdy: 14. 08. 2015, 06:26:52 »
Citace od: MilanC kdy 13. 08. 2015, 20:20:15
   Myslím si, že teď už mám všechno, co jsem potřeboval pro započetí práce na konečně už dynamickém webu. I na ten bash se těším.

Upřímně řečeno si nedokážu představit cokoli složitějšího (,,započetí práce") než stránka zobrazující aktuální teplotu napsaného tímto způsobem.

Citace od: MilanC kdy 13. 08. 2015, 20:20:15
      Kompilovat někomu osobní údaje samozřejmě nechci
To bych napsal důvěrná. Důvěryhodná znamená, že nenecháš cizí lidi (a potenciální útočníky) aby je zadávali - protože pokud je pak budeš kompilovat, nejspíš uděláš nějakou chybu, která umožní, abych místo dat vložil svůj kód, a ten se pak spustí u tebe na serveru.

ByCzech

Re:Chyba 500 v Lighttpd
« Odpověď #11 kdy: 14. 08. 2015, 11:02:30 »
Už jsem viděl hodně bezpečnostních skulin, kudy se dalo dostat přes web do systému. Ale takovéhle vrata i s pozvánkou ještě ne  ;D