مدیریت دسترسی در لینوکس: راهنمای جامع برای امنیت و کنترل کاربران

جدول محتوا نمایش

مدیریت دسترسی در لینوکس یکی از مهم‌ترین جنبه‌های امنیتی این سیستم‌عامل متن‌باز محسوب می‌شود. لینوکس به دلیل انعطاف‌پذیری بالا، امکانات متعددی را برای کنترل سطح دسترسی کاربران، گروه‌ها و حتی فرآیندها ارائه می‌دهد. از مدل سنتی مجوزهای مالک، گروه و سایرین (User, Group, Others) گرفته تا سیستم‌های پیشرفته‌ای مانند ACL و SELinux، همه این روش‌ها در کنار هم به مدیران سیستم کمک می‌کنند تا دسترسی‌ها را به‌دقت تنظیم و نظارت کنند. در این مقاله، به‌طور کامل و جامع به مدل‌های دسترسی، تخصیص مجوزها، کنترل دسترسی مبتنی بر نقش (RBAC)، احراز هویت، امنیت فایل‌ها و سیاست‌های امنیتی در لینوکس خواهیم پرداخت.

با ما در کانفیگ سرور همراه باشید تا یاد بگیریم چگونه با تنظیم مجوزهای دقیق، امنیت سیستم لینوکس را افزایش دهیم و از نفوذهای احتمالی جلوگیری کنیم. 🚀


۱. مدل‌های دسترسی در لینوکس

لینوکس از یک مدل سلسله‌مراتبی برای مدیریت دسترسی‌ها استفاده می‌کند. این مدل شامل مجوزهای سنتی (Traditional Permissions)، مجوزهای پیشرفته (Special Permissions) و سیستم‌های کنترل مدرن مانند ACL و SELinux است. در ادامه به بررسی هر یک از این مدل‌ها می‌پردازیم.

۱.۱. سطوح دسترسی سنتی (Traditional Permissions)

مجوزهای استاندارد لینوکس که به‌عنوان مدل DAC (Discretionary Access Control) نیز شناخته می‌شوند، یکی از پرکاربردترین روش‌های مدیریت سطح دسترسی به فایل‌ها و دایرکتوری‌ها هستند. این مدل بر پایه مالکیت فایل و گروه‌های کاربران طراحی شده و سطح دسترسی‌ها را با استفاده از دستوراتی مانند chmod، chown و chgrp کنترل می‌کند.

۱.۱.۱. مجوزهای مالک، گروه و سایرین (User, Group, Others)

در لینوکس، هر فایل و دایرکتوری دارای سه دسته مالکیت است:

مالک (User – u): کاربری که فایل را ایجاد کرده است و کنترل کامل بر روی آن دارد.
گروه (Group – g): گروهی از کاربران که می‌توانند سطح مشخصی از دسترسی به فایل داشته باشند.
سایرین (Others – o): سایر کاربران سیستم که در گروه مالک نیستند.

این سطوح دسترسی تعیین می‌کنند که چه کسی می‌تواند یک فایل را بخواند (Read – r)، تغییر دهد (Write – w) یا اجرا کند (Execute – x).

۱.۱.۲. مجوزهای خواندن، نوشتن و اجرا (rwx)

در لینوکس، سطوح دسترسی در قالب سه حرف نمایش داده می‌شوند:

🔹 r (Read) – اجازه خواندن فایل را می‌دهد.
🔹 w (Write) – امکان تغییر یا حذف فایل را فراهم می‌کند.
🔹 x (Execute) – اجازه اجرای فایل (در صورت اسکریپت یا باینری بودن) را صادر می‌کند.

به‌عنوان مثال، خروجی دستور ls -l ممکن است چنین چیزی باشد:

-rwxr-xr–  1 root staff  2048 Feb 6 12:34 script.sh

🔹 rwx (مالک – root) – دارای تمام مجوزها است.
🔹 r-x (گروه – staff) – فقط می‌تواند فایل را بخواند و اجرا کند.
🔹 r– (سایرین) – تنها می‌توانند فایل را بخوانند.

۱.۱.۳. استفاده از chmod, chown, chgrp

chmod برای تغییر مجوزهای فایل استفاده می‌شود:

