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.