اول بگم که این بحث فقط در مورد وردپرس نیست، در مورد هر برنامه تحت وبی که نوشتید هم صادقه، شاید از دروپال استفاده کنید و یا جوملا اما نکته اینه که خودم از وردپرس استفاده میکنم و از تم دیفالت وردپرس هم بهره میبرم و میتونم بگم پرمیشن ها چطوری تنظیم بشه هم امنیت رو خیلی بالا برده باشید و هم اینکه سایت و وبلاگتون بدون هیچ مشکلی بالا بیاد. اما با کمی بازی میتونید این قاعده و این روش رو جاهای دیگه هم پیاده کنید.
نکات این راهنما روی هاستهای که به صورت شیر و اشتراکی استفاده میشن بیشتر به کار میاد.در هاست شیر تعداد زیادی وبلاگ و سایت متعلق به کاربران مختلف وجود داره و عموما تنظیمات طوری صورت میگیره که صاحب یک وبلاگ سر از کار وبلاگ دیگه در نیاره و یه جورایی ایزوله باشن کاربرا، بنابراین اگر دسترسی به یک سرور کامل دارید و مثلا وردپرس رو مستقیم از مخازن نصب کردید و خودتون یکه و تنها روی سرور هستید احتمالا لازم نیست خیلی نگران باشید!
فرض این راهنما بر اینه که سرور لینوکس ببن چند ده نفر آدم شیر شده و هر کدوم از اونها وبلاگ و سایتهای خودشون رو میتونن داشته باشن. یکی از سیستمهای معروفی که اغلب مدیر سرور برای مدیریت فلهای وبلاگ و سایت استفاده میکنه سیپنل که روی سرور لینوکس، نصب میکنه و بعد فرت و فرت فضا میفروشه تا جایی که سرور اشباع میشه و رم و پردازشگر دیگه تا حد خرخره و جون کندن کار میکنن!
احتمالا اگه هزینه کمی میدید برای میزبانی وبلاگ و سایتتون و از اون مهمتر مثلا سی پنل دارید و یا دایرکت ادمین! بدین معنی که روی سرور لینوکس غیر از شما کلی آدم دیگه هم هست (احتمالا). سی پنل برای هر کاربری که مقداری فضا باید بهش متعلق بگیره یه فولدر توی پوشه خونگی لینوکس به اسم اون کاربر میسازه و به صورت پیشفرض تنظیمات رو طوری قرار میده که یک کاربر از محتویات پوشه کاربر دیگه مطلع نشه. بنابراین وقتی وارد سی پنل میشید توقع نداشته باشید بتونید محتویات پوشه کاربر دیگه رو ببنید :)
حالا یه نیم نگاهی داشته باشیم به پروسه نصب وردپرس! وقتی وردپرس رو نصب میکنید به صورت دیفالت مجوز فایل wp-config.php روی ۶۴۴ تنظیم میشه. همینطوره بقیه فایلهای داخل وردپرس! مجوز فولدرها هم ۷۵۵ تنظیم میشه.
wp-config.php فایل خیلی خیلی حساس و مهمیه! با این مجوز شما دارید دو دستی یوزر و پسورد دیتابیس و بنابراین کل زندگی تون رو به راحتی تقدیم میکنید به هکرای خیلی خیلی ناشی! و باید ناراحت باشید از این موضوع که احتمالا به زودی حتی یه هکر ترک هم میتونه سایت و وبلاگتون رو هک کنه!
بیاییم ببینیم چه کارایی میشه انجام داد با این مجوز. فرض کنید یکی از همسایه ها یه خورده کنجکاوه. همسایه منظور کسی که روی همین سروری که وبلاگتون موجوده، سایت و وبلاگ داره بعلاوه دسترسی به ترمینال. این ادم در حالت عادی نمیتونه محتویات پوشه home لینوکس رو ببینه چون به صورت صحیح توسط سی پنل پرمیشن صحیح دارن(مگه اینکه خیلی مسئول سرور ناشی باشه و دستی تغییر داده باشه). این ادم برای اینکه بفهمه چه کسایی کنارش هستن (دایرکتوری های موجود در پوشه home رو ببینه) می تونه بره سایتای تبدیل دامین به آیپی (+) و برای مثال آدرس وبلاگم رو وارد کنه و آیپی سرور رو در بیاره و بعد بره سراغ موتور جستجوی بینگ و خیلی ساده کل سایتایی که روی سرور میزبانی میشن رو در بیاره (+)
واو خیلی جالبه! :) همین اول کار توی لیست موتور جستجو یکی از وبلاگای بیگناه رو میبینم که هک شده!
میشه حدس زد که اسم پوشه خونگی این کاربر روی سرور ikkco باشه و یا حتی مثلا پوشه خونگی وبلاگ خودم novid باشه:) و بعد با فرض اینکه طرف یه زمانی وردپرس استفاده میکرده، اون آدم بازیگوش میاد یه شورتکات ساده میسازه!
1 |
ln –s /home/novid/public_html/wp–config.php . |
و حالا چون فایل مجوز ۶۴۴ داره خیلی راحت یوزر و پسوردتون خونده میشه و این ادم میتونه وصل شه به دیتابیس و کلی کارای جالب کنه.
همینجا میشه نتیجه گرفت که اگه موقع نصب وردپرس، اون رو مستقیم اکسترکت نکنید و مثلا برید داخل یه پوشه به اسم nnnovid این کار رو کنید کار هکر رو کلی سخت کردید! کاری که خیلی ها اون رو انجام نمیدن.
اینجا فرض رو بر این گذاشتیم که کاربر دسترسی به ترمینال داره ولی حقیقت خیلی دردناک تر از این حرفاست :) هکرها خیلی راحت تر از اینکه تصور کنید با استفاده از فایلهای php خیلی کم حجم موسوم به شل دسترسی به قسمتهای مختلف سیستم خواهند داشت. فرض کنید فایل php شل یوزر و مالکش novid و اسمش هم wp-search.php باشه، باید که خیلی خیلی خوره وردپرس باشید تا اینکه متوجه شید به صورت پیشفرض اصلا همچین فایلی رو وردپرس وجود نداره :) میتونه این فایل لابه لای تم رایگانی باشه که خیلی خوشحال اون رو پیدا کردید! اما غافل از اینکه این یک تله ست و تم حاوی فایل شل!
در اینصورت هکر کافیه وارد ادرس www.novid.ir/wp-search.php بشه. هر کاری رو که تصور کنید، این هکر میتونه با این شل انجام بده. از رفتن به دایرکتوری ها مختلف، دیدن کل فایل های کاربر novid لیست گرفتن، در اوردن یوزر و پسورد و همونجا وصل شدن به دیتا بیس از داخل شل، حتی روش ها و تکنیک های معروف اکسپلویت کردن با استفاده از حفره های موجود یک نسخه خاص وردپرس و غیره و غیره. هکر میتونه حتی کل پروسه های در حال اجرای سرور رو ببینه! می تونه با مشاهده پروسههای در حال اجرا یوزرهای دیگه رو ببینه :) هکر سایت بالا میتونه اسم من رو در بیاره و بعد توی بخشی که وجود داره دایرکتوری من رو بزنه و قصد خوندن اطلاعاتم رو داشته باشه! اما همه این کارها تا زمانی که شل تحت یوزر و گروپ novid نباشه و فایل ها و فولدرهای وردپرسی هم پرمیشن صحیح داشته باشن منتفی میشه! هکر دست خالی بر می گرده!
یکی از این شل های خوشگل رو از سروری که زیر دستم بود و یه گروه ترک اون رو برام سوغاتی اورده رو اپلود میکنم تا بگیرید و ببینید این شل ها چطورین، نسخههای متنوعی وجود داره از این شلها، این شل به محض اجرا شدن کلی ایمیل برای صاحبش میفرسته! پس احتمال داره با اولین اجرا یوزر و پسورد دیتابیستون برای مثال فرستاده شده باشه برای صاحب اثر :) تنها راه از کار انداختنش روی سرور دادن مجوز chmod 000 به فایله و یا باز کردن سورس و پیدا کردن ایمیل و عوض کردنش به مال خودتون :)
دقت کنید اگه مالک این فایل (شل) novid باشه حتی می تونه محتویات wp-config با مجوز ۴۰۰ رو هم بخونه! پس اگر یکی از این شل ها رو داشته باشید حتی با پرمیشن صحیح هم امنیت معنی نداره! علت اینه که در هاست های شیر برای اینکه پروسه های php که هر یوزر استفاده میکنه رو بتونن به تفکیک ببینن و هم اینکه هر کاربر از کاربر دیگه ایزوله و جدا باشه ( به شرط پرمیشن صحیح) از suphp و suexec استفاده میکنن. کاری که این ها انجام میدن اینه که اجازه میدن فایل php با مجوز کاربر عادی هم اجرا بشه! دقت کنید در حالت عادی تنها کسی که مجوز اجرای فایل php رو داره آپاچی و بنابراین اگه در حالت عادی یه شل با مجوز novid روی سرور سبز بشه عملا کاری نمی تونه کنه. پس در صورتیکه هاست شیر داشته باشید و suphp و suexec داشته باشید قادر هستید تمام فایلهای php رو با مجوز ۴۰۰ هم اجرا کنید :)
مجوز ۴۰۰ این حسن رو داره که اگه مطمئن باشید که پاک پاکید خیالتون راحته که اگه همسایه بغلی یکی از ین شلها رو داشته باشه نمیتونه بهتون آسیبی بزنه، میتونید گاهگاهی یک بار بک اپ کامل از وبلاگتون رو ذخیره کنید و بعد با آنتی ویروس چک کنید. در صورتیکه فایل مشکوکی پیدا نکرد یعنی پاکید :) یا وقتی که تم خاصی رو از نت می گیرید اون رو اول اسکن کنید و بعد روی سرور اپلود کنید.
حالا این مقدمات رو گفتم که بریم سر اصل مطلب و اینکه شما می تونید با خیال راحت کل فایلهای php رو ۶۰۰ و یا ۴۰۰ تبدیل کنید :) با مجوز ۴۰۰ حتی خودتون هم نمیتونید تغییری در فایلها ایجاد کنید (که در حالت عادی با فرض اینکه طراح و برنامه نویس نیستید هیچ وقت این نیاز رو نخواهید داشت)! یک راه اینه که فایل حساس wp-config رو ۴۰۰ بگذارید و بقیه رو ۶۰۰ تا زمانایی که وردپرس رو اپدیت میکنید مشکلی از این بابت نداشته باشید :) یه راه هم اینه که هر بار نسخه جدیدی میاد برید مجوزها رو موقتی ۶۰۰ کنید و بعد از آپدیت به نسخه جدید اون رو ۴۰۰ کنید.
اگه فایل های php رو ۴۰۰ کردید و سایتتون داون شد مطمئن باشید که سروری که هستید از suphp استفاده نمیکنه اما با تقریب خیلی بالایی بهتون اطمینان میدم اکثریت سرورهای هاستینگ شیر در ایران از این روش استفاده میکنن! در صورت داون شدن سایت فقط فایل wp-config رو ۴۰۰ بگذارید باشه و بقیه همون ۶۴۰ برگردونید و باز اگه جواب نداد ۶۴۴ بذارید باشن. اما wp-config رو بیشتر از ۴۰۰ ندید هیچ وقت (جز زمانایی که قراره پسورد و یوزر دیتابیس عوض بشه)
اما فایل های دیگه غیر از php مثل .htaccess و عکس ها رو باید بتونید با مجوز ۴۰۴ درست کنید. علت اینکه مجوز گروپ رو ۴ میدید اینه که این دسته فایل ها دیگه با suphp و suexe اجرا نمیشن و بنابراین باید توسط other قابلیت خوندن داشته باشن تا آپاچی بتونه به اونها دسترسی داشته باشه :) تمام css های تم و فایل متفرقه xml و اینجور چیزها شامل این قانون میشه.
پس نتیجه میشه چیزی مثل این