Erinevus lehekülje "PHP käivitamine kasutaja õigustes" redaktsioonide vahel

Allikas: Kuutõrvaja
(Php cgi wrapperi abil suexeci üle tööle)
190. rida: 190. rida:
 
Kiirem võimalus on otse suunata kõik php failid php-cgi failile.
 
Kiirem võimalus on otse suunata kõik php failid php-cgi failile.
  
Käsureal teeme
 
 
mkdir /var/www/localhost/htdocs/cgi
 
ln -s /usr/bin/php-cgi /var/www/localhost/htdocs/cgi/php-cgi
 
  
  
 
ja httpd.conf
 
ja httpd.conf
  
  ScriptAlias /phpcgi/ /var/www/localhost/htdocs/cgi/
+
  ScriptAlias /php5-cgi /usr/local/bin/php-cgi
 
  AddType application/x-httpd-fastphp .php
 
  AddType application/x-httpd-fastphp .php
  Action application/x-httpd-fastphp /phpcgi/php-cgi
+
  Action application/x-httpd-fastphp /php5-cgi
  
 
Kasutada saab ka korraga nii php4'ja kui php5't näiteks on meil
 
Kasutada saab ka korraga nii php4'ja kui php5't näiteks on meil
207. rida: 203. rida:
 
  /usr/bin/php-cgi
 
  /usr/bin/php-cgi
 
  /usr/bin/php5-cgi
 
  /usr/bin/php5-cgi
 
selljuhul lingid nii
 
 
ln -s /usr/bin/php-cgi /var/www/localhost/htdocs/cgi/php-cgi
 
ln -s /usr/bin/php5-cgi /var/www/localhost/htdocs/cgi/php5-cgi
 
 
Ja seome .php5 laiendi php5-cgi'ga
 
 
AddType application/x-httpd-fastphp .php
 
Action application/x-httpd-fastphp /phpcgi/php-cgi
 
AddType application/x-httpd-fastphp5 .php5
 
Action application/x-httpd-fastphp5 /phpcgi/php5-cgi
 
 
  
  

Redaktsioon: 22. oktoober 2007, kell 00:54

Sissejuhatus

Apache suexec on programm, mis lisati versioonis 1.2 ja mis annab apache kasutajatele võimaluse käivitada cgi ja ssi programme kasutaja id-ga, mis erineb veebiserveri id-st. Normaalselt toimivad kõik skriptid veebiserveri õigustes. Kahjuks võimaldab see nõnda startida ainult cgi skripte.

