PHP with open_basedir performance problem

Stanislav Sedov stas at
Wed Feb 27 08:26:09 UTC 2008

On Thu, Feb 14, 2008 at 07:22:46PM +0200 Arkadi Shishlov mentioned:
> Stanislav Sedov wrote:
>> I'd suggest you to disable open_basedir at all or roll out specialized
>> implementation. I had a lot of similar problems with open_basedir in
>> the past, so I just rewrote it to match our specific security policy.
> Can you share a hint how exactly this specialized implementation may look like?
> The requirement is simple: php script working under apache mod_php can't 
> open files outside of virtual host document root whenever php safe mode is 
> enabled or disabled. Website owners can create symlinks.
> I understand the open_basedir is kinda flawed security measure, and 
> safe_mode is a primary safeguard with mod_php, but it would be nice to get 
> it working under FreeBSD too.

Well, my security mechanizms are pretty simple and use some combination of
MAC and bare uids/gid to enforce required permissions. The code is about
100 lines of code, much less then original open_basedir implementation.
In any case, the code won't be usuful to you as is, it works combined with
ad-hoc apache module, that sets required flags, variables, etc.

>> Most basedir problems are linked with the fact it produce a lot of lstast/
>> readlinks on every require, include or open command. On Linux it pereforms
>> even worse, as they implemented readlink there by hand, and, of course,
>> their implementation isn't particulry good.
> But there is no high sys cpu usage on Linux in contrary to FreeBSD, as 
> reported by original author of the thread..?
> Do you have numbers or benchmark ready? I see the number of syscalls 
> required is astonishing (on Linux) but doesn't cause any problem at first 
> look.

I don't have specific benchmark numbers, and it's true, that top on Linux
don't show such sys time usage, as on FreeBSD boxes. However, the overall
performance of boxes on FreeBSD is 30-40% higher, that Linux ones. This numbers
is empirical, but I'm pretty sure in them: in past I migrated Linux hosting
to FreeBSD-based, and after that, I was able to add a bunch of new users to
that boxes without performance impact. In fact, the load average on these
boxes are MUCH lower, that was on Linux. Also, I notices, that stat() costs
much more on Linux, that FreeBSD. I don't certainly know, why Linux shows low
sys time usage, probably it's just bugs in accounting.

My basedir patches was implemented later on FreeBSD boxes, and I never returned
to Linux. Thus I can't say whether it impacts Linux performance, or nor...

Stanislav Sedov

More information about the freebsd-performance mailing list