چگونه یکه کلمه عبور برای احراز هویت با APACHE تنظیم کنیم

چگونه یکه کلمه عبور برای احراز هویت با Apache تنظیم کنیم

وقتی که یک وب سرور را راه اندازی می کنید، اغلب بخش هایی از سایت وجود دارند که تمایل دارید دسترسی به آن ها را محدود نمایید. برنامه های وب در غالب موارد شیوه های احراز هویت (authentication) و مجوز دسترسی (authorization) مختص خودشان را فراهم و ارائه می کنند. اما چنانچه این روش ها ناکافی باشند و یا در دسترس نباشند، می توان از وب سرور برای اعمال محدودیت دسترسی استفاده نمود.

در این آموزش، می خواهیم چگونگی محافظت با کلمه عبور از دارایی هایی که روی یک وب سرور Apache هستند را نمایش دهیم. فرض می کنیم که این وب سرور روی سیستم عامل Ubuntu 14.04 در حال اجرا است.

پیش نیازها

برای شروع نیاز دارید به محیط سرور Ubuntu 14.04 دسترسی داشته باشید. بنابراین نیاز به یک حساب کاربری غیر ریشه (non-root) با دسترسی های sudo دارید تا بتوانید دستورات و کارهای سطح اجرایی را انجام دهید. اگر می خواهید بیاموزید که چطور می توانید یک کاربر ایجاد نمایید، مقاله Ubuntu 14.04 initial server setup guide را مطالعه نمایید.

نصب بسته Apache Utilities

برای ایجاد فایلی که کلمه های عبور مورد نیاز محتوای محدود شده باید در آن ذخیره شوند، از ابزاری استفاده می کنیم که htpasswd نامیده می شود. این ابزار در بسته apache2-utils درون مخزن Ubuntu وجود دارد.

حافظه محلی بسته های (local package cache) سیستم عامل خود را به روز کرده و سپس بسته مذکور را با دستورات زیر نصب نمایید. در این فرصت فرض کرده ایم که وب سرور Apache2 نیز هنوز روی سرور نصب نشده است:

sudo apt-get update
sudo apt-get install apache2 apache2-utils

ایجاد فایل کلمه عبور

حالا به دستور htpasswd دسترسی داریم. بنابراین می توانیم فایلی ایجاد کنیم که Apache بتواند با استفاده از آن هویت کاربران را تصدیق کند. بدین منظور یک فایل مخفی (hidden) به نام htpasswd. درون پوشه تنظیمات به آدرس etc/apache2/ ایجاد می کنیم.

وقتی برای اولین مرتبه از این ابزار استفاده می کنیم، لازم است گزینه c- را اضافه کنیم تا فایل مذکور ایجاد شود. نام کاربری (به عنوان مثال sammy) در انتهای دستور مشخص می شود تا رکورد جدیدی درون فایل نوشته شود:

sudo htpasswd -c /etc/apache2/.htpasswd sammy

پس از این دستور از شما خواسته می شود که کلمه عبور دلخواه خود را برای این نام کاربری وارد نمایید و سپس برای بار دوم نیز آن را تایید کنید.

از این پس برای اضافه کردن هر کاربر جدید دیگری، گزینه c- را از دستور حذف نمایید:

sudo htpasswd /etc/apache2/.htpasswd another_user

اگر محتوای فایل را مشاهده کنیم، می توانیم نام های کاربری و کلمات عبور آن ها را (البته به صورت رمز شده) در هر ردیف مشاهده نماییم:

cat /etc/apache2/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Apache را برای تایید هویت پیکربندی کنید

حالا که ما نام های کاربری و کلمه های عبور مربوط به آنها را در فایلی که Apache بتواند آن را بخواند، نوشتیم؛ لازم است که وب سرور را به گونه ای تنظیم کنیم تا قبل از سرویس دهی در خصوص محتوای محافظت شده، این فایل را بررسی نماید. این کار را به دو روش متفاوت می توانیم انجام دهیم.

اولین راه آن است که پیکربندی Apache را ویرایش کرده و سیاست حفاظتی خود را به فایل میزبان مجازی (virtual host file) اضافه نماییم. به طور کلی این روش کارایی بهتری دارد چرا که از هزینه خواندن فایل های پیکربندی توزیع شده، جلوگیری می کند.

اگر امکان ویرایش فایل میزبان مجازی برای شما وجود ندارد (یا در حال حاضر از فایل های htaccess. برای مقصودهای دیگری استفاده می کنید) می توانید برای محدود کردن دسترسی ها از فایل htaccess. استفاده نمایید. وب سرور Apache از فایل های htaccess. استفاده می کند تا این امکان فراهم شود که برخی تنظیمات خاص از یک فایل که درون پوشه محتوا قرار گرفته است انجام شوند. مشکل این روش این است که به ازای هر درخواستی که پوشه در آن دخیل است، Apache به طور مجدد این فایل ها را می خواند که این امر می تواند روی راندمان تاثیر داشته باشد.

به هر حال بر اساس نیازهای خود گزینه و روش مناسب را انتخاب نمایید.

تنظیم کنترل دسترسی از طریق تعریف میزبان مجازی