chmod 755 script.sh  # مالک: rwx | گروه: r-x | سایرین: r-x

chown برای تغییر مالکیت فایل استفاده می‌شود:

chown ali script.sh  # تغییر مالکیت به کاربر “ali”

chgrp برای تغییر گروه مالکیت فایل استفاده می‌شود:

chgrp developers script.sh  # تغییر گروه فایل به “developers”


۱.۲. مجوزهای پیشرفته (Special Permissions)

علاوه بر مجوزهای سنتی، لینوکس از مجوزهای ویژه‌ای مانند SUID، SGID و Sticky Bit نیز پشتیبانی می‌کند که برای افزایش سطح امنیت و کنترل کاربران مفید هستند.

۱.۲.۱. بیت SUID و SGID

🔸 SUID (Set User ID): اگر روی یک فایل اجرایی تنظیم شود، فرآیند مربوطه با مجوزهای مالک اصلی اجرا می‌شود، نه با مجوز کاربری که آن را اجرا کرده است.

مثال:

chmod u+s /usr/bin/passwd  # فعال کردن SUID برای برنامه تغییر رمز عبور

🔸 SGID (Set Group ID): اگر روی یک دایرکتوری تنظیم شود، فایل‌های جدیدی که داخل آن ایجاد می‌شوند به گروه مالک آن دایرکتوری ارث می‌برند.

مثال:

chmod g+s /home/developers  # فعال کردن SGID برای یک دایرکتوری گروهی

۱.۲.۲. بیت Sticky Bit

🔹 Sticky Bit معمولاً برای دایرکتوری‌هایی مانند /tmp استفاده می‌شود تا از حذف فایل‌های دیگر کاربران جلوگیری کند.

chmod +t /tmp  # تنظیم Sticky Bit روی دایرکتوری /tmp


۱.۳. سیستم‌های مجوز مدرن (ACL و SELinux)

سیستم‌های پیشرفته کنترل دسترسی در لینوکس امکان تنظیم مجوزهای سفارشی را برای کاربران و گروه‌های خاص فراهم می‌کنند.

۱.۳.۱. ACL (Access Control List)

ACL برای ایجاد مجوزهای دقیق‌تر نسبت به روش‌های سنتی استفاده می‌شود. با setfacl می‌توان یک کاربر خاص را به یک فایل اضافه کرد.

setfacl -m u:ali:rwx myfile.txt  # اعطای دسترسی کامل به کاربر “ali”

۱.۳.۲. SELinux (Security-Enhanced Linux)

🔹 SELinux یکی از قوی‌ترین سیستم‌های امنیتی است که بر پایه کنترل دسترسی اجباری (MAC – Mandatory Access Control) کار می‌کند.
🔹 برخلاف مدل DAC، این سیستم دسترسی‌ها را به‌صورت مرکزی مدیریت می‌کند و از نفوذ بدافزارها جلوگیری می‌کند.
🔹 دارای سه حالت اصلی است:
Enforcing – اجرای سخت‌گیرانه سیاست‌های امنیتی
Permissive – نمایش هشدار بدون اعمال محدودیت
Disabled – غیرفعال‌سازی SELinux

بررسی وضعیت SELinux:

sestatus

خاموش کردن موقت SELinux:

setenforce 0

مدیریت دسترسی در لینوکس – بخش دوم

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


۴. احراز هویت و کنترل دسترسی شبکه‌ای

یکی از اساسی‌ترین چالش‌ها در مدیریت امنیت لینوکس، تضمین این است که فقط کاربران مجاز به سیستم دسترسی داشته باشند. برای این کار، باید سیستم احراز هویت قدرتمندی را پیاده‌سازی کنیم که می‌تواند شامل PAM، تأیید هویت دو مرحله‌ای (2FA) و LDAP باشد. همچنین، کنترل دسترسی شبکه‌ای به کمک فایروال‌ها، محدودیت‌های SSH و VPN بسیار مهم است.

۴.۱. احراز هویت کاربران در لینوکس

۴.۱.۱. PAM (Pluggable Authentication Modules)

