قابلیت userdir ویژگی هستش در وب سرور apache برای فعال سازی دایرکتوری خانگی هر کاربر به عنوان دایرکتوری وب برای نمایش صفحات وب در شبکه. این ویژگی معمولا در سرورهایی استفاده میشود که ممکن است بیش از یک کاربر از آن برای وب سرور برای سایتهایشان استفاده میکنند و به دلایل امنیتی هیچ یک از آن کاربران دسترسی و مجوز روت را به آن سرور ندارند تا فایلهای خود را در دایرکتوری پیش فرض آپاچی که در آدرس /var/www/html است، قرار دهند.
در سرورهایی که از نرم افزارهایی مثل cPanel یا Kloxo یا هر پنل دیگری برای مدیریت وب سرور استفاده میکنند در حین نصب آنها این قابلیت فعال میشود یا اگر هم فعال نباشد تنظیمات آن در پنل و در اینترفیس وب آن به راحتی با یک کلیک قابل انجام است و هیچ نیازی در تغییر مستقیم تنظیمات و کانفیگ آپاچی ندارد. اگر از سرور خود به عنوان وب سرور استفاده میکنید که به صورت تجاری ( فروش پکیجهای هاستینگ ) از آن استفاده نمیکنید و نیاز به قابلیت userdir بر روی آپاچی دارید این راهنما مختصر و مفید برای شماست. پیش نیاز آن هم داشتن یک سرور با سیستم عامل CentOS یا Red Hat یا Fedora است.
ما فرض را بر این میگذاریم که حتی وب سرور آپاچی هم نصب ندارید. پس با دستور زیر میتوانید آنرا نصب کنید:
yum install httpd
بعد از نصب نیاز داریم که سرویس httpd را در هر بار بوت اوتوماتیک آنرا لود کنیم و نیازی به راه اندازی دستی سرویس نباشد. این کار با این دستور انجام میگیرد:
chkconfig –levels 235 httpd on
اگر هم تمایلی به راه اندازی اوتوماتیک ندارید میتوانید بعد از ار بار بوت سیستم هر موقع به آن نیاز داشتید با دستور زیر سرویس httpd را راه اندازی کنید:
service httpd start
بعد از آن نیاز داریم با یک ادیتور مناسب مثل nano یا vim در ترمینال یا kate یا gedit در محیط گرافیکی، فایل /etc/httpd/conf/httpd.conf را ویرایش کنیم. من به عنوان مثال از nano برای این کار استفاده میکنم:
nano /etc/httpd/conf/httpd.conf
بعد از باز شدن فایل به دنبال #NameVirtualHost *:80 باشید و کاراکتر # را از ابتدای آن حذف کنید تا هاست هایی که بر روی سرور ایجاد میشود بر روی پورت ۸۰ دیده شود.
بعد از آن در همان فایل به دنبال <IfModule mod_userdir.c> که در آن تنظیمات مربوط به ویژگی userdir ذخیره میشود، بگردید. تنظیمات پیشفرض به این شکل است:
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # UserDir disabled # # To enable requests to /~user/ to serve the user\'\'\'\'s public_html # directory, remove the \"UserDir disabled\" line above, and uncomment # the following line instead: # #UserDir public_html </IfModule> #<Directory /home/*/public_html> # Options Indexes Includes FollowSymLinks # # AllowOverride All # Allow from all # # Order deny,allow #</Directory>
این تنطیمات پیشفرض را به شکل زیر تغییر دهید:
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # UserDir enabled * # # To enable requests to /~user/ to serve the user\'\'\'\'s public_html # directory, remove the \"UserDir disabled\" line above, and uncomment # the following line instead: # UserDir public_html </IfModule> <Directory /home/*/public_html> Options Indexes Includes FollowSymLinks AllowOverride All Allow from all Order deny,allow </Directory>
بعد از اعمال تغییرات هر کاربری در دایرکتوری خانگی خودش در دایرکتوری public_html میتواند یک وب سرور شخصی داشته باشد. در قسمت UserDir enabled با علامت * مشخص میکند که تمام کاربران از قابلیت userdir استفاده کنند. در صورتی نیاز دارید فقط تعدادی از کاربران از این قابلیت بهرهمند شود میتوانید تنظیمات مربوط به UserDir enabled را به صورت زیر تغییر دهید:
UserDir disabled UserDir enabled testuser1 testuser2 testuser3
یا اگر میخواهید تمام کاربران به غیر از تعدادی خاص به این ویژگی دسترسی داشته باشند بخش UserDir enabled را به شکل زیر تغییر دهید:
UserDir enabled UserDir disabled testuser4 testuser5 testuser6
برای ادامه کار تغییرات را در فایل httpd.conf ذخیره کنید و برای هر کاربر یک دایرکتوری public_html بسازید:
mkdir /home/testuser/public_html
و دسترسی های مورد نیاز را برای اجرای صفحات وب آنها اعمال کنید:
chmod 711 /home/testuser chown testuser:testuser /home/testuser/public_html chmod 755 /home/testuser/public_html
در نهایت هم باید به SELinux بفهمانید که این قابلیت در وب سرور آپاچی فعال شده است. اجازه اجرای آنرا بدهد. به کمک دستور زیر این کار را انجام دهید:
setsebool httpd_read_user_content on
یا کلا میتوانید SELinux را غیرفعال کنید. کافیست در فایل /etc/selinux/config مقدار enforced را به disabled تغییر دهید.
در مرحله آخر هم نیاز دارید یکبار سرویس httpd را ریستارت کنید:
service httpd restart
بعد از انجام این عملیات میتوانید دایرکتوری خانگی وب هر کاربر را با آدرس زیر ببینید:
http://domain.com/~testuser
http://IP-Address/~testuser