برای شروع فایل میزبان مجازی که می خواهید محدودیت را به آن اعمال کنید باز نمایید. به عنوان مثال ما از فایل ۰۰۰-default.conf استفاده می کنیم که به صورت پیش فرض میزبان مجازی نصب شده توسط بسته apache را در خود دارد:

sudo nano /etc/apache2/sites-enabled/000-default.conf

درون این فایل، بدون در نظر گرفتن خطوط کامنت، به شکل زیر خواهد بود:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

احراز هویت به ازای هر پوشه انجام می شود. به این منظور شما باید پوشه هدف را داخل بلاک های <Directory ___> قرار دهید. در این مثال، ما پوشه ای را که در root قرار گرفته محدود می کنیم، اما شما می توانید به دلخواه پوشه مشخص خود را تعیین نمایید:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/html">
    </Directory>
</VirtualHost>

درون بلاک directory باید چند پارامتر را مشخص کنیم. با استفاده از پارامتر AuthType نوع احراز هویت را Basic انتخاب می کنیم. به عنوان AuthName نامی را که به کاربران هنگام مراجعه به این محتوا نمایش داده می شود، مشخص می کنیم. AuthUserFile آدرس فایلی که کلمات عبور را در آن قرار دادیم به Apache معرفی می کند. در نهایت به valid-user برای دسترسی به منابع احتیاج داریم، به این معنا که هر کس بتواند هویت خود را با استفاده از کلمه عبور تایید کند، مجاز به دسترسی است:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/html">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>
</VirtualHost>

حالا تغییرات خود را ذخیره کرده و فایل را ببندید. برای اعمال سیاست کلمه عبور خود، سرویس Apache را مجدد راه اندازی نمایید:

sudo service apache2 restart

از این پس، پوشه ای که مشخص کرده بودید باید با کلمه عبور تحت محافظت قرار گرفته باشد.

تنظیم کنترل دسترسی با استفاده از فایل های htaccess.

اگر می خواهید به جای روش قبل از فایل های htaccess. برای محافظت استفاده نمایید، ابتدا باید با ویرایش فایل اصلی تنظیمات Apache شروع کرده و فایل های htaccess. را بپذیرید:

sudo nano /etc/apache2/apache2.conf

بلاک <Directory> را برای پوشه var/www/ که مشخص کننده پوشه root است پیدا کنید. با تغییر دادن گزینه AllowOverride از مقدار “None” به “All” قابلیت پردازش فایل های htaccess. را فعال نمایید:

. . .

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

. . .

حالا تغییرات خود را ذخیره کرده و فایل را ببندید.

در گام بعد، باید فایل htaccess. را به پوشه ای که می خواهیم محدودیت روی آن اعمال شود اضافه کنیم. در این مثال ما می خواهیم محدودیت را روی پوشه root که در آدرس var/www/html/ قرار دارد، اعمال کنیم. اما شما می توانید این فایل را در هر پوشه ی دیگری که تمایل دارید محدود شود، قرار دهید:

sudo nano /var/www/html/.htaccess

درون این فایل باید چند پارامتر را مشخص کنیم. با استفاده از پارامتر AuthType نوع احراز هویت را Basic انتخاب می کنیم. به عنوان AuthName نامی را که به کاربران هنگام مراجعه به این محتوا نمایش داده می شود، مشخص می کنیم. AuthUserFile آدرس فایلی که کلمات عبور را در آن قرار دادیم به Apache معرفی می کند. در نهایت به valid-user برای دسترسی به منابع احتیاج داریم، به این معنا که هر کس بتواند هویت خود را با استفاده از کلمه عبور تایید کند، مجاز به دسترسی است:

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

حالا فایل را ذخیره کرده و ببندید. وب سرور را مجدد راه اندازی نمایید تا تمام محتواهایی که درون پوشه ای بودند که فایل htaccess. را در آن قرار دادید، تحت محافظت قرار بگیرند:

sudo service apache2 restart

بررسی کنید که تایید هویت انجام خواهد شد

برای تصدیق این موضوع که محتوای شما محافظت شده هستند، سعی کنید به محتوای محدود شده، از طریق مرورگر دسترسی پیدا کنید. شما باید با یک پیغام که از شما نام کاربری و کلمه عبور می خواهد، مانند شکل زیر، مواجه شوید:

اگر اطلاعات هویتی صحیح را وارد نمایید، می توانید به محتوا دسترسی داشته باشید. اگر اطلاعات را نادرست وارد کنید و یا گزینه “Cancel” را بزنید، با صفحه خطای ” Unauthorized ” را مشاهده خواهید کرد:

سخن پایانی

حالا هر آنچه برای راه اندازی احراز هویت پایه برای سایت خود می خواهید را در اختیار دارید. این نکته را به خاطر داشته باشید که محافظت با کلمه عبور باید با رمزگذاری SSL ترکیب شود تا اطلاعات هویتی شما به صورت متن واضح (plain text) برای سرور ارسال نشود.

منبع: How To Set Up Password Authentication with Apache on Ubuntu 14.04
ترجمه: سیدمحمدحسین طباطبایی بالا

پاسخی بگذارید

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