Edit report at https://bugs.php.net/bug.php?id=52312&edit=1
ID: 52312 Comment by: css at morefoo dot com Reported by: v dot damore at gmail dot com Summary: PHP safe_mode/open_basedir - lstat performance problem Status: Analyzed Type: Bug Package: Safe Mode/open_basedir Operating System: Linux PHP Version: 5.2.13 Block user comment: N Private report: N New Comment: Hello, Not much more than a "me too", sorry. Is there any plan in the works to make php both safe in a mass hosting setup as well as not take a big performance hit when running webapps with a large number of "require" and "include" functions? I'm running php 5.3.6 and still seeing a huge amount of cpu time spent in "system" on common web apps like Joomla, Drupal and C5. Not seeing a clear solution that works well on a shared hosting setup. Previous Comments: ------------------------------------------------------------------------ [2011-06-02 15:01:13] aargoth at boo dot pl You can simply use this PHP extension to bypass default security checks mentioned in comments above. http://php.webtutor.pl/en/2011/06/02/running-php-on-nfs-huge-performance-problems-and-one-simple-solution/ ------------------------------------------------------------------------ [2011-04-05 18:27:16] cedric at yterium dot com As a matter of fact, same performance problem occurs with PHP Version 5.3.3 on Debian Squeeze. On our test plateform (with an SSD disk) a small bench show that the penalties of using open_basedir is more than small on real case application. Base configuration : ab -n200 -c20 http://benchb.xxx.yy/ Requests per second: 266.45 [#/sec] (mean) After open_basedir activation : Requests per second: 82.95 [#/sec] (mean) Recompiling with --disable-phar doesn't reduce the performance gap. Recompiling after patching main/main.c with comment on both occurences of : //CWDG(realpath_cache_size_limit) = 0; allows to reach an acceptable performance : Requests per second: 178.27 [#/sec] (mean) By increasing the realpath cache, we can at last reach a smaller penalty : Requests per second: 220.69 [#/sec] (mean) Our tries tu use open_basedir on NFS leads us to more dramatic situation. Can we expect a fix for a better situation in further PHP versions ? Maybe this realpath cache de-activation could be a default setting in case of open_basedir with the ability of re-activating without need of recompiling. I know this can be a security hole, but maybe it's better to give an intermediate choice between on/off. I'm affraid that in the current situation, activating open_basedir is not really an acceptable choice due to the performance struggling, and I think that's worse for security. ------------------------------------------------------------------------ [2010-07-23 13:26:00] v dot damore at gmail dot com Hello, I have recompiled php commenting both in main/main.c: /* if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) { CWDG(realpath_cache_size_limit) = 0; } */ I have defined into TSRM/tsrm_virtual_cwd.c #define realpath(x,y) strcpy(y,x) and I have disabled PHP function symlink. Now I finally not have performance problems, but I suppose I still can have security problem. Can you help me in order to understand if there is a better solution? ------------------------------------------------------------------------ [2010-07-14 16:25:28] v dot damore at gmail dot com I want make it clear first that: in submitted test we can see only 4 directory scan, I my production environment I have seen up to 8 directory scan for php file. If we disable PHAR I suppose only first full scan path will be removed. So other 3 full scan path remain there, probably we need to change php_check_specific_open_basedir in order to really try to remove inefficiencies. ------------------------------------------------------------------------ [2010-07-14 15:58:22] ras...@php.net Yup, there are clearly some inefficiencies here. We are relying too much on the realpath_cache being enabled. You can eliminate the phar one by eliminating phar for now. Recompile with --disable-phar until we get this cleaned up. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=52312 -- Edit this bug report at https://bugs.php.net/bug.php?id=52312&edit=1