Rulați cgi-script-uri în apache folosind suexec pe serverul ubuntu

Plasarea serverelor în centre de date fiabile din Europa. Deschideți serverul VPS / VDS bazat pe cloud pe SSD-uri rapide în 1 minut!

Cel mai bun Gazduire:
- protejează datele de accesul nedorit într-un centru de date european protejat
- va accepta plata cel puțin în taxe.
- vă va permite să vă distribuiți distribuția

- protecția împotriva atacurilor DDos
- copie de rezervă gratuită
- Uptime 99.9999%
- Centrul de date - TIER III
- furnizor - TIER I

Sprijinim în limba rusă 24/7/365 Lucrăm cu persoane juridice și persoane fizice. Acum aveți nevoie de 24 nuclee și 72 GB de memorie RAM. Vă rog!

Tarifele noastre avantajoase vor dovedi că nu ați știut încă ieftinul de găzduire!

Minute: selectați configurația, plătiți și CMS de pe VPS este gata.
Banii înapoi - 30 de zile!

Carduri bancare, e-valută, prin intermediul terminalelor Qiwi, Webmoney, PayPal, Novoplat etc.

Puneți o întrebare la sprijinul 24/7/365

Găsiți răspunsuri în baza noastră de date și cunoașteți recomandările

Apache este cel mai popular server web din lume. Servește conținut static și dinamic al site-urilor în contexte diferite.

Una dintre cele mai comune metode de generare a conținutului dinamic este utilizarea interfeței Common Gateway Interface (CGI), care vă permite să rulați scripturi scrise în diferite limbi de programare care generează conținut Web.

Cu toate acestea, lansarea oricărui cod executabil în spațiul web implică întotdeauna un anumit risc.

Acest ghid vă va ajuta să executați scriptul CGI cu modulul suexec, care vă permite să rulați scripturi fără a extinde privilegiile utilizatorului decât dacă este absolut necesar.

cerinţe

Asistență CGI

În Ubuntu, serverul web Apache acceptă un director separat al scriptului CGI, care este gol în mod implicit.

În general, un script CGI este orice program care poate returna HTML și orice alte obiecte sau formate care pot fi redate în browser.

mai puțin /etc/apache2/mods-enabled/cgi.load
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so

Acest fișier conține o directivă care include modulul CGI.

Modulul este deja încărcat, dar până acum acesta nu serveste scripturi; pentru aceasta, trebuie să fie activată într-un anumit mediu.

Deschideți fișierul gazdă standard standard:

sudo nano / etc / apache2 / site-enabled / 000-implicit

Mai întâi trebuie să specificați numele serverului în el:

Un pic mai departe în fișier este secțiunea care este responsabilă pentru sprijinirea scripturilor CGI:

ScriptAlias ​​/ cgi-bin / / usr / lib / cgi-bin /

AllowOverride Nici unul
Opțiuni + ExecCGI -MultiViews + SymLinksIfOwnerMatch
Ordinul permite, respinge
Permiteți tuturor

Să o analizăm în detaliu.

Directiva ScriptAlias ​​specifică directorul din care Apache poate rula scripturi. În acest caz, acesta este directorul / usr / lib / cgi-bin. Al doilea argument specifică calea spre directorul de scripturi, iar primul (/ cgi-bin /) este adresa URL.

Acest lucru înseamnă că un script numit script.pl stocat în directorul / usr / lib / cgi-bin va fi lansat prin linkul:

Ieșirea va reveni la browser și va fi redată pe această pagină.

Secțiunea Directory conține regulile pentru directorul / usr / lib / cgi-bin. Acordați atenție:

Această opțiune nu este cu adevărat necesară, deoarece toate setările sunt pentru directorul de script-uri CGI specificat în ScriptAlias. Cu toate acestea, acesta nu afectează configurația, astfel încât să puteți lăsa configurația.

Pentru a putea plasa scripturile CGI în afara directorului ScriptAlias, trebuie să adăugați următoarele opțiuni la secțiunea Director:

Opțiuni + ExecCGI
AddHandler cgi-script .pl .rb [extensii care trebuie tratate ca scripturi CGI]

Salvați și închideți fișierul. Dacă ați făcut modificări, reporniți serverul web:

serviciul sudo apache2 reporniți

Testați scriptul CGI

Încercați acum să creați un script de test CGI.

După cum este indicat în setări, un director separat / usr / lib / cgi-bin este utilizat pentru a stoca scripturile CGI. Utilizatorii fără privilegii root nu au permisiunea de a scrie în acest director, deci trebuie să deschideți următorul fișier cu sudo:

sudo nano /usr/lib/cgi-bin/test.pl

Acest fișier are o extensie .pl, deoarece acesta este un script Perl; Apache va rula toate fișierele din acest director și le va transmite la programele corespunzătoare.

Specificați faptul că acest fișier ar trebui executat în Perl adăugând la începutul scriptului:

După aceasta, trebuie să specificați tipul de conținut generat. Acest lucru este necesar pentru ca browserul web să înțeleagă modul de afișare a ieșirii. De exemplu, acest script va afișa conținut HTML (text / html) utilizând funcția standard Perl.