PAM یک سیستم احراز هویت ماژولار در لینوکس است که امکان تنظیم مکانیزم‌های ورود به سیستم را به صورت پویا فراهم می‌کند. از طریق PAM، می‌توان انواع روش‌های احراز هویت مانند رمزهای عبور سنتی، کلیدهای SSH، LDAP، توکن‌های امنیتی و حتی اثر انگشت را پیاده‌سازی کرد. فایل‌های پیکربندی PAM معمولاً در مسیر /etc/pam.d/ قرار دارند.

🔹 مثال تنظیم PAM برای محدودیت ورود کاربران:
در فایل /etc/pam.d/sshd می‌توان مشخص کرد که فقط کاربران خاصی اجازه ورود دارند:

auth required pam_listfile.so item=user sense=deny file=/etc/ssh/denied_users onerr=succeed

فایل /etc/ssh/denied_users شامل لیستی از کاربران غیرمجاز خواهد بود.

۴.۱.۲. تأیید هویت دو مرحله‌ای (2FA) در لینوکس

با توجه به افزایش حملات Brute-Force، استفاده از احراز هویت دو مرحله‌ای (2FA) می‌تواند یک لایه امنیتی اضافی ایجاد کند. یکی از ابزارهای معروف در لینوکس Google Authenticator است که برای این منظور به کار می‌رود.

🔹 نصب Google Authenticator:

sudo apt install libpam-google-authenticator

🔹 فعال‌سازی 2FA در SSH:
در /etc/pam.d/sshd این خط را اضافه کنید:

auth required pam_google_authenticator.so

🔹 فعال‌سازی در کانفیگ SSH:
در /etc/ssh/sshd_config مقدار زیر را روی yes قرار دهید:

ChallengeResponseAuthentication yes

سپس سرویس SSH را ریستارت کنید:

sudo systemctl restart sshd

۴.۱.۳. استفاده از LDAP برای مدیریت کاربران

LDAP (Lightweight Directory Access Protocol) یک پروتکل محبوب برای مدیریت متمرکز کاربران است که در محیط‌های سازمانی به شدت مورد استفاده قرار می‌گیرد. از OpenLDAP به عنوان یک راهکار رایگان و متن‌باز می‌توان برای مدیریت کاربران و گروه‌ها در شبکه استفاده کرد.


۴.۲. کنترل دسترسی به شبکه در لینوکس

۴.۲.۱. استفاده از فایروال‌های لینوکسی (iptables, firewalld)

🔹 فعال‌سازی فایروال firewalld:

sudo systemctl enable –now firewalld

🔹 ایجاد قانون جدید برای اجازه دادن به SSH:

sudo firewall-cmd –permanent –add-service=ssh

sudo firewall-cmd –reload

۴.۲.۲. محدود کردن دسترسی SSH

🔹 غیرفعال کردن ورود کاربر root:
در فایل /etc/ssh/sshd_config مقدار زیر را تغییر دهید:

PermitRootLogin no

🔹 محدود کردن ورود کاربران به SSH:

AllowUsers user1 user2

۴.۲.۳. استفاده از VPN برای امنیت شبکه در لینوکس

استفاده از OpenVPN برای رمزگذاری ترافیک شبکه‌ای یک راهکار استاندارد محسوب می‌شود.


۵. کنترل دسترسی به فایل‌ها و دایرکتوری‌ها در لینوکس

۵.۱. اصول پایه‌ای مدیریت دسترسی به فایل‌ها

۵.۱.۱. انواع مجوزهای فایل‌ها در لینوکس

🔹 مجوزهای rwx در فایل‌ها و دایرکتوری‌ها تعیین می‌کنند که چه کاربری اجازه خواندن، نوشتن و اجرا را دارد.
🔹 می‌توان با chmod، سطح دسترسی را تغییر داد.

۵.۱.۲. مدیریت مالکیت و گروه‌ها

🔹 تغییر مالکیت فایل‌ها:

chown user:group file.txt

🔹 انتقال یک دایرکتوری به گروهی خاص:

chgrp developers /var/www/html


۶. سیاست‌های امنیتی و SELinux در لینوکس

۶.۱. معرفی SELinux

SELinux یک سیستم کنترل امنیتی سطح بالا است که سیاست‌های دقیق‌تری نسبت به مجوزهای استاندارد ارائه می‌دهد.
🔹 بررسی وضعیت SELinux:

