Skocz do zawartości
t4t4v4

PHP 5.3.8 + suPHP + FastCGI + DirectAdmin = ERROR

Polecane posty

Suexec i tak działa na prawach roota, po czym zmienia EUID procesu.

Kwestia tego zabezpieczenia jest, można by ująć, historyczna - po to, aby ktoś nie uruchamiał nie-swoich-skryptów-CGI.

 

Z tym, że jak masz osobny wrapper na usera, to możesz mu łatwo ścieżkę do php.ini stworzyć (ustawić zmienną PHPRC).

Przy jednym pliku też się da, ale trzeba troszkę pokombinować ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Panocki! Wykorzystując mój geniusz.. Joke, to wszystko dzięki Wam! Skleciłem taki skrypt z dwóch skryptów:

#!/bin/sh
for username in `ls /usr/local/directadmin/data/users`; do
{
mkdir -p /fcgi/${username}/public_html
cp /usr/local/directadmin/scripts/custom/fcgid.sh /fcgi/${username}/public_html/fcgid.sh && chmod 0700 /fcgi/${username}/public_html/fcgid.sh
cp /usr/local/directadmin/scripts/custom/php.ini /fcgi/${username}/public_html/php.ini
perl -pi -w -e "s/PHPCFG_BASEDIR/\/home\/${username}\//g;" /fcgi/${username}/public_html/php.ini
chown -R ${username}:${username} /fcgi/${username}
}
done;

 

Po nadaniu uprawnień wszystko ruszyło od kopa. Elegancko działa.

PHPInfo mówi:

Server API: CGI/FastCGI

Configure Command: ... '--enable-fastcgi' ...

 

Więc FastCGI działczy?

 

Może odejdę od tematu: jak nałożyć limity CPU na wykonywanie skryptów? Próbowałem tak (starter fcgid.sh):

#!/bin/sh
export PHP_FCGI_MAX_REQUESTS=0
exec cpulimit -P /usr/local/php5/bin/php-cgi -l 5

 

Skrypt jest wykonywany chyba w nieskończoność, strona nie ładuje się - jak zrobić to poprawnie?

 

 

Edit: Pomęczyłem, pomęczyłem i doszedłem:

#!/bin/sh
PHPRC="~"
export PHPRC
export PHP_FCGI_CHILDREN=1
exec (cpulimit -P /usr/local/php5/bin/php-cgi -l 10)

 

Za pomoc zapraszam do Zamościa na browarka wink.png

 

 

EDIT: Starter z CPULimit niby odpala skrypty PHP ale w ogóle nie limituje procka. Co z tym fantem zrobić? :)

Edytowano przez Avatat (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To jest dedyk, czy jakiś VPS na np. OpenVZ?

Jeśli to drugie, to możesz zapomnieć o używaniu cpulimit. Uruchomić się niby uruchomi, ale sensownie działać nie będzie (czemu? wskazówką jest część wspólna schedulera ovz i cpulimitu - metoda "wstrzymywania" procesów start/stop).

 

Jeśli to dedyk, to spróbuj skompilować sobie cpulimit ze źródełek wersji svn - ale to też lubi działać, jak chce.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To jest VPS na VMWare z jednym fizycznym rdzeniem dla mnie. Rano skompiluję sobie cpulimit, może to coś pomoże.

Jeszcze raz dzięki wszystkim za pomoc, dobrej nocki!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak go skompilujesz, to wywołaj przez

cpulimit --limit 10 /usr/local/php5/bin/php-cgi

Przy jednym rdzeniu jeszcze powinno jakoś tam działać

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Działa. Limity limitują hardcorowo:

Bez limitu czas wykonywania pewnego skryptu 2,7s

50% - 5,8s

5% - 50s

 

Miłego dzionka :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na świeżo zainstalowanym DA, kierując się tutorialem podanym wcześniej przez Miłosza, próbowałem zainstalować mod_fcgid. Kilka razy formatowałem vps'a, więc przy okazji kilkakrotnie instalowałem owy mod_fcgid, ale efekt zawsze był taki sam:

 

[sun Jan 15 03:01:03 2012] [warn] [client #] mod_fcgid: can't apply process slot for /fcgi/maciek/public_html/fcgid.sh

 

Co może być przyczyną owego problemu? (system CentOS 6 x32, mod_fcgid 2.3.6)

 

Z góry dzięki za pomoc

Edytowano przez Uriel (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys

Sprawdź uprawnienia i zwiększ ilość procesów w konfiguracji modułu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Odkopię temat, bo korzystałem z informacji w nim zawartych.

 

Na czystym DA zainstalowałem wszystko tak jak w poradniku - http://www.bxtra.net/comment/2260, z jedną różnicą że mod_fcgid w wersji najnowszej, tj. 2.3.9

 

Wynik polecenia suexec -V:

 -D AP_DOC_ROOT="/"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec_log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"

Niestety, ale pojawia się błąd Internal Server Error przy wejściu na stronę z PHP i nie wiem gdzie szukać problemu.

 

Log z pliku suexec_log:

[2014-09-14 02:48:42]: uid: (1006/mojekonto) gid: (1008/mojekonto) cmd: fcgid.sh
[2014-09-14 02:48:42]: command not in docroot (/fcgi/admin/public_html/fcgid.sh)

command not in docroot - z informacji jakie znalazłem wnioskuję, że muszę zmienić AP_DOC_ROOT, jak się domyślam obecnie jest "/" to muszę zmienić chyba na "/fcgi", czyli na katalog gdzie znajdują się startery. Tak więc, czy muszę skompilować na nowo mod_fcgid? Jeżeli tak w jaki sposób mogę to zrobić?

EDIT:

Udało się, zmieniłem ścieżkę na "/fcgi" w pliku "configure.apache" i skompilowałem apache (./build apache n), ale nadal jest "Internal Server Error".

 

 

Log z pliku error_log:

[Sun Sep 14 02:48:42 2014] [warn] [client xx.xx.xx.xx] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Sun Sep 14 02:48:42 2014] [error] [client xx.xx.xx.xx] Premature end of script headers: index.php
[Sun Sep 14 02:48:42 2014] [error] [client xx.xx.xx.xx] File does not exist: /var/www/html/500.shtml
suexec policy violation: see suexec log for more details

Będę wdzięczny za pomoc.

 

na pewno ?
Powyżej masz wklejony opis z suexec.c, jeżeli tego nie zakomentuje i nie skompiluje suexec to nie odpali tego fastcgi ...

Patrys, o co dokładnie chodziło Ci w tym poście?

Edytowano przez Desavil (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×