W poprzednim artykule nauczyliśmy się uruchamiać PHP z prawami użytkownika wykorzystując CGIWrap. W tym krótkim opisie, pokażę jak można dodatkowo spersonalizować php.ini dla każdego użytkownika, by zapewnić jemu jak najlepszą obsługę, ale również nie narażać swojego systemu na niepotrzebne ryzyko.
Trochę witaminy C nikomu nie zaszkodziło
Typową metodą by uzyskać spersonalizowane php.ini jest wyeksportowanie w jakiś sposób zmiennej środowiskowej PHPRC. W przypadku mod_php za pomocą SetEnv, w przypadku rewritów częstym sposobem jest definiowanie zmiennej w samym rewricie za pomocą E=PHPRC:${dir2owner:${…}} gdzie dir2owner jest RewriteMapą typu ‘prg’, która mapuje właściciela wykonywanego skryptu lub katalogu w którym znajduje się skrypt. Aż w końcu w przypadku cgi/fastcgi jest dodanie do wrappera shellowego odpowiedniej definicji export.
W przypadku CGIWrapa najlepszą metodą będzie po prostu wyeksportowanie PHPRC w samym kodzie CGIWrapa. Do tego celu sporządziłem następującego patcha:
--- fetch.c 2009-10-13 03:28:00.734065077 +0200 +++ fetch.c-new 2009-10-13 03:28:17.407378494 +0200 @@ -30,10 +30,13 @@ char *pathInfoString; char *queryString; char *userStr; + char *phprc; + char *phpdir; DEBUG_Msg("\n"); userStr = (char *) 0; + phpdir = "/etc/php/users.d/"; //pathInfoString = getenv("PATH_INFO"); pathInfoString = getenv("PATH_TRANSLATED"); if ( pathInfoString ) /* use PATH_INFO */ @@ -44,6 +47,11 @@ DEBUG_Msg("Trying to extract user from PATH_TRANSLATED."); userStr = GetPathComponent(1, pathInfoString); + phprc = (char *)malloc((strlen(phpdir) + strlen(userStr) + 1) *sizeof(char)); + strcpy (phprc , phpdir); + strcat (phprc , userStr); + setenv("PHPRC", phprc, 1); + DEBUG_Str("Setting PHPRC to ", phprc); } else {
(patch do ściągnięcia stąd)
Definiujemy sobie w ten sposób katalog w którym PHP będzie się spodziewać plików php.ini dla użytkowników (w tym przypadku jest to katalog /etc/php/users.d/$USER/, gdzie $USER to użytkownik systemu). Katalog można ustawić w zmiennej “phpdir” w patchu.
Z tą poprawką nie musimy już nic więcej przekazywać serwerowi Apache. Wystarczy podmienić poprawioną binarkę CGIWrapa i bez restartu Apache, cieszyć się spersonalizowanymi php.ini.
Użytkowników PLD-Linux ucieszy być może fakt, że patch jest już częścią dystrybucyjnego CGIWrapa od release 5.
Bijcie!
Jeśli tylko można prosić o </EXCERPT> w treści, bo na głównej to strasznie wygląda, byłoby super ;)
Bardzo chętnie, ale nie wiem o co chodzi. Domyślam się, że o formatowanie wpisu, ale nie jestem na czasie w Joggerze także proszę o wytyczne.
Wstaw </EXCERPT> w ty miejscu, w którym, wg. Ciebie, wpis powinien kończyć się na stronie głównej Jogger.pl tak żeby nie wyglądało to tam … źle ;-)
Chodzi o to, że wpisz jest dość długi. Tak więc używa się znacznika </EXCERPT>, żeby na głównej wyświetlał się jedynie do tego znacznika, a reszta wpisu była widoczna jedynie, jeśli wejdzie się prosto w notkę. W tym przypadku np. wg mnie dobrze byłoby go wstawić zaraz za
>Do tego celu sporządziłem następującego patcha:
;)
Dzięki Panowie. Wstawiłem ale jakoś na głównej nie widze rezultatu.