getenforce

🔹 فعال‌سازی SELinux در حالت enforcing:

setenforce 1


۷. مانیتورینگ و بررسی مجوزها در لینوکس

۷.۱. بررسی مجوزهای فایل و کاربران

🔹 بررسی مجوزهای فایل:

ls -l file.txt

🔹 مشاهده گروه‌های کاربری:

id username

۷.۲. بررسی لاگ‌های امنیتی

🔹 بررسی لاگ‌های احراز هویت:

sudo cat /var/log/auth.log | grep “Failed”

🔹 فعال‌سازی Auditd برای نظارت بر تغییرات فایل‌ها:

auditctl -w /etc/passwd -p wa

مدیریت دسترسی در لینوکس – بخش سوم (پایانی)

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


۸. امنیت لینوکس در محیط‌های ابری و کانتینری

امروزه بسیاری از سازمان‌ها و شرکت‌ها، از زیرساخت‌های ابری مانند AWS، Google Cloud و Azure استفاده می‌کنند و همچنین Docker و Kubernetes را برای مدیریت کانتینرها به کار می‌گیرند. به همین دلیل، کنترل دسترسی در این محیط‌ها یک چالش بزرگ محسوب می‌شود.

۸.۱. امنیت دسترسی در لینوکس در محیط‌های ابری

زمانی که لینوکس در یک محیط ابری مستقر می‌شود، باید چندین لایه امنیتی برای حفاظت از دسترسی‌ها پیاده‌سازی شود.

۸.۱.۱. استفاده از SSH Key به جای رمز عبور

در اکثر محیط‌های ابری، استفاده از SSH Key توصیه می‌شود. برای ایجاد یک کلید SSH و اضافه کردن آن به سرور، مراحل زیر را انجام دهید:

🔹 ایجاد کلید SSH در سیستم لوکال:

ssh-keygen -t rsa -b 4096 -C “your_email@example.com”

🔹 کپی کردن کلید عمومی به سرور ابری:

ssh-copy-id user@server-ip

🔹 غیرفعال کردن ورود با رمز عبور در سرور:
در فایل /etc/ssh/sshd_config مقدار زیر را تغییر دهید:

PasswordAuthentication no

سپس سرویس SSH را ریستارت کنید:

sudo systemctl restart sshd

۸.۱.۲. استفاده از IAM (Identity and Access Management) در محیط‌های ابری

اگر از AWS، Azure یا GCP استفاده می‌کنید، حتماً باید سیاست‌های IAM را به درستی تنظیم کنید. برای مثال، در AWS می‌توان دسترسی به سرورهای EC2 را تنها به کاربران مجاز محدود کرد.

۸.۱.۳. استفاده از فایروال‌های ابری

حتماً قوانین Security Group یا Network ACLs را تنظیم کنید تا فقط آی‌پی‌های مجاز بتوانند به سرورهای شما متصل شوند.


۸.۲. مدیریت دسترسی در کانتینرها (Docker و Kubernetes)

با گسترش استفاده از Docker و Kubernetes، نیاز به کنترل دسترسی در این محیط‌ها بیش از پیش احساس می‌شود.

۸.۲.۱. کنترل دسترسی در Docker

🔹 اجرای کانتینرها با کاربر غیر روت:
به صورت پیش‌فرض، کانتینرهای داکر با root اجرا می‌شوند که این یک ریسک امنیتی بزرگ است. به جای آن، از یک کاربر غیر روت استفاده کنید.

🔹 ایجاد یک کاربر جدید داخل Dockerfile:

RUN groupadd -r myuser && useradd -r -g myuser myuser

USER myuser

🔹 محدود کردن دسترسی به داکر با استفاده از گروه‌ها:

sudo usermod -aG docker myuser

۸.۲.۲. کنترل دسترسی در Kubernetes (RBAC)

Kubernetes دارای مدل کنترل دسترسی مبتنی بر نقش (RBAC) است که به شما امکان می‌دهد دسترسی‌های کاربران به منابع مختلف را کنترل کنید.

🔹 مثال تعریف یک نقش (Role) در Kubernetes:

kind: Role

