هر سیستمی که چندتا کاربر user داشته باشه یا حتی فقط یک کاربر، نیاز داره بدونه چه کسی اجازه انجام چه کاری رو داره.
به این فرایند میگیم کنترل دسترسی (Access Control).
از فایلهای ویندوز گرفته تا سرویسهای لینوکسی، تا شبکههای سازمانی و حتی اکانتهای فضای ابری، همهشون یه مدل کنترل دسترسی دارن که طبق اون تصمیم میگیرن چه عملی انجام بشه و چه عملی رد بشه.
اگر بخوام خیلی خلاصه بگم:
Access Control جواب میده کی؟ به چی؟ چطور؟ و تا چه حد؟ دسترسی داره.
یا میشه گفت
Access Control (کنترل دسترسی) مجموعهای از مکانیزمها، فرآیندها و سیاستهاست که تعیین میکند چه کسی (Who) میتواند چکار (What) روی کدام منبع (Which Resource)انجام دهد و تحت چه شرایطی
چهار گام اصلی در چرخه کنترل دسترسی:
- Identification (شناسایی) : کاربر خودش را معرفی میکند (نام کاربری، کلید عمومی و …).
- Authentication (احراز هویت) : سیستم بررسی میکند کاربر واقعاً همانی است که ادعا میکند (پسورد، MFA، SSH Key).
- Authorization (مجوزدهی / اجازهدهی) : بعد از ورود، سیستم میفهمد کاربر چه کارهایی میتواند انجام دهد.
- Accounting / Auditing (ثبت و حسابرسی) : تمامی رویدادها لاگ میشوند تا بعداً بررسی یا تحلیل شوند.
این چرخه در محیطهای SOC، مدیریت سرور، DevOps و اپلیکیشنهای سازمانی همیشه کلیدیه — مخصوصاً برای پاسخ به حادثه (Incident Response): باید بدانیم چه کسی چه کاری انجام داده و چرا مجاز بوده یا نبوده.
مدلهای کنترل دسترسی: DAC، MAC و RBAC
1-مدل کنترل دسترسی اختیاری (DAC)
مدل کنترل دسترسی اختیاری یا Discretionary Access Control (DAC) یکی از رایجترین مکانیزمهای کنترل دسترسی در سیستمعاملها و بسیاری از نرمافزارهای امروزی است. در این مدل، مالک یک منبع (Owner) تعیین میکند چه کسانی اجازه دسترسی به آن منبع را دارند و چه نوع عملیاتی میتوانند انجام دهند. این ساختار انعطافپذیر است و در سیستمهایی مانند Linux و Windows پیادهسازیهای مختلفی دارد.
در مدل DAC، کنترل و مدیریت دسترسیها بر اساس تصمیم مالک منبع انجام میشود.
هر فایل، دایرکتوری یا منبع دیگر، یک مالک دارد و این مالک تعیین میکند که سایر کاربران چه نوع دسترسیهایی (مانند Read، Write یا Execute) داشته باشند.
ساختار دسترسی در DAC
در بیشتر سیستمها، DAC بر پایه عناصر زیر عمل میکند:
1. Owner (مالک)
کاربری که منبع را ایجاد کرده و اختیار اصلی بر روی آن دارد.
2. Permissions (مجوزها)
نوع عملیاتی که کاربران میتوانند روی یک منبع انجام دهند.
معمولترین مجوزها در سیستمعاملها عبارتاند از:
- Read (خواندن)
- Write (نوشتن)
- Execute (اجرا)
3. Access Control List (ACL) – فهرست کنترل دسترسی
فهرستی که کاربران و گروههای مختلف و نوع دسترسی آنها به یک منبع را مشخص میکند.
در Windows بخش اصلی کنترل دسترسی از طریق ACL انجام میشود.
در Linux نیز علاوه بر مدل سنتی owner/group/other میتوان از ACL پیشرفته استفاده کرد.
DAC در سیستمعامل Linux
در Linux برای هر فایل سه دسته مجوز تعریف میشود:
- Owner
- Group
- Other
نمونه خروجی دستور زیر را در نظر بگیرید:
ls -l file.txt
خروجی فرضی:
-rw-r----- 1 erfan staff 2048 Apr 11 10:00 file.txt
سخن آخر مدل DAC یکی از سادهترین و پرکاربردترین روشهای کنترل دسترسی است و در سیستمعاملهایی مانند Linux و Windows به طور گسترده مورد استفاده قرار میگیرد. کنترل در این مدل در اختیار مالک منبع است، که این موضوع هم مزیت و هم ضعف به شمار میآید.
به دلیل احتمال خطای انسانی و نبود کنترل مرکزی، استفاده صرف از DAC در محیطهای بزرگ یا حساس توصیه نمیشود؛ اما برای سیستمهای کوچک، شخصی یا محیطهایی با پیچیدگی کم، انتخابی مناسب و عملی است.
یعنی کنترل اختیاری دست مالک است.
مثال حرفهای و واقعی از یک مشکل امنیتی در DAC
فرض کن کارمند بخش حسابداری شرکت یک فایل اکسل حاوی اطلاعات مالی دارد و مالک آن است.
این کارمند، به اشتباه فایل را برای گروه Users دسترسی Read میگذارد تا ارائهای برای یکی از همکاران انجام دهد. در DAC، سیستم مانع او نمیشود. نتیجه این میشود که:
- یک کاربر مهمان در سیستم میتواند فایل را بخواند.
- اطلاعات حساس لو میرود.
در امنیت سازمانی، این یک Weak Point جدی در DAC است.
مدل کنترل دسترسی MAC (Mandatory Access Control)
MAC یا کنترل دسترسی اجباری یکی از سختگیرانهترین و امنترین مدلهای کنترل دسترسی است.
در این مدل، برخلاف DAC، مالک فایل یا منبع هیچ اختیاری در تعیین دسترسیها ندارد.
تمام دسترسیها تنها بر اساس سیاستهای امنیتی تعریفشده توسط سیستم یا مدیر امنیت (Security Administrator) تعیین میشود. ساده تر:
MAC یعنی کنترل دسترسی اجباری.
در این مدل هیچ کاربری—even مالک فایل—اجازه ندارد خودش دسترسی بدهد یا کم کند.
هر دسترسی فقط توسط قوانین سیستم یا ادمین امنیت تعیین میشود.
پس: در MAC اختیار دست انسان نیست، دست سیستم است.
به عبارت دیگر، در MAC همه چیز اجباری و غیرقابل تغییر توسط کاربر عادی است. MAC بیشتر در محیطهایی استفاده میشود که امنیت الزام قانونی دارد، مثل:
- سیستمهای نظامی
- مراکز داده حساس
- بانکها
- دولتها
- شبکههایی با طبقهبندی محرمانگی (Confidentiality Levels)
این سیستمها نمیخواهند کاربر اشتباهی انجام دهد. پس دسترسی را اجباری میکنند.
ساختار امنیتی در MAC
در MAC دو مفهوم اصلی وجود دارد:
۱. Security Labels (برچسبهای امنیتی)
هر فایل، فولدر، پروسه یا حتی کاربر دارای یک برچسب امنیتی است. این برچسبها معمولاً به شکل سطح محرمانگی تعریف میشوند، مانند:
- Public
- Confidential
- Secret
- Top Secret
این برچسبها تعیین میکنند یک شیء تا چه حد حساس است.
۲. Clearance Levels (سطوح مجوز کاربران)
هر کاربر در MAC یک سطح امنیتی مشخص دارد.
مثلاً:
- کاربر A → سطح Confidential
- کاربر B → سطح Secret
قانون اصلی MAC این است:
کاربر فقط به دادههایی دسترسی دارد که سطح امنیتی فایل کمتر یا مساوی سطح مجوز او باشد.
اگر سطح فایل بالاتر باشد، دسترسی حتی برای Owner هم غیرممکن است.
مثال ساده در لینوکس (SELinux)
SELinux یکی از پیادهسازیهای MAC است.
فرض کن:
- Apache یک سرویس است.
- فایل shadow رمزهای کاربران را ذخیره میکند.
حتی اگر Apache روی سیستم دسترسی read داشته باشد، SELinux نمیگذارد shadow را بخواند.
چون برچسبش اجازه نمیدهد. پس: در MAC فقط Permission کافی نیست. برچسب هم باید اجازه بدهد.
تفاوت اصلی MAC با DAC
در DAC مالک فایل تصمیم میگیرد چه کسی دسترسی داشته باشد.
در MAC مالک فایل هیچ نقشی ندارد، فقط سیستم تصمیم میگیرد.
این یعنی:
- خطای انسانی حذف میشود
- کاربر نمیتواند اطلاعات را اشتباه به دیگران بدهد
- مجوزها غیرقابل انتقال است
مزایا: امنیت خیلی بالا – جلوی اشتباه کاربر را میگیرد – برای سازمانهای حساس عالی است
معایب : انعطافپذیر نیست (کاربر هیچکاری نمیتواند بکند) – راهاندازیاش سختتر است – برای استفاده معمولی مناسب نیست
خلاصه نهایی MAC
- MAC یعنی سیستم تعیین میکند، نه کاربر.
- از برچسب امنیتی استفاده میکند.
- کاربران نمیتوانند Permission را تغییر دهند.
- امنیت بسیار بالاتر از DAC است.
- در SELinux و MIC استفاده میشود.
- مخصوص سیستمهای خیلی حساس است.
مدل کنترل دسترسی RBAC (Role-Based Access Control)
RBAC یا کنترل دسترسی مبتنی بر نقش یکی از کاربردیترین و استانداردترین مدلهای کنترل دسترسی در شبکهها و سیستمهای سازمانی است.
در این مدل، بهجای اینکه به هر کاربر به شکل مستقیم مجوز بدهیم، ابتدا نقش (Role) تعریف میکنیم و سپس مجوزها را روی آن نقش قرار میدهیم.
کاربران فقط عضو نقش میشوند و دسترسیها را از آن نقش دریافت میکنند. این روش باعث سادهسازی مدیریت دسترسیها در سازمان میشود و احتمال اشتباه را کاهش میدهد.
ساختار RBAC دقیقاً چگونه کار میکند؟
RBAC روی سه مفهوم اصلی ساخته شده است:
۱. Role (نقش) : Role یک عنوان سازمانی یا شغلی است.
مثلاً:
- NetworkAdmin
- HRManager
- SecurityAnalyst
- ITSupport
هر Role مجموعهای از Permissionها را دارد.
۲. Permission (مجوز) : Permission همان عملی است که یک Role میتواند انجام دهد.
مثلاً:
- Read / Write روی یک پوشه
- ایجاد کاربر در سیستم
- دسترسی به یک سرویس یا اپلیکیشن
- مدیریت یک دیتابیس
۳. User (کاربر) : کاربر فقط عضو یک یا چند Role میشود و دسترسیها بهطور خودکار به او داده میشود.
چرا RBAC اینقدر مهم است؟
در محیطهای سازمانی که یا کاربر زیاد است یا دسترسیها پیچیده هستند، اگر Permission را بهصورت مستقیم به کاربران بدهیم: مدیریت سخت میشود – اشتباه زیاد میشود – امنیت کاهش پیدا میکند
RBAC این مشکل را حل میکند چون:
- فقط Roleها مدیریت میشوند
- مجوزهای کاربران همیشه استاندارد و قابل کنترل هستند
- اضافه و حذف کردن کارمند بسیار سادهتر میشود
پیادهسازی RBAC در Active Directory (Windows Server)
در Active Directory، مدل RBAC بهصورت کاملاً عملی پیادهسازی میشود. در این ساختار، نقشها بهصورت گروه (Group) ایجاد میشوند؛ برای مثال یک گروه با نام HR-Managers ساخته میشود که نقش مدیران واحد منابع انسانی را نمایش میدهد. پس از ایجاد گروه، سطح دسترسیها روی منابع مختلف سازمان تعریف میشود. بهعنوان نمونه، فولدر مربوط به واحد منابع انسانی تنها برای اعضای گروه HR-Managers قابل دسترسی است و همچنین دیتابیس اطلاعات حقوق و مزایا نیز فقط برای همین گروه باز میشود.
پس از تعریف نقش و تنظیم سطح دسترسی، کاربران جدید تنها با عضو شدن در آن گروه، تمام دسترسیهای لازم را دریافت میکنند و نیازی نیست که برای هر کاربر بهصورت جداگانه Permissionها دوباره تنظیم شود. همین مسئله مدیریت امنیت را بسیار ساده و استاندارد میکند. نکته مهم این است که اگر فردی از واحد HR خارج شود، تنها با حذف او از گروه HR-Managers، تمامی دسترسیهای مرتبط با نقش از او گرفته میشود. این ساختار دقیقاً نشاندهنده قدرت RBAC است؛ یعنی مدیریت متمرکز و ساده دسترسیها بر اساس نقشها، بدون نیاز به تنظیمات تکراری و پراکنده برای هر کاربر.
مثال کاملاً واقعی از کاربرد RBAC در یک سازمان
فرض کن یک سازمان ۲۰۰ کارمند دارد و ۱۲ دپارتمان مختلف.
هر دپارتمان Role مخصوص خود را دارد:
- Finance
- Security Team
- Development
- Helpdesk
وقتی یک کارمند جدید وارد واحد مالی میشود:
- فقط عضو Role مالی میشود
- تمام پوشهها، سامانهها، دیتابیسها و فایلهایی که برای Role مالی تعیین شده به او داده میشود
اگر فرد به واحد دیگری منتقل شود:
- از Role قبلی حذف
- به Role جدید اضافه میشود
دسترسیها بهطور کامل و اتوماتیک بروزرسانی میشود.
نکات مهم RBAC
در مدل RBAC، تمام دسترسیها بر اساس نقشها تعیین میشوند و نه بر اساس هر کاربر بهصورت جداگانه، به همین دلیل یکی از بهترین و استانداردترین مدلها برای سازمانها محسوب میشود. این مدل بهطور کامل با ساختار Groupها در Active Directory سازگار است و همین موضوع پیادهسازی آن را در محیطهای ویندوزی بسیار ساده و عملیاتی میکند. اضافه کردن نقشهای جدید نیز در این مدل کار پیچیدهای نیست و کافی است یک Role جدید تعریف شود و دسترسیهای مربوط به آن مشخص گردد تا کاربران با عضو شدن در همان گروه، تمام مجوزهای لازم را دریافت کنند. هرچه تعداد نقشها در سازمان بیشتر باشد، مدیریت دسترسیها راحتتر و منظمتر انجام میشود اما طراحی این نقشها باید با دقت بالا صورت گیرد تا از همپوشانی یا اشتباه در سطح دسترسیها جلوگیری شود. از نظر امنیتی، RBAC سطح امنیت بالاتری نسبت به DAC ارائه میدهد اما همچنان از مدل MAC ضعیفتر است، زیرا کنترل سفتوسخت و غیرقابلتغییر MAC را ندارد.
سخن آخر مدلهای کنترل دسترسی (DAC / MAC / RBAC)
بهطور کلی، هر سه مدل کنترل دسترسی رویکردهای متفاوتی برای مدیریت امنیت و سطح دسترسی ارائه میدهند و انتخاب درست میان آنها کاملاً به نوع سیستم، محیط کاری و سطح حساسیت اطلاعات بستگی دارد.
مدل DAC سادهترین و انعطافپذیرترین روش است و اختیار اصلی را به مالک داده میدهد، اما در محیطهای سازمانی بزرگ میتواند باعث بینظمی و ضعف امنیت شود.
مدل MAC دقیقترین و سختگیرانهترین روش است که معمولاً در سامانههای امنیتی، نظامی و محیطهایی با دادههای فوقحساس استفاده میشود؛ اما برای سازمانهای معمولی بهخاطر پیچیدگی و عدم انعطاف کافی مناسب نیست.
مدل RBAC در نقطهی میانی این دو قرار میگیرد و بهترین گزینه برای شرکتها، سازمانها و محیطهای دارای ساختار مشخص است؛ چون دسترسیها براساس نقشها مدیریت میشوند، نه کاربران، و همین موضوع باعث میشود مدیریت دسترسی مقیاسپذیر، ساده و استاندارد باقی بماند.
در نهایت، اگر بخواهیم دید عملی بدهیم:
DAC مناسب سیستمهای شخصی، MAC مناسب محیطهای محرمانه و RBAC مناسب تقریباً تمام سازمانهای مدرن است. ترکیب درست این سه مدل میتواند به ایجاد یک ساختار امنیتی حرفهای، قابلکنترل و قابلتوسعه منجر شود.