suPHP

Fórumok

Sziasztok!

A házi szerveremen szeretném beállítani a suphp-t de nem igazán működik.

Debian Etch + Apache 2.2, MySQL5, PHP5 fut rajta.

a suphp-t csomagból telepítettem:

apt-get install libapache2-mod-suphp php5-cgi

/etc/apache2/mods-enabled/suphp.conf :

<IfModule mod_suphp.c>
        AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml
        suPHP_AddHandler x-httpd-php
        suPHP_Engine on
</IfModule>
# /etc/init.d/apahce2 force-reload

így állítottam be, mire Internal Server Error lett a válasz
minden howto amit találtam forrásból telepíti a suphp-t amit megcsinálok ha muszáj, de nem sok kedvem van hozzá, főleg mert azt gondolom hogy a Debian csomagokkal nem szokott gond lenni, így inkább valószínűleg én szúrtam el a configolást valahol. A kérdés csak az hogy hol... Vagy kihagytam valamit?

Köszi a segítséget!

Hozzászólások

megpróbáltam:

fordítás, telepítés:
#a2dismod php5
#/etc/init.d/apache2 force-reload
#apt-get install apache-prefork-dev (egy egész csomó csomag felment)
#cd /tmp
#wget http://www.suphp.org/download/suphp-0.6.2.tar.gz
#tar xvfz suphp-0.6.2.tar.gz
#cd suphp-0.6.2/
#nano src/apache2/mod_suphp.c

ACCESS_CONF csere erre: RSRC_CONF | ACCESS_CONF
az APT_INIT_ITERATE kezdetű sorokban

#./configure --prefix=/usr --sysconfdir=/etc --with-apache-user=www-data --with-setid-mode=paranoid --with-apxs=/usr/bin/apxs2
#make
#make install

Beállítások, configfájlok:
#cp /tmp/suphp-0.6.2/doc/suphp.conf-example /etc/suphp.conf

#nano /etc/suphp.conf


[global]
;Path to logfile
logfile=/var/log/suphp.log

;Loglevel
loglevel=info

;User Apache is running as
webserver_user=www-data

;Path all scripts have to be in
docroot=/

;Path to chroot() to before executing script
;chroot=/mychroot

; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false

;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true

;Send minor error messages to browser
errors_to_browser=false

;PATH environment variable
env_path=/bin:/usr/bin

;Umask to set, specify in octal notation
umask=0077

; Minimum UID
min_uid=100

; Minimum GID
min_gid=100


