Erinevus lehekülje "PHP käivitamine kasutaja õigustes" redaktsioonide vahel
1. rida: | 1. rida: | ||
− | + | 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: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Installeerime apache koos suexec-ga | ||
# cd /usr/ports/www/apache2 | # cd /usr/ports/www/apache2 | ||
# make WITH_SUEXEC_MODULES="YES" install | # make WITH_SUEXEC_MODULES="YES" install | ||
− | Seejärel installeerime php | + | 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. | PHP installeerimisel küsitakse täiendavaid parameetreid. Valida tuleb CGI ja FastCGI tugi. | ||
236. rida: | 25. rida: | ||
# make install clean | # make install clean | ||
− | + | Peale installeerimist saame kontrollida MILLE? olemasolu ja parameetreid selliselt: | |
− | |||
− | |||
− | |||
− | |||
− | |||
# suexec -V | # suexec -V | ||
252. rida: | 36. rida: | ||
-D AP_USERDIR_SUFFIX="public_html" | -D AP_USERDIR_SUFFIX="public_html" | ||
− | Nagu näha, soovib suexec, et kõik skriptid, mida tema abil käivitatakse, asuksid kataloogis | + | |
− | + | 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. | Ei hakka DOC_ROOT muutma ja loome testi sinna. | ||
'''Apache konfiguratsioon''' | '''Apache konfiguratsioon''' | ||
− | |||
− | |||
− | |||
− | |||
Muudame httpd.conf, vajadusel lisame: | Muudame httpd.conf, vajadusel lisame: | ||
267. rida: | 47. rida: | ||
LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so | LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so | ||
− | Tekitame virtualhostid | + | Tekitasime veel konfiguratsioonifaili sellise sektsiooni: |
+ | |||
+ | <IfModule mod_fastcgi.c> | ||
+ | FastCgiWrapper /usr/local/sbin/suexec | ||
+ | FastCgiConfig -singleThreshold 1 -pass-header HTTP_AUTHORIZATION | ||
+ | </IfModule> | ||
+ | |||
+ | |||
+ | Tekitame virtualhostid | ||
<VirtualHost *:80> | <VirtualHost *:80> | ||
SuexecUserGroup katse katse | SuexecUserGroup katse katse | ||
+ | ServerAdmin kasutaja@nimi.ee | ||
DocumentRoot /usr/local/www/data/katse | DocumentRoot /usr/local/www/data/katse | ||
ServerName www.nimi.ee | ServerName www.nimi.ee | ||
− | ScriptAlias /php-fastcgi/ /usr/local/www/data/katse/ | + | ScriptAlias /php-fastcgi/ /usr/local/www/data/katse/ |
AddType application/x-httpd-fastphp .php | AddType application/x-httpd-fastphp .php | ||
Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi | Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi | ||
</VirtualHost> | </VirtualHost> | ||
− | + | ||
<VirtualHost *:80> | <VirtualHost *:80> | ||
SuexecUserGroup katse3 katse3 | SuexecUserGroup katse3 katse3 | ||
+ | ServerAdmin kasutaja@nimi.ee | ||
DocumentRoot /usr/local/www/data/katse3/cgi-bin | DocumentRoot /usr/local/www/data/katse3/cgi-bin | ||
ServerName test.nimi.ee | ServerName test.nimi.ee | ||
− | ScriptAlias /php-fastcgi/ /usr/local/www/data/katse3/cgi | + | ScriptAlias /php-fastcgi/ /usr/local/www/data/katse3/cgi-bin |
AddType application/x-httpd-fastphp .php | AddType application/x-httpd-fastphp .php | ||
Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi | Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi | ||
291. rida: | 81. rida: | ||
</VirtualHost> | </VirtualHost> | ||
− | + | Alternatiivselt kataloogipõhiselt: | |
− | + | SuexecUserGroup katse katse | |
− | + | ||
+ | <Directory "/usr/local/www/data/cgi"> | ||
+ | Options +ExecCGI | ||
+ | AddHandler fastcgi-script .cgi | ||
+ | AddType application/x-httpd-fastphp .php | ||
+ | Action application/x-httpd-fastphp /cgi/php5-fcgi.cgi | ||
+ | </Directory> | ||
− | |||
− | Skript | + | '''Skript wrapperiks''' |
+ | |||
+ | Varasemalt sidusime virtualhostis iga .php laiendi kindla cgi skriptiga, mida suexeciga käivitame. | ||
+ | Viimaks ehitame skripti enda, mis käivitatuna suexeci abil kasutaja õigustes stardib php enda ja sellekaudu ka veebi. | ||
+ | |||
#!/bin/sh | #!/bin/sh | ||
− | PHPRC="/usr/local/etc/php.ini" | + | #PHPRC="/usr/local/etc/php.ini" |
export PHPRC | export PHPRC | ||
+ | PHP_FCGI_CHILDREN=4 | ||
+ | export PHP_FCGI_CHILDREN | ||
exec /usr/local/bin/php-cgi | exec /usr/local/bin/php-cgi | ||
− | + | Kopeerime selle faili kasutajate katse ja katse 3 kaustadesse (kataloogidesse): | |
− | + | /usr/local/www/data/katse/cgi-bin/php5-fcgi/usr/local/www/data/katse3/cgi-bin/php5-fcgi | |
− | |||
Muudame mõlema faili kasutajaõigusi chown käsuga: | 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"); | system("id"); | ||
− | php?> | + | php? > |
− | + | ||
www.nimi.ee skripti vaadates | www.nimi.ee skripti vaadates | ||
+ | hello world | ||
+ | |||
uid=1004(katse) gid=1004(katse) groups=1004(katse) | uid=1004(katse) gid=1004(katse) groups=1004(katse) | ||
test.nimi.ee | test.nimi.ee | ||
− | uid=1009(katse3) gid=1009(katse3) groups=1009(katse3) | + | hello world |
+ | |||
+ | uid=1009(katse3) gid=1009(katse3) groups=1009(katse3) | ||
− | |||
− | + | EENet 2006 |
Redaktsioon: 29. september 2010, kell 19:30
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:
# 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
Peale installeerimist saame kontrollida MILLE? olemasolu ja 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
Muudame httpd.conf, vajadusel lisame:
LoadModule suexec_module libexec/apache2/mod_suexec.so LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so
Tekitasime veel konfiguratsioonifaili sellise sektsiooni:
<IfModule mod_fastcgi.c> FastCgiWrapper /usr/local/sbin/suexec FastCgiConfig -singleThreshold 1 -pass-header HTTP_AUTHORIZATION </IfModule>
Tekitame virtualhostid
<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/ 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-bin AddType application/x-httpd-fastphp .php Action application/x-httpd-fastphp /php-fastcgi/php5-fcgi </VirtualHost>
Alternatiivselt kataloogipõhiselt:
SuexecUserGroup katse katse <Directory "/usr/local/www/data/cgi"> Options +ExecCGI AddHandler fastcgi-script .cgi AddType application/x-httpd-fastphp .php Action application/x-httpd-fastphp /cgi/php5-fcgi.cgi </Directory>
Skript wrapperiks
Varasemalt sidusime virtualhostis iga .php laiendi kindla cgi skriptiga, mida suexeciga käivitame. Viimaks ehitame skripti enda, mis käivitatuna suexeci abil kasutaja õigustes stardib php enda ja sellekaudu ka veebi.
#!/bin/sh #PHPRC="/usr/local/etc/php.ini" export PHPRC PHP_FCGI_CHILDREN=4 export PHP_FCGI_CHILDREN exec /usr/local/bin/php-cgi
Kopeerime selle faili kasutajate katse ja katse 3 kaustadesse (kataloogidesse):
/usr/local/www/data/katse/cgi-bin/php5-fcgi/usr/local/www/data/katse3/cgi-bin/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)
EENet 2006