suexec چیه؟

یکی از موضوعات مهم در میزبانی اشتراکی (این هم ترجمه ای از share hosting 😉 ) موضوع دسترسی پوشه هاست. در صورتی که شما یک پوشه برای بارگذاری فایل در وبلاگتون در نظر گرفته باشید ، اولین کاری که به ذهنتون می رسه این هست که دسترسی ها را به 777 تغییر بدید. این موضوع باعث می شه که کاربرای دیگه هم به پوشه شما دسترسی داشته باشند و خوب مشکلاتی که ممکنه پیش بیاد.

برای حل این مشکل راه حل های زیادی وجود داره. این راه حل ها انقدر زیاد و متنوع بود که من می خواستم یکی را انتخاب کنم کفرم دراومد. نزدیک بود کلا بی خیال بشم.

از جمله راه حل های موجود SuExec, suPHP , Openbasedir, apache2-mpm-itk و چند تای دیگه است که الان به ذهنم نمی رسه. همه اینها کارشون بر اساس یک اصل هست: اجرای اسکریپتهای کاربر با مجوز دسترسی خود کاربر، نه کابر آپاچی. چون دیدم cpanel ماژول suexec را پیشنهاد داده اول با نصب و تست اون شروع کردم و نحوه نصب و راه اندازیش را توی دبیان این جا آوردم.

نصب بسته های مورد نیاز

بسته های زیر را نصب کنید:

aptitude install apache2-mpm-worker apache2-suexec-custom php5-cgi php5

وقتی دستور بالا را می زنید در صورتی که قبلا آپاچی را نصب کرده باشید، ممکن است این بسته ها با بسته های قبلی که نصب شده تداخل داشته باشد مانند libapache2-mod-php5 و apache2-mpm-prefork . با پاک شدن این دو موافقت کنیدو نصب را ادامه دهید. توجه داشته باشید که ممکن است apt پیشنهاد پاک کردن بسته های زیادی را بدهد ، راه حل هایی را که کمترین ریزش را دارد امتحان کنید تا مشکلی برای شما پیش نیاید.

لود کردن ماژول های مورد نیاز

ماژول های ذکر شده در پایین را فعال کنید و برای فعال شدن آنها آپاچی را restart کنید

a2enmod actions suexec

پیکربندی virtual host

از اینجا به بعد من کار را برمبنای یک مثال پیش می برم. ساخت یک virtual host به نام linuxmotto.local که کاربر مورد نظر ما behrad اجازه کار با این پوشه را دارد و کلیه دسترسی ها مربوط به نام و نام گروه این کاربر می باشد.

فولدر های زیر را بسازید:

mkdir /var/www/linuxmotto.local

cd /var/www/linuxmotto.local

mkdir log cgi-bin

chown -R behrad:behrad /var/www/linuxmotto.local

سپس virtual host خود را بسازید . تنها کافیست فایل /etc/apache2/site-available/linuxmotto.local را به شکل زیر ایجاد کنید:

<VirtualHost *:80>

ServerAdmin webmaster@linuxmotto.local
ServerName linuxmotto.local
DocumentRoot /var/www/linuxmotto.local/
DirectoryIndex index.php
ErrorLog /var/www/linuxmotto.local/log/error.log
CustomLog /var/www/linuxmotto.local/log/access.log combined

SuexecUserGroup behrad behrad

ScriptAlias /php5-cgi /var/www/linuxmotto.local/cgi-bin/php-cgi
AddHandler php5-cgi .php
Action php5-cgi /php5-cgi

</VirtualHost>

تنظیمات را فعال کنید

a2ensite linuxmotto.local

و آپاچی را restart نمایید

سپس فایل /var/www/linuxmotto.local/cgi-bin/php-cgi/ را ویرایش کنید و مقدار زیر را در آن قرار دهید:

#!/bin/bash
exec /usr/bin/php5-cgi “$@”

تست صحت عملکرد تنظیمات انجام شده

برای اینکه بتونید تنظیمات را به صورت local تست کنید ابتدا فایل etc/hosts/ را ویرایش کنید و خط

127.0.0.1 linuxmotto.local

را به آن اضافه کنید. حالا یک فایل index.php در ریشه بسازید و خط زیر را در آن قرار دهید

<?php echo exec(‘whoami’); ?>

در صورتی که http://linuxmotto.local/index.php را در مرورگر خود بزنید باید نام کاربر را که در اینجا behrad است مشاهده کنید.

معایب:

یکی از معایب این روش این هست که HTTP Authentication را پشتیبانی نمی کند. خود من در این مورد به مشکل برخوردم و مجبور شدم به یکی از روش های دیگه رو بیارم. در صورتی که نرم افزار مال خودتون هست می تونید به روشی که اینجا گفته شده مشکل را دور بزنید. در غیر این صورت از روش دیگه ای مانند suphp استفاده کنید که این مشکل را ندارد.

منابع:

http://www.moshwire.com/2010/08/debian/

http://www.ruzee.com/blog/2009/01/apache-virtual-hosts-a-clean-setup-for-php-developers

http://groups.drupal.org/node/12066

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

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