[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/bin/php5-cgi

;Handler for CGI-scripts
x-suphp-cgi=execute:!self

#nano /etc/httpd.conf


   LoadModule suphp_module       /usr/lib/apache2/modules/mod_suphp.so

#a2enmod php5
#/etc/init.d/apache2 force reload

#nano/etc/apache2/sites-avaliable/default


<VirtualHost *>
  ServerName www.example.com
  ServerAdmin webmaster@example.com
  DocumentRoot /var/www
  
  suPHP_Engine on
  suPHP_UserGroup testuser test
  AddHandler x-httpd-php .php .php3 .php4 .php5
  suPHP_AddHandler x-httpd-php

<itt még van csomó bejegyzés>

</VirtualHost>

#/etc/init.d/apache2 restart

Internal Server Error

talán az lehet a baj hogy ez a howto eggyel korábbi suphp-hoz és Sarge Debianhoz szól? van valakinek tanácsa hogy mit javítsak még ki?

miért nem működik a csomagból telepített suphp? miért fontos lefordítani?

köszi a segítséget

-----------------------------
Ubuntu Gutsy Gibbon

apache error.log:
[error][client] (2) No such file or directory couldn't create child process: /usr/sbin/suphp for /var/www/index.html

-----------------------------
Ubuntu Gutsy Gibbon

beírtam a /sites-avaliable/default -ba hogy
suPHP_ConfigPath /etc/php5/apache2/php.ini

de a baj már korábban van: a2enmod suphp
ilyen modul nem létezik!
pedig igazán igyekeztem feltelepíteni. mi a gond? a mods-avaliable -ba hogy fog bekerülni egy ilyen modul?
a howto egy szót se írt erről.

-----------------------------
Ubuntu Gutsy Gibbon

kösz, átlinkeltem, most már be tudja olvasni azaz az a2enmodra azt mondja oké.

ha a sites-avaliable/default -ban a következő sor nincs kikommentezve akkor még mindig internal error van, a többivel nincs gond:
AddHandler x-httpd-php .php .php3 .php4 .php5

viszont akár ezzel van a gond, akár nem, még mindig nem írhatóak a fájlok a webszerverrel, annak ellenére, hogy most már engedi bekapcsolni a modult, látszik is a mods-enabled-ben.

-----------------------------
Ubuntu Gutsy Gibbon

nahh nálam ez úgy megy, hogy vannak userek saját uid el, ftp loginnal pl pistike
ekkor ugye pistike pistike:pistike jogokkal teszi le az fájljait. Ekkor a conpath nak megadom hogy a /etc/php5/users/pistike dirben van a php.ini így a php-cgi pistike uid al fut. Ezért minden fájlt tud írni a php, és nem kell 777 jog pl fájlokra. sőt ha valamin akár csak group írási jog van a suphp nem is fut mivel alapból úgy van beállítva hogyha ilyen van akkor szóljon.

Core2Duo T7100, 2.5G, Ubuntu 7.10, 2.6.22

Ha a sites-avaliable/default -ból eltávolítom a suphp-ra vonatkozó sorokat:

suPHP_Engine on
suPHP_UserGroup elephant elephant
AddHandler x-httpd-php .php .php3 .php4 .php5
suPHP_AddHandler x-httpd-php

akkor elmúlik az internal error, de nem működik a modul. gondolom akkor ez a hibás bejegyzés, de mi vele a baj?

-----------------------------
Ubuntu Gutsy Gibbon

Hát jó. Azt hiszem ezt feladom.

Van azért egy kérdésem: ha az egész cuccot átadom a www-data tulajdonába, hogy békén írogathasson bele, az biztonsági résnek számít? gondolom nem, csak kicsit kényelmetlen konzolból mert nem férek hozzá.

És a másik kérdésem az, hogy egy lefordított programot hogyan kell eltávolítani? Bármit írok be a googleba, mindig csak azt írja hogy hogyan kell telepíteni...

köszi

-----------------------------
Ubuntu Gutsy Gibbon

Most kezdek átállni fcgid+suphp-ra és felmerült egy kérdés:

Az apache webszerver apache:apache (uid:gid) joggal fut.
Benne lévő virtualhost: suPHP_UserGroup ftpuser ftpgroup
Fájlok ftpuser:ftpgroup tulajdonában vannak.

A suphp.log szerint a php-k ftpuser:ftpgrouppal lefutnak, chmod 600-as fájl joggal is gond nélkül.

Problémám a képekkel van. Ott már olvasási jog kell az apache usernek is, különben nem tölti be.

A sessionokat nagyon helyesen ftpuser:ftpgroup 600-as joggal létrehozza a temp mappában.

Értem én, hogy a php-kat futtatja más userrel, de ha ebben a php-ban van egy képbehívás, miért nem éri el? A benne lévő html tag miatt? Úgy tünik, hogy a képeket már az apache-ot futtato apache:apache-al akarja elérni.

Van erre valami trükk?

a statikus fajlokat nem kell hogy a php ertelmezo elofeldolgozza, ezert nem kerul at a vezerles a suphp-nak.
3 dolgot csinalhatsz,
adsz readet az apache usernek a fajlokra
atallitod, hogy a php parser a kep kiterjesztesu fajlokra is rafusson (ez ocsmany semmikepp se)
beallitod, hogy virtualhostonkent eltero userrel fusson az apache. szerintem lehet ilyet.
ebben az esetben ugyanazzal a userrel fusson, mint amivel a suphp fut ahhoz a userhez.
amugy mintha mod_itk is ilyesmit csinalna, es akkor nem kellene suphp sem.

Tyrael

Tetszik a mod_itk az alapján amit írtál.
Ezt találtam: http://apachehacker.com/kabir/access-control/running-virtual-hosts-unde…

Viszont attól tartok, hogy ehhez valós UNIX user kell.
suphp-hoz nem szükséges szerencsére.

Lehet marad akkor suphp + chmod 640 10000:apache, 10001:apache jogokkal a vhostokban.

Jól érzékelem, hogyha fcgid wrapperben megadom a php.ini helyét, akkor a suphp ezt felülértelmezi és alapesetben a wrapper mellett majd a docrootban keresi?
Amint pedig beállítom:
suPHP_ConfigPath /etc/php/cgi-php5/1.ini

Attól kezdve elsődlegesen itt keresi, ha nincs akkor használja a docrootban lévő php.ini-t.

Ettől kezdve a wrapperben lévő "export PHPRC=/var/www/domain.hu/teszt/1.ini" sor felesleges?

update: Vmi nem kerek itt.
Az fcgid és suphp modul betöltve. Egy adott virtualhostba irtam be a kovetkezoket:

1.eset
AddHandler fcgid-script .php
FCGIWrapper /var/www/domain.hu/teszt/php-cgi .php

A wrapperen keresztül bejön a php. Ha a wrapperbe másik php.ini-t irok, az új beállításokkal jön be.
(phpinfo() és a mem_limit-et változtattam)
Itt nincs suphp, eddig korrekt.

2. eset
Hozzáadom a suphp-t.


<IfModule mod_suphp.c>
suPHP_Engine on
suPHP_AddHandler fcgid-script
suPHP_UserGroup ftpuser ftpgroup
suPHP_ConfigPath /etc/php/cgi-php5/1.ini
</IfModule>

Semmi újdonság nem történik, mintha ezek a sorok ott sem lennének. A fájlokat apache userrel kezeli (ezzel fut az webserver)

3. eset
A suphp alapból a "x-httpd-fcgi"-t preferálná, így átírom arra az egészet:


suPHP_Engine on
suPHP_AddHandler x-httpd-fcgi
suPHP_UserGroup ftpuser ftpgroup
suPHP_ConfigPath /etc/php/cgi-php5/1.ini
AddHandler x-httpd-fcgi .php

AddHandler x-httpd-fcgi .php
FCGIWrapper /var/www/domain.hu/teszt/php-cgi .php

Mintha az utolsó 2 sor ott sem lenne, akár ki is vehetném. Csak a suphp megy. Jogok rendben, ftpuserrel kezeli a fájlokat, hisz azt adtam meg a suphp-nak.
Tehát az wrappernek semmi haszna nincs (defaultnak sincs). Kitörtölhetem az exec sort, akkor is bejön a php. Az 1-2. esetben reagált a benne lévő php.ini változtatásra, szándékos hibára, tehát_használta_. Nem úgy a 3. esetben.

Hogy lehetne a 2-t összehozni?

4. eset
Mind a 2-2 sort benne hagyom, akkor szórja a hibákat.
mod_mime_magic: can't read `/var/www/domain.hu/teszt/index.php'
[debug] arch/unix/fcgid_proc_unix.c(525): (111)Connection refused: mod_fcgid: can't connect unix domain socket: /var/run/fcgidsock/10793.7

Végezetül wrapper:


#!/bin/sh
export PHPRC=/var/www/domain.hu/teszt/1.ini
export PHP_FCGI_CHILDREN=4
export PHP_FCGI_MAX_REQUESTS=500
exec /usr/bin/php-cgi $@

Kérdésem: Miként lehetne a 2-t (fcgid+suphp) összehozni? Cél: egyéni php.ini, de megtartva a wrappert.