apiVersion: rbac.authorization.k8s.io/v1

metadata:

  namespace: default

  name: pod-reader

rules:

– apiGroups: [“”]

  resources: [“pods”]

  verbs: [“get”, “list”, “watch”]

🔹 ایجاد یک Binding برای اعمال این نقش به یک کاربر خاص:

kind: RoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

  name: read-pods

  namespace: default

subjects:

– kind: User

  name: “john”

  apiGroup: rbac.authorization.k8s.io

roleRef:

  kind: Role

  name: pod-reader

  apiGroup: rbac.authorization.k8s.io

این پیکربندی تضمین می‌کند که کاربر “john” فقط اجازه خواندن اطلاعات پادها را دارد و نمی‌تواند آن‌ها را تغییر دهد.


۹. اتوماسیون در مدیریت دسترسی لینوکس

در محیط‌های بزرگ، مدیریت دستی کاربران و مجوزها بسیار زمان‌بر و پرخطا است. به همین دلیل، استفاده از ابزارهای اتوماسیون مانند Ansible، Puppet و Chef برای مدیریت دسترسی‌ها توصیه می‌شود.

۹.۱. مدیریت کاربران و گروه‌ها با Ansible

Ansible یکی از ابزارهای محبوب برای مدیریت کاربران و گروه‌ها در سیستم‌های لینوکسی است.

🔹 نمونه Playbook برای ایجاد کاربر و تنظیم SSH Key:

– name: ایجاد کاربر جدید در لینوکس

  hosts: all

  become: yes

  tasks:

    – name: ایجاد کاربر جدید

      user:

        name: devuser

        password: “{{ ‘mypassword’ | password_hash(‘sha512’) }}”

        shell: /bin/bash

        groups: sudo

        append: yes

    – name: تنظیم SSH Key برای کاربر

      authorized_key:

        user: devuser

        key: “{{ lookup(‘file’, ‘/home/devuser/.ssh/id_rsa.pub’) }}”

🔹 اجرای Playbook در سرورها:

ansible-playbook -i inventory.ini setup-users.yml


۱۰. بهترین روش‌های امنیتی در مدیریت دسترسی لینوکس

در نهایت، پیروی از بهترین روش‌های امنیتی باعث می‌شود که سیستم لینوکس شما در برابر تهدیدات محافظت شود.

۱۰.۱. اصل کمترین دسترسی (Principle of Least Privilege – POLP)

🔹 کاربران و سرویس‌ها فقط باید حداقل مجوزهای لازم را داشته باشند.
🔹 هرگز از root برای اجرای سرویس‌ها استفاده نکنید.

۱۰.۲. فعال‌سازی لاگینگ و مانیتورینگ امنیتی

🔹 استفاده از ابزارهایی مانند Auditd، Fail2Ban و OSSEC برای نظارت بر دسترسی‌های غیرمجاز.
🔹 تنظیم هشدار برای فعالیت‌های مشکوک در /var/log/auth.log.

۱۰.۳. به‌روزرسانی منظم سیستم

🔹 همیشه سیستم و بسته‌های نرم‌افزاری را آپدیت کنید:

sudo apt update && sudo apt upgrade -y

🔹 در سیستم‌های RHEL و CentOS می‌توان از dnf یا yum استفاده کرد.


جمع‌بندی و نتیجه‌گیری

در این مقاله به بررسی مدیریت دسترسی در لینوکس پرداختیم. مهم‌ترین نکاتی که یاد گرفتیم:
مفاهیم پایه‌ای مجوزهای لینوکس (chmod، chown، ACL)
مدیریت کاربران و گروه‌ها در لینوکس
احراز هویت با PAM، 2FA و LDAP
کنترل دسترسی شبکه‌ای با SSH، فایروال و VPN
امنیت در محیط‌های ابری و کانتینری (Docker، Kubernetes)
اتوماسیون مدیریت کاربران و مجوزها با Ansible
بهترین روش‌های امنیتی برای جلوگیری از نفوذ و تهدیدات سایبری

با رعایت این نکات، می‌توانید یک سیستم لینوکسی امن و پایدار داشته باشید. اگر سوالی دارید، در بخش نظرات بپرسید! 🚀

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

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