نصب SuPHP در Ubuntu

بسم الله الرحمن الرحیم

يا راهي خواهم يافت , يا راهي خواهم ساخت

SuPHP چيست؟

SuPHP یک لایه امنیتی اضافی رو جهت امنیت سرور برای شما فراهم می کنه.

SuPHP باعث می شه که اسکریپت های  PHP هر کاربر توسط یوزر خودش اجرا بشه در عوض اینکه توسط یوزر apache/PHP اجرا بشه.

 خب می دونید که وقتی SuPHP بر روی سرور Run نباشه تمامی اسکریپت های PHP توسط یوزر apache یا PHP اجرا میشوند که این امر باعث میشه که برنامه نویسان سایت مجبور بشوند تعدادی از پوشه هاشون و فایل هاشون رو پرمیژن ۷۷۷ بدند که این یک نقص امنیتی برای سرور و سایت های میزبانی شده توسط ان است.

در حقیقت یعد از اجرای SuPHP بر روی سرور اگر یک پوشه و یا اگر فایل پرمیژن ۷۷۷ روش ست شده باشه و توسط مرورگر ها قابل دسترسی باشد، سرور، خطای داخلی سرور ۵۰۰ رو به نمایش می در میاره.

error_500-300x300

در سروری که SuPHP در اون Run باشه، بالاترین سطح دسترسی که کاربر می تونه ازش استفاده کنه پرمیژن ۷۵۵ هست.

خب برای شروع اول از همه یک فایل PHP در مسیر /var/www ایجاد کنید به عنوان مثال : linuxServices.php

الان کد های زیر رو در اون وارد کنید:

<?php

echo system(‘id’);

?>

ذخیره کنید و خارج بشید.

حالا تو مرورگرتون این آدرس رو بزنید http://yourip/linuxservices.php و باید یه چیزی شبیه به اطلاعات زیر رو مشاهده کنید:

uid=33(www-data) gid=33(www-data) groups=33(www-data) uid=33(www-data)
gid=33(www-data) groups=33(www-data)

این اطلاعات به شما نشان میده که php با دسترسی apache اجرا میشه.

خب، بزنید بریم SuPHP رو نصب کنیم

apt-get install php5-cgi libapache2-mod-suphp suphp-common

با کامند زیر apaches php module رو غیر فعال می کنیم:

a2dismod php5

فایلی که در مسیر /etc/apache2/httpd.conf وجود داره رو باز کنید و کد های زیر رو به اون اضافه کنید تا SuPHP فعال بشه برای همه سایت ها.

# Enable SuPHP

suPHP_Engine on

suPHP_AddHandler application/x-httpd-php .php

سپس آپاچی رو restart کنید

/etc/init.d/apache2 restart

خب حالا دوباره linuxservices.php رو در مرورگرتون مشاهده کنید و الان باید  هنگام مشاهده خطای داخلی سرور رو مشاهده کنید که علتش هم این هست که فایلی که شما الان می خواین مشاهدش کنید متعلق هستش به یوزر root و این بسیار خطرناک هست که اسکریپت شما با دسترسی یوز root  اجرا بشه  بنابراین این امر غیر فعال هستش که اسکریپت های php شما با یوزر root اجرا بشن.

جهت رفع اين مشکل owner فايل رو به يه يوزر فعال تغيير ميديم

chown username:username linuxservices.php

خب الان اگه فايل linuxservices.php رو يه بار ديگه رفرش کنيد يه چيزي شبيه به زير رو بايد مشاهده کنيد

uid=1000(username) gid=1000(username) groups=1000(username) uid=1000(username)

gid=1000(username) groups=1000(username)

راستي اگه بعد از رفرش چيزي مشاهده نکردين به من فحش ندين، بجاش برين فايل /etc/suphp/suphp.conf رو باز کنيد و تغييرات زير رو در درونش اعمال کنيد:

env_path=/bin:/usr/bin

تغييرش بدين به:

env_path=”/bin:/usr/bin”

خب الان اگه سايتاي روي سرورتون هيچ کدوم اصلا بالا نميان باز هم منو نفرین نکنید چون براش راه حل دارم.

برين تو مسير /etc/suphp/suphp.cong و فايل کانفيگ suphp رو باز کنيد و تغييرات زير رو توش لحاظ کنيد:

docroot=/var/www:${HOME}/public_html

تغييرش بدين به:

docroot=/home

اين کاري که کرديم به اين معني هست که موتور Suphp در هر قسمتي از فايل سيستم که بخواد مي تونه به تجزيه تحليلاي خودش بپردازه نه تنها در يه مسير خاص که همون /var/www هست بنابراين به يوزر ها اجازه ميده که مالکيت خودشون رو داشته باشند.

خب شايد هم دلتون بخواد که آپشن هاي امنيتي سرورتون رو به اون چيزي که دلتون مي خواد تغيير بدين به عنوان مثال شايد مي خواين که userdirs کاربراتون تو مسير ديگه اي به غير از /var/www باشه…

خب براي اين کار تغييرات زير رو تو همون فايل قبلي لحاظ کنيد:

check_vhost_docroot=true

تغييرش بدين به:

check_vhost_docroot=false

