خوبه که به جهت کامل شدن مطالب مطرح شده در این تاپیک مطلب دیگری رو مطرح کنم.
گفتیم که همهء برنامه های PHP تحت کاربر apache اجرا میشن و از طرف دیگه نیاز هست apache حداقل به فایلهای لازم داخل www دسترسی داشته باشه تا بتونه وبسایت ما رو اجرا کنه. سوال خوب و باریک بینانه ای که در اینجا پیش میاد اینه که در اینصورت آیا سایتها/کاربران دیگری که با ما روی یک هاست اشتراکی هستن قادر نخواهند بود تا به فایلهای ما دسترسی پیدا کنن؟
طی تست هایی که بنده داشتم انجام میدادم خواستم با استفاده از PHP به بعضی فایلهای خاص که در لینوکس اجازهء دسترسی به اونها داده شده دسترسی پیدا کنم که با یک پیام خطا نظیر این روبرو شدم:
open_basedir restriction in effect. File(/etc/shadow) is not within the allowed path(s): (/home/myuser/:/tmp:/var/tmp:/usr/local/lib/php/) in /home/myuser/domains/mydomain.com/public_html/test/test.php on line 2
خب این پیام خطا تنظیم open_basedir برای کاربر جاری رو نشون میده که میگه این کاربر فقط به دایرکتوری های خاصی که لیست شدن میتونه دسترسی داشته باشه. یکی دایرکتوری خانگی خودش (/home/myuser/) که فایلهای وب خودش هم در یک زیردایرکتوری از اون قرار دارن، دیگری دایرکتوری tmp و غیره که کاربرد همه مشخص هست و برنامهء کاربر یا PHP یا آپاچی با این دایرکتوری ها به نحوی سروکار دارن یا ممکنه سروکار داشته باشن.
بنابراین خوشبختانه اگر این تنظیمات درست اعمال شده باشن، کاربران دیگر نمیتونن به فایلهای شما دسترسی پیدا کنن.
حالا اینکه چطور در هاستهای اشتراکی این تنظیمات رو به ازای هر کاربر تعیین میکنن بنده اطلاع ندارم و اگر شما فهمیدید به ما هم خبر بدید. چون بنظرم این یه تنظیم کلی هست در حالت عادی (یعنی برای تمام کاربران یک تنظیم یکسان)، درحالیکه به ازای هر کاربر، آدرس دایرکتوری خانگی تفاوت میکنه.
خلاصه این محدودیت مربوط به سیستم عامل و پرمیشن ها و سیستم فایل سرور نمیشه، چون همونطور که گفتیم بخاطر اینکه تمام برنامه های PHP تحت یک کاربر مشترک اجرا میشن امکان تفکیک دسترسی اونها وجود نداره و سیستم همه رو بعنوان یک کاربر واحد میبینه (بخاطر همینه که اگر فایلهای سشن در tmp ذخیره بشن همه میتونن به فایلهای سشن همدیگر دسترسی داشته باشن). اما این تنظیم PHP جلوی دسترسی کاربران به دایرکتوری و فایلهای موجود در دایرکتوری خانگی دیگران رو میگیره. چون من بطور مثال فقط به /home/myuser/ که دایرکتوری خانگی خودم هست دسترسی دارم و نه /home/user2/.