Käesolev pala kirjeldab, kuidas saada iga serveris asuv php tükk samuti käima antud kasutaja õigustes. Näites kasutatav PHP on 5. versioon, kuid kasutada võib ka neljandat. Trellidega (#) on näidetes tähistatud käsuviip.

Tarkvara installeerimine

Installeerime apache koos suexec-ga näiteks FreeBSD's

 # cd /usr/ports/www/apache2
 # make  WITH_SUEXEC_MODULES="YES"  install 

Seejärel installeerime php

 # cd /usr/ports/lang/php5
 # make install clean

PHP installeerimisel küsitakse täiendavaid parameetreid. Valida tuleb CGI ja FastCGI tugi. Apache moodulit pole vaja, kui seda ei plaanita täiendavalt paralleelselt kasutada.

Järgneb fastcgi installeerimine:

 # cd /usr/ports/www/mod_fastcgi
 # make install clean

Teooria

Apache oskab siduda mingit laiendit teatud cgi skripti käivitamisega näiteks saame globlaalselt käivitada php lisades httpd.conf'i

ScriptAlias /php-cgi/ /usr/local/www/data/cgi-bin
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi

Apache ei oska kohe suunata faile edasi kettal olevale binaryle või skriptile. Küll aga näiteks http://mingiaadress/cgi-bin all olvevale cgi skriptile või binaarfailile.

Täpsemalt

Kõik toimub sellises järjekorras

.php -> http://nimi.ee/php-cgi/php5-fcgi -> /usr/local/bin/php-cgi

Reaga ScriptAlias /php-fastcgi/ /usr/local/www/data/cgi-bin tekitame me enda veebiserverile aliase php-cgi url'iga http://nimi/php-cgi

Järgmise reaga AddType application/x-httpd-fastphp .php Tekitame uue application tüübi nimega x-httpd-fastphp mille seome .php laiendiga

Kolmas rida Action application/x-httpd-fastphp /php-cgi/php5-fcgi määrab ,et application x-httpd-fastphp. Seetähendab kõik .php failid suunatakse automaatselt skriptile nimega php5-fcgi ehk siis http://nimi.ee/php-cgi/php5-fcgi

skript php5-fcgi ise on sellise sisuga

#!/bin/sh
exec /usr/local/bin/php-cgi

Nii saame näiteks hõlsasti teha kasvõi uue application tüübi näiteks laiendiga .jms ja siduda selle cgi skriptiga mis loeb talle saadetud .jms laiendiga failidest käske ja täidab neid luues nii kasvõi endale primitiivse veebiskriptimise keele.

Php cgi wrapperi abil suexeci üle tööle

Tegemist on natuke keerukama ja aeglasema meetodiga aga vaatame seda ,et täpsemalt mõista teooriat.

kontrollime suexec'i parameetreid selliselt:

# suexec -V
 -D AP_DOC_ROOT="/usr/local/www/data"
 -D AP_GID_MIN=1000
 -D AP_HTTPD_USER="www"
 -D AP_LOG_EXEC="/var/log/httpd-suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=1000
 -D AP_USERDIR_SUFFIX="public_html"

Nagu näha, soovib suexec, et kõik skriptid, mida tema abil käivitatakse, asuksid kataloogis /usr/local/www/data Ei hakka DOC_ROOT muutma ja loome testi sinna.

Apache konfiguratsioon

Serveris on kaks veebi

http://www.nimi.ee

http://test.nimi.ee


Esimene peab toimima kasutaja katse õigustes ja teine katse3

Muudame httpd.conf, vajadusel lisame:

LoadModule suexec_module libexec/apache2/mod_suexec.so
LoadModule fastcgi_module     libexec/apache2/mod_fastcgi.so


Tekitame virtualhostid httpd.conf faili


<VirtualHost *:80>
 SuexecUserGroup katse katse
 ServerAdmin kasutaja@nimi.ee
 DocumentRoot /usr/local/www/data/katse
 ServerName www.nimi.ee

ScriptAlias /php-fastcgi/ /usr/local/www/data/katse/cgi
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi

</VirtualHost>

<VirtualHost *:80>
 SuexecUserGroup katse3 katse3
 ServerAdmin kasutaja@nimi.ee
 DocumentRoot /usr/local/www/data/katse3/cgi-bin
 ServerName test.nimi.ee

ScriptAlias /php-fastcgi/ /usr/local/www/data/katse3/cgi
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi

</VirtualHost>

Loome kaustad cgi skriptidele

mkdir /usr/local/www/data/katse/cgi-bin
mkdir /usr/local/www/data/katse3/cgi-bin


Skript wrapperiks

Skript ise millele suunatakse .php laiendiga failid

#!/bin/sh
PHPRC="/usr/local/etc/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
exec /usr/local/bin/php-cgi

Loome selle faili kasutajate katse ja katse 3 alla

/usr/local/www/data/katse/cgi/php5-fcgi
/usr/local/www/data/katse3/cgi/php5-fcgi

Muudame mõlema faili kasutajaõigusi chown käsuga:

chown katse:katse /usr/local/www/data/katse/cgi-bin/php5-fcgi
chown katse3:katse3 /usr/local/www/data/katse3/cgi-bin/php5-fcgi

Testimine

Testimiseks saab teha skripti

< ?php
print "hello world< p >\n";
system("id");
php? >


www.nimi.ee skripti vaadates

hello world

uid=1004(katse) gid=1004(katse) groups=1004(katse) 

test.nimi.ee

hello world

uid=1009(katse3) gid=1009(katse3) groups=1009(katse3)

Alternatiivne kiirem meetod

Toodud näide on samas suhteliselt aeglane.

Starditakse suexecit wrapperina kasutades cgi skript mis stardib omakorda php-cgi abil php skripti.

Kiirem võimalus on otse suunata kõik php failid php-cgi failile.


ja httpd.conf

ScriptAlias /php5-cgi /usr/local/bin/php-cgi
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php5-cgi

Kasutada saab ka korraga nii php4'ja kui php5't näiteks on meil installitud php5 ja php4 cgi versioonid

/usr/bin/php-cgi
/usr/bin/php5-cgi


Selleks ,et saavutada suexecile sarnane olukord kus kõik skriptid töötavad kasutaja õigustes võib kasutada apache moodulit mpm-itk. lähemalt sellest http://mpm-itk.sesse.net/


EENet 2006