tipăriți "Tip de conținut: text / html \ n \ n";

Adăugați următorul set de componente la primele două linii necesare. Rezultatul este acest script:

#! / usr / bin / perl
tipăriți "Tip de conținut: text / html \ n \ n";
print "Bună ziua. „;
print "„;
print "


„;
print "

Acesta este un text obișnuit.

„;
print "

Posibilitățile sunt minunate.

„;
print "„;

Salvați și închideți fișierul.

Faceți executabil:

sudo chmod 755 /usr/lib/cgi-bin/test.pl

Dacă deschideți acum domeniul și directorul CGI în browser și apoi adăugați numele de script, ieșirea acestui script apare pe ecran.

your_domain.com/cgi-bin/test.pl
Bună, Lumea.
Acesta este un text obișnuit.
Posibilitățile sunt minunate.

După cum puteți vedea, această pagină simplă este afișată corect.

Bună ziua.


Acesta este un text obișnuit.


Posibilitățile sunt minunate.

Activarea modulului SuExec

Prin crearea unui script pe care orice utilizator îl poate executa, expuneți securitatea serverului la un anumit tip de risc. În mod ideal, dreptul de a rula scripturi ar trebui să fie doar pentru un utilizator blocat. Pentru aceasta, modulul suexec este proiectat.

Instalați o versiune modificată a modulului suexec, care vă permite să configurați directoarele acceptate (anterior, această funcție ar putea fi obținută numai prin recompilarea modulului din codul sursă).

sudo apt-get instala apache2-suexec-personalizat

sudo a2enmod suexec

Creați un utilizator nou care va deține toate drepturile asupra fișierelor de script. Dacă serverul servește mai multe site-uri, creați un utilizator separat pentru fiecare.

sudo adduser script_user

Puteți săriți toate solicitările de date (inclusiv o solicitare de parolă).

Creați un director de scripturi în directorul de acasă al noului utilizator:

sudo mkdir / home / script_user / script-uri

Modulul suexec necesită un control foarte strict asupra permisiunilor de scriere din director. Transferați permisiunile către director către utilizatorul script_user și modificați permisiunile astfel încât nimeni să nu poată scrie în el:

sudo chown script_user: script_user / home / script_user / script-uri
sudo chmod 755 / home / script_user / scripturi

Acum creați un fișier de script, apoi copiați și inserați scriptul pe care l-ați creat mai devreme:

sudo -u script_user nano /home/script_user/scripts/attempt.pl
#! / usr / bin / perl
tipăriți "Tip de conținut: text / html \ n \ n";
print "Bună ziua. „;
print "„;
print "


„;
print "

Acesta este un text obișnuit.

„;
print "

Posibilitățile sunt minunate.

„;
print "„;

Faceți fișierul executabil. Toate drepturile la fișier trebuie să fie doar în script_user; ele pot fi configurate folosind modulul suexec:

sudo chmod 700 /home/script_user/scripts/attempt.pl

După aceea, modificați setările gazdei virtuale Apache astfel încât noul utilizator să poată rula scriptul.

sudo nano / etc / apache2 / site-enabled / 000-implicit

Mai întâi, configurați directorul CGI; În locul directivei ScriptAlias, utilizați directiva Alias ​​în combinație cu opțiunea ExecCGI și directiva SetHandler.

Adăugați la fișier:

Alias ​​/ scripturi / / home / script_user / scripts /

Opțiuni + ExecCGI
SetHandler cgi-script

Acum puteți accesa scripturile accesând subdirectorul / scripturile. Pentru a activa aceste funcții suexec, adăugați următoarea linie în afara secțiunii Director, dar în secțiunea VirtualHost.

SuexecUserGroup script_user script_user

Salvați și închideți fișierul.

Acum trebuie să specificați directoarele pe care modulul suexec le consideră valide (aceasta este funcția care nu este disponibilă în versiunea standard a modulului). Deschideți fișierul de configurare suexec.

sudo nano / etc / apache2 / suexec / www-date

La începutul fișierului, specificați calea către directorul de scripturi.

Salvați și închideți fișierul.

Acum, reporniți serverul web.

serviciul sudo apache2 reporniți

Deschideți un link în browser:

Apare ecranul:

Bună, Lumea.
Acesta este un text obișnuit.
Posibilitățile sunt minunate.

Notă: după configurarea modulului suexec, directorul normal CGI nu funcționează; Acest comportament este destinat să controleze privilegiile scripturilor.

concluzie

Acum puteți crea scripturi CGI și le puteți rula într-un mod relativ sigur. Scripturile CGI sunt foarte utile, deoarece vă permit să adăugați rapid conținut dinamic pe site-ul dvs. Și cu ajutorul modulului suexec, puteți proteja aceste scripturi.

Cu toate acestea, fiți foarte atenți când lucrați cu modulul suexec! Configurația neadecvată a modulului poate crea vulnerabilități suplimentare de securitate. Pentru a afla vulnerabilitățile potențiale ale suexec, examinați configurația modulului.