در نهايت به خواص min_uid و min_gid ميرسيم. اين تغيير مهمي هست اگر شما مي خواين که هنوز وبسايتي داشته باشيد که با www-data اجرا بشه(مثل وبسايت ديفالت).

اگر اين مورد رو مي خواين تغيير بدين هر دوي min_uid و min_uid به www-data (به صورت ديفالت uid و gid ش ۳۳ هست). البته توصيه نميشود که اجازه بدين suphp با يوزر root ران بشه، بنابراين min_uid و min_gid رو برابر با ۰ قرار ندهيد.

من اين مقدار رو لحاظ کردم تو فايلم:

min_uid=33

min_gid=33

در نهايت مود suphp و userdir رو فعال مي کنيم و در آخر آپاچي رو ريستارت مي کنيم. کامند هاي زير رو دنبال کنيد:

a2enmod userdir suphp

/etc/init.d/apache2 restart

الان بايد تمامي پوشه هاي هر کاربر داراي پرميژن ۷۵۵ باشند و تمام فايل ها پرميژن ۶۴۴ داشته باشند اگر اين پرميژن ها، ست نشده باشند سايت باز بالا نمياد و خطا داخلي سرور رو براي شما به نمايش در مياره و در بعضي مواقع هم سيستم لود سرور شايد به ۴ بچسبه و mysql هم هنگ کنه…

پس پرميژن دايرکتوري home و دايرکتوري تمامي کاربرا رو ۷۵۵  قرار بدين(بالاتر از ۷۵۵ بدين سرور به شما خطا ميده).

الان ديگه اسکريپت هاي php با يوزري که آن رو ايجاد کرده اجرا بشه. جهت تست اين موضوع برين تو دايرکتوري يکي از سايت هاي روي سرور و فايلي رو با محتويات زير دوباره ايجاد کنيد. به عنوان مثال: linuxservics.php

<?php

echo system(‘id’);

?>

خب فايلي رو که ايجاد کردين رو تو مرورگرتون اجرا کنيد، الان بايد اطلاعاتي رو مشاهده کنيد که حاکي از اينه که مالک اون فايل يوزر سايت مربوطه هست.

الان که دارم از این قسمت به بعد رو برای شما می نویسم ۲۲ اسفند ۹۲ هست یعنی تنها ۸ روز مانده تا آغاز سال جدید و ۱۲ روز پس از اینکه این WorkShop رو در سایت قرار دادم پس اول بگم که پیشاپیش نوروز باستانی ۹۳ بر شما عزییزان مبارک و بعد بگم که با نصب این mod دیگه phpmyadmin سرور شما از کار می افتد، پس از بررسی که از ساعت ۶ دیروز تا ساعت ۱۱:۲۷ دقیقه امروز صبح انجام دادم به این نتیجه رسیدم که جهت فعال سازی phpmyadmin لازم هست که تغییرات زیر رو لحاظ کنید:

(لازم به ذکر هست که سرور من ubuntu 12.04 هست و تنها برای این ورژن تضمین می کنم و برای باقی ورژن ها خیر اما اگر مشکلی باز بود بپرسین)

خب برین فایل مسیر /etc/apache2/mods-available/php5.conf رو باز کنید و محتویاتش رو کامل پاک کنید و محتویات زیر رو به جای آن جایگزین کنید:

<IfModule mod_php5.c>
<IfModule !mod_suphp.c>
<FilesMatch “.+.ph(p[345]?|t|tml)$”>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch “.+.phps$”>
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it’s recommended to enable access to the files
# only in specific virtual host or directory
Order Deny,Allow
Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. ‘.php’)
<FilesMatch “^.ph(p[345]?|t|tml|ps)$”>
Order Deny,Allow
Deny from all
</FilesMatch>
</IfModule>

# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule …> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_value engine Off
#    </Directory>
#</IfModule>
<IfModule mod_suphp.c>
<Directory /usr/share>
<FilesMatch “.+.ph(p[345]?|t|tml)$”>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch “.+.phps$”>
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it’s recommended to enable access to the files
# only in specific virtual host or directory
Order Deny,Allow
Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. ‘.php’)
<FilesMatch “^.ph(p[345]?|t|tml|ps)$”>
Order Deny,Allow
Deny from all
</FilesMatch>
</Directory>
</IfModule>
</IfModule>

حالا با کامند زیر php5 رو فعال کنید:

a2enmod php5

و در نهایت سرویس آپاچی رو ریستارت می کنیم:

/etc/init.d/apache2 restart

 

در نهايت بايد بگم پايان.

(راستي باز هم اگه مشکلي بود سوالتون رو کامنت کنيد حتما رسيدگي مي کنم چون تمامي workshop يي رو که براتون نوشتم، خودم انجام دادم و تست شده است.)

نويسنده: حامد چوبين

هرگونه کپي برداري تنها با ذکر منبع مجاز مي باشد.

منبع: گروه سرويس هاي لينوکسي


حامد چوبین

I'm Hamed Choobin, living in I.R.Iran-Qom experiencing Linux OSs since 2010, and has experiences with RedHat Enterprise Linux (RHEL) ,Community Enterprise OS (CentOS) ,Debian,Ubuntu.

مطالب مرتبط

2 دیدگاه‌

  1. saeid گفت:

    سلام خیلی خیلی عالی بود واقعا ممنونم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *