کنترل دسترسی‌ها در آپاچی
کنترل دسترسی‌ها در آپاچی
سرویس‌دهنده آپاچی قادر به کنترل نحوه دسترسی به فایل‌ها و دایرکتوری‌ها از طریق درخواست‌های ارسال شده به سرویس‌دهنده می‌باشد. Directiveهایی که در تنظیم می‌شوند، بر روی همان دایرکتوری تحت پوشش خود عمل می‌نمایند. کلمه کلیدی Options تعیین کننده ویژگی‌هایی است که در آن کاربر هنگام دسترسی به دایرکتوری مورد نظر قادر به استفاده از آنهاست. همچنین می‌توانید تعیین کنید که دایرکتوری مورد نظر قادر به استفاده از فایل‌های htaccess. باشد یا خیر. این امر توسط کلمه کلیدی AllowOverride صورت می‌گیرد.
کد:
<Directory /var/www/rest>
AllowOverride AuthConfig
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>
با استفاده از tagهای Limit قادر خواهید بود تا فرایند‌های خاصی را بر روی دایرکتوری خاصی محدود نمایید. از کلمه کلیدی order جهت تعیین ترتیب اولویت گزینه‌ها استفاده می‌شود. کلمات کلیدی Allow و Deny نیز جهت آزاد کردن یا محدود کردن فرایند‌ها استفاده می‌شود.
برخی اوقات این امر اهمیت دارد تا دسترسی به دایرکتوری خاصی را محدود نمایید. ممکن است مایل باشید تا برای دسترسی به بخش خاصی، از کاربر درخواست کلمه و رمز عبور شود. به این قابلیت سرویس‌دهنده آپاچی کنترل دسترسی با استفاده از htaccess اطلاق می‌گردد. به این منظور ابتدا باید گزینه AccessFileName را در فایل پیکربندی httpd.conf فعال نمایید و یک فایل با همان نام در دایرکتوری مورد نظر که مایل به حفاظت از آن هستیدایجاد نمایید. توضیح اینکه گزینه AccessFileName بطور پیش‌گزیده در دبیان فعال می‌باشد.
کد:
AccessFileName .htaccess
سپس در فایل پیکربندی آپاچی باید کلمه کلیدی AllowOverride AuthConfig را همانگونه که در مثال بالا دیدید، برای دایرکتوری مورد نظرتان اضافه نمایید و در صورتی که این دایرکتوری در آن معرفی نشده است، باید آنرا مطابق مثال بالا در فایل پیکربندی آپاچی اضافه کنید. در زیر محتویات یک فایل htaccess. برای مثال نشان داده شده است:
کد:
AuthUserFile /var/www/rest/.htpasswd
AuthGroupFile /dev/null
AuthName "Authentication Required"
AuthType Basic
Require valid-user
کلمه کلیدی AuthUserFile نشان دهنده محل فایل حاوی کلمه عبور کاربر می‌باشد. AuthGroupFile نشان دهنده محل فایل گروه کابرانی است که می‌توانند به این محل دسترسی پیدا کنند. AuthName نشان‌دهنده نام یا عنوان احراز هویت است. AuthType نیز نشانگر نوع احراز هویت است که می‌تواند از نوع Basic، Digest یا انواع مرتبط با بانک‌های اطلاعاتی باشد. بخش Require نیز نوع درخواست سیستم احراز هویت را تعیین می‌کند و می‌تواند حاوی user و نام یک یا چند کاربر، valid-user در صورتی که فایل کلمه عبور حاوی تعداد زیادی نام کاربری است و group و نام گروه‌هایی که نیاز به اجازه دسترسی به آنها وجود دارد باشد. برای مثال در مورد کاربران:
کد:
Require user alan armen
جهت ایجاد یک فایل کلمات عبور باید از دستور htpasswd استفاده نمایید:
کد:
# htpasswd -c .htpasswd alan
این دستور یک فایل کلمه عبور به نام htpasswd. و یک کاربر به نام alan ایجاد نموده و از شما درخواست خواهد کرد تا کلمه عبور آنرا نیز تعریف نمایید. از نظر امنیتی بکارگیری احراز هویت نوع Basic جهت امور حساس چندان مناسب نیست، زیرا با اینکه کلمات عبور در فایل‌های حاوی آن با رمزنگاری MD5 ذخیره می‌شوند، تبادل نام کاربری و کلمه عبور بین سرویس‌دهنده و سرویس‌گیرنده با استفاده از متن ساده انجام می‌گیرد و در صورت وجود sniffer می‌تواند خوانده شود. در این گونه موارد باید از نوع Digest استفاده شود. برای استفاده از این قابلیت باید ماژول mod_auth_digest در سرویس‌دهنده فعال شود. به این منظور می‌توانید از دستور زیر استفاده کنید:
کد:
# apache-modconf apache enable mod_auth_digest
سپس فایل htaccess. را مانند مثال زیر ویرایش نمایید:
کد:
AuthType Digest
AuthName "Private"
AuthDigestFile /var/www/rest/.htdigest
Require valid-user
و فایل htdigest. را نیز ایجاد نمایید:
کد:
# htdigest -c .htdigest auth alan
البته توجه داشته باید تبادل digest در برخی از مرورگرها پشتیبانی نمی‌شود، بنابراین برای حداکثر سازگاری بهتر است از SSL به همراه htaccess استفاده نمایید.
گروه‌ها در فایل‌ها htaccess هنگامی اهمیت پیدا می‌کنند که شما تعداد زیادی کاربر داشته باشید که هر یک باید به محل‌های خاصی بر روی سرویس‌دهنده دسترسی داشته باشند. به این صورت می‌توانید یک فایل مرکزی htpasswd ایجاد کرده و با گروه‌بندی کاربران، دسترسی‌های آنها را به محل‌های مناسب امکان‌پذیر نمایید. با استفاده از کلمات کلیدی AuthGroupFile که نشاندهنده فایل حاوی گروه‌ها و نام‌های کاربری است و Require group استفاده نمایید.
فایل گروه یک فایل متنی است که با نام گروه و یک کالن شروع شده و کاربران عضو گروه به دنبال هم در آن قرار می‌گیرند:
کد:
dev-group: alan armen
sup-group: nick jake
برای اینکه احراز هویت با استفاده از فایل گروه صورت گیرد، می‌توان فایل htaccess. مثال بالا را به صورت زیر تغییر داد:
کد:
AuthUserFile /var/www/rest/.htpasswd
AuthGroupFile /var/groups
AuthName "Authentication Required"
AuthType Basic
Require group dev-group
هنگامی که از احراز هویت با استفاده از فایل گروه استفاده می‌کنید، آپاچی در حقیقت احراز هویت را در دو مرحله انجام می‌دهد. نخست بررسی می‌کند که آیا کاربر مورد نظر در گروه وجود دارد یا نه و دوم اینکه کلمه عبور ارسال شده صحیح است یا خیر. هر کدام از این دو مرحله که با شکست مواجه شود، دسترسی کاربرد به منبع مورد نظر مسدود خواهد شد. نکته‌ای که باید به آن توجه داشته باشید این است که فایل حاوی گروه‌ها را در دایرکتوری که قرار است از آن حفاظت کند و یا در کل مسیرDocumentRoot آپاچی قرار ندهید، زیرا کاربران قادر خواهند بود آنرا دانلود نمایند.