28.5 CGI-parancsfájlok használata

Az Apache Common Gateway Interface (CGI) csatolójával dinamikus tartalom is eloállítható különféle programokkal vagy parancsfájlokkal, amelyeket általában CGI-parancsfájlok néven szokás emlegetni. CGI-parancsfájlok bármilyen programozási nyelven írhatók. Leggyakrabban a Perlhez és PHP-hoz hasonló parancsnyelveket használnak e célra.

Ahhoz, hogy az Apache kiszolgálja a CGI-parancsfájlok által eloállított tartalmat, a mod_cgi modult aktiválni kell. Szükség van a mod_alias-ra is. Alapértelmezés szerint mindkét modul be van kapcsolva. A modulok aktiválásának részletei: Szakasz 28.4.2, Aktiválás és deaktiválás.

FIGYELMEZTETÉS: CGI-biztonság

A CGI-parancsfájlok végrehajtásának engedélyezése potenciális biztonsági rést jelent a kiszolgálón. További információ: Szakasz 28.7, Biztonsági problémák elkerülése.

28.5.1 Az Apache beállítása

openSUSE rendszereken a CGI-parancsfájlok végrehajtása kizárólag a /srv/www/cgi-bin/ könyvtárból engedélyezett. Ez a hely viszont már be is van elore állítva a CGI-parancsfájlok futtatására. Ha virtuális gépeket használ (lásd Virtuális gépek konfigurációja) és a parancsfájlokat a géphez tartozó könyvtárba kívánja helyezni, akkor ezt a könyvtárat elobb fel kell oldani és be kell állítani.

Példa 28-5 Virtuális gépek beállítása CGI-hez

ScriptAlias /cgi-bin/ "/srv/www/www.example.com/cgi-bin/"

<Directory "/srv/www/www.example.com/cgi-bin/">
 Options +ExecCGI
 AddHandler cgi-script .cgi .pl
 Order allow,deny
 Allow from all
</Directory>

Azt jelzi az Apache számára, hogy a könyvtárban található minden fájlt tekintsen CGI-parancsfájlnak.

Engedélyezi a CGI-parancsfájlok végrehajtását

Azt jelzi a kiszolgáló számára, hogy a .pl és .cgi kiterjesztésu fájlokat tekintse CGI-parancsfájloknak. Módosítsa igényei szerint.

Az Order és Allow direktívák szabályozzák az alapértelmezett hozzáférés állapotát, illetve az Allow és Deny direktívák kiértékelésének a sorrendjét. A jelen esetben a deny utasítások az allow utasítások elott értékelodnek ki, és a hozzáférés mindenhonnan engedélyezett.

28.5.2 Egy példaparancsfájl futtatása

A CGI-programozás eltér annyiban a "szokásos" programozástól, hogy a CGI-programokat és -parancsfájlokat egy MIME-Type fejlécnek kell megeloznie, például egy ilyennek: Content-type: text/html. A kliens megkapja ezt a fejlécet, hogy tisztában legyen vele, milyen típusú tartalom is érkezik ezután. Másodszor, a parancsfájl kimenete valami olyan kell, hogy legyen, amit a kliens (jellemzoen egy webböngészo) megért – vagyis elsosorban HTML, esetleg sima szöveg vagy például egy kép.

Az Apache csomag része egy egyszeru példaparancsfájl, az /usr/share/doc/packages/apache2/test-cgi. Ez néhány környezeti változó tartalmát írja ki egyszeru szövegként. Másolja át ezt a parancsfájlt akár az /srv/www/cgi-bin/ könyvtárba, akár a virtuális gép parancsfájl-könyvtárába (/srv/www/www.example.com/cgi-bin/) és nevezze át test.cgi névre.

A webkiszolgáló által elérheto fájloknak a root felhasználó tulajdonában kell lenniük (további információ: Szakasz 28.7, Biztonsági problémák elkerülése). Mivel a webkiszolgáló más felhasználó nevében fut, a CGI-parancsfájloknak mindenki által olvashatónak és végrehajthatónak kell lenniük. Váltson át a CGI-könyvtárba, és adja ki a chmod 755 test.cgi parancsot a megfelelo jogosultságok biztosításához.

Most már beírhatja a böngészobe a http://localhost/cgi-bin/test.cgi vagy a http://www.example.com/cgi-bin/test.cgi címet. Meg kell, hogy jelenjen a CGI/1.0 test script report oldal.

28.5.3 Hibaelhárítás

Ha nem jelenik meg a tesztprogram kimenete, csak egy hibaüzenet látszik, akkor ellenorizze az alábbiakat:

CGI-hibaelhárítás

  • Újratöltötte-e a kiszolgálót a konfiguráció módosítása után? Ellenorizze ezt az rcapache2 probe paranccsal.

  • Ha egyéni CGI-könyvtárat állított be, helyesek-e a beállítások? Ha nem biztos benne, próbálja ki a parancsfájlt az alapértelmezett CGI-könyvtárral (/srv/www/cgi-bin/) és érje el a http://localhost/cgi-bin/test.cgi címen.

  • Rendben vannak-e a fájljogosultságok? Váltson át a CGI-könyvtárba, és adja ki az ls -l test.cgi parancsot. A kimenetnek így kell kezdodnie:

    -rwxr-xr-x  1 root root
  • Gyozodjön meg róla, hogy a parancsfájl nem tartalmaz programozási hibákat. Ha a test.cgi-t használja, ez nem fordulhat elo, de ha saját programokat ír, mindig gyozodjön meg róla, hogy azok hibátlanul muködnek.