کاربران , گروه ها , سطح دسترسی و مجوزهای یونیکس
فکر کردم بد نباشه یه سری اطلاعات در مورد سطح دسترسی و مجوزها تا اونجایی که مربوط به مدیریت وب سایت میشه اینجا بزارم شاید مورد استفاده خیلی از عزیزانی قرار بگیره که سایتی رو مدیریت میکنن هم از نظر کاربردی و هم از نظر امنیتی.
کلیات بدیهی رو نمیگم و فقط به جزییاتی اشاره میکنم که به درد یه وب مستر میخوره و البته تمرکز رو هم میزاریم رو هاست های اشتراکی که تقریبا اکثرمون از خدمات این نوع هاست ها استفاده میکنیم.
فکر کنم همه میدونیم هر فایل (یا دایرکتوری) تو یونیکس یه مجموعه اختیارات داره که میشه یه کمک اون سطح دسترسی رو مشخص کرد. این مجموعه تو سه تا بخش دسته بندی میشه : مالک , گروه , دیگران
هر فایلی یه مالک داره (کاربری که فایل رو بوجود آورده) مشخصا این کاربر میتونه عضو یه گروه باشه که اون گروه میتونه فقط شامل خود اون کاربر باشه یا از چند تا کاربر مختلف تشکیل شه و در نهایت بقیه کاربرها که نه صاحب اون فایل هستن و نه تو گروهی عضو هستن که مالک تو اون گروه عضوه.
برای هر فایل یا دایرکتوری میشه به هر کدوم از این مجموعه ها سه تا دسترسی مختلف داد.(خوندن (r), نوشتن(w) و اجرا(x)) که گاهی این مجوز رو به صورت عدد (نمایش اکتال) نشون میدن.
مثلا برای فایل index.php
دیگران گروه مالک
rwx rwx rwx
421 421 421
مثلا 754 یعنی:
7 (1+2+4): مالک هم اجازه خوندن فایل رو داره و هم اجازه نوشتن (تغییر دادن- پاک کردن) و هم اجازه اجرا کردن فایل.
5 (1+4): گروه (تمامی کاربرهایی که تو گروهی عضو هستن که فایل متعلق به اون گروه هستش) اجازه خوندن و اجرای فایل رو دارن.
4 (4): و در نهایت بقیه (دیگران) فقط اجازه خوندن فایل رو دارن.
حالا بریم سر اصل مطلب ببینم هاست های اشتراکی چطور کاربرا و گروهها رو مشخص میکنن و با توجه به نحوه عمل اونها ما به عنوان وب مستر باید چیکار کنیم که هم از نظر امنیتی و هم از نظر کارایی بهترین نتیجه رو بگیریم.
وقتی ما با مرورگر وب خودمون یه فایل رو تو یه سرور باز میکنیم جدا از اینکه مالک فایل کی هستش ما به سطح اختیارات httpd به سیستم شناخته میشیم. (یعنی یوزر ما و سطح اختیارات ما همون یوزر و سطح اختیارات httpd هستش)
Daemon آپاچی (httpd) رو میشه با هر یوزر و گروهی اجرا کرد. حالت پیشفرض یوزر آپاچی هستش که اختیارات محدود و کنترل شده ای داره. (مثلا اگه httpd با یوزر روت اجرا بشه اونوقت کاربری که از مرورگر وب به فایل دسترسی پیدا میکنه سطح اختیارات روت رو داره)
مدیرای هاستینگ اغلب از دو روش مرسوم برای کنترل سطح دسترسی استفاده میکنن.
تو روش اول میان یه یوزر و گروه جدا برای هر کدوم از مشتری ها که از اونا هاست خریده در نظر میگیرن اما یوزر آپاچی رو برای هر کدوم از مشتری ها تغییر نمیدن. اینکار باعث میشه مثلا وقتی شما از طریق FTP یه فایل رو آپلود میکنی مالک اون فایل همون یورز مربوط به مشتری باشه ولی وقتی همون فایل رو با مامبو آپلود میکنی مالک اون فایل یوزر آپاچی بشه. اینجا یکم سر در گمی ایجاد میشه مثلا زیاد دیدم بعضیا یه قالب مامبو رو از طریق خود مامبو نصب میکنن و دسترسیش رو میزارن 644 ولی از cpanel یا ftp نمیتونن او رو حذف کنن و میپرسن مالک که سطح دسترسیش 6 هستش یعنی اجازه نوشتن و تغییر دادن داره پس چرا نمیتونم این فایل رو حذف کنم. دلیل اینه که مالک فایل در حال حاظر آپاچی هست نه شما.
خب تو یه همچین شرایطی همه میتونن به راحتی به فایل های بقیه مشتری ها از طریق یه phpshell ساده دسترسی پیدا کنن! اینطور نیست؟
دقیقا همینطوره! تو یه همچین شرایطی مدیرای هاستینگ میتونن به کمک safe_mode یا open_basedir دسترسی ها رو محدود کنن ولی این کار باعث میشه بعضی از برنامه ها به مشکل بر بخورن مثل مامبو!
از طرفی اگه راهی واسه بایپس کردن این محدودیت ها پیدا بشه که تقریبا سالی یکی دو بار آسیب پذیری هایی در این رابطه پیدا میشه اون وقت همه چی تمومه.
روش دوم اینکه مدیرای هاستینگ میان safe_mode یا open_basedir رو غیر فعال میکنن و به هر مشتری یه یوزر و گروه جدا میدن و آپاچی رو هم برای هر مشتری با همون یوزر خودش اجرا میکنن مثلا کاری که تو cpanel میشه انجام داد. مسئله اصلی اینجاست تو همچین شرایطی فقط و فقط مجوز هاست که از فایل های کاربر محافظت میکنه و اگه شما به عنوان وب مستر مجوزها رو به درستی تعیین نکرده باشید کار شما تمومه. مهاجمی که به یکی از سایت های روی هاست شما نفوذ کرده باشه یا حتی مشتری های دیگه به راحتی به فایل های شما دسترسی دارن اگه مجوز ها درست تعیین نشده باشه.
تو همچین شرایطی بهتره که مجوز نوشتن رو از دیگران و یا حتی از گروه بگیرید (دقت کنید این برای وقتی کارسازه که httpd با یوزر های مختلف اجرا شه وگرنه اگه برای همه با یه یوزر مشترک مثل آپاچی اجرا شه کمکی به محافظت از شما نمیکنه) اینکار باعث میشه کسی جز خود شما نتونه فایلی رو ایجاد کنه یا تغییر بده. به نظر من مجوز اجرا رو از همه بگیرید حتی صاحب فایل. (نکته اینه که PHP به مجوز خوندن برای اجرای یه فایل پی اچ پی نیاز داره نه اجرا , مجوز اجرا بیشتر به مهاجمایی کمک میکنه که اکسپلویتی رو آپلود کردن یا اگه تونستن کامپایل کردن و حالا میخوان برای افزایش اختیارات اجراش کتن).
بازم میگم همه چی بستگی به نحوه مدیریت هاست شما داره جالبه بدونید اگه یوزر آپاچی بین همه مشترک باشه وشما هم یه فایل config.php داشته باشید که توش یوزر و پسورد دیتابیستون باشه و مالکش آپاچی باشه. حتی اگه فقط به مالک دسترسی فقط خوندن داده باشید بازم مشتریهای دیگه میتونن به اطلاعات شما دسترسی پیدا کنن.
روشهای دیگه ای هم وجود داره مثلا اینکه میان safe_mode یا open_basedir رو غیر فعال میکنن و به هر مشتری یه یوزر و گروه جدا میدن یا نمیدن ولی آپاچی رو با یوزر مشترک اجرا میکنن و حتی فانکشن های حساس PHP رو هم غیر فعال نمیکنن. تو همچین مواردی ترجیح میدم بگم بهتره بیخیال اون هاست شید تا اینکه بگم انجام چه کاری بهتره.
پس همیشه بهترین کار اینه که یه شناخت نسبت به مسایل جاری هاست خودتون پیدا کنید و با توجه به اون همیشه کمترین حق دسترسی رو به فایل ها و دایرکتوری ها تون بدید. گاهی اوقات شاید دادن دسترسی 600 به یه فایل دور از منطق به نظر برسه ولی بهترین امنیت رو البته در کنار کارایی برای شما بوجود بیاره.
Copyright (c) KAPDA under the terms of the GNU Free Documentation License