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?
Kód: [Vybrat]
cgi.assign = (".c" => "/usr/bin/jmeno_skriptu")A /usr/bin/jmeno_skriptu:
Kód: [Vybrat]
#!/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.

Nešlo by to nějak takhle?
Kód: [Vybrat]
cgi.assign = (".c" => "/usr/bin/jmeno_skriptu")A /usr/bin/jmeno_skriptu:
Kód: [Vybrat]
#!/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 »
   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.

      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