</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

فصل ۱۰: امنیت لینوکس

مدل امنیتی لینوکس، دسترسی فایل، sudo، سخت‌سازی SSH، SELinux/AppArmor، امنیت کرنل (sysctl، ASLR، DEP)، auditd و ممیزی امنیتی با Lynis.

متوسط۱۶ دقیقه مطالعهآخرین بروزرسانی: ۸ تیر ۱۴۰۵ویرایش در گیت‌هاب

چرا امنیت لینوکس مهم است؟#

لینوکس از مدت‌ها پیش ستون فقرات اینترنت بوده است: بیش از ۹۶ درصد از یک میلیون دامنهٔ برتر، تمام ۵۰۰ ابررایانهٔ جهان، و بیشتر زیرساخت‌های ابری روی لینوکس اجرا می‌شوند. اما «امنیت پیش‌فرض» وجود ندارد؛ یک سرور لینوکس تازه‌نصب‌شده اگر سخت‌سازی نشود، در کمتر از یک ساعت هدف اسکنرهای خودکار قرار می‌گیرد و در صورت داشتن سرویس آسیب‌پذیر، به‌سرعت آلوده می‌شود.

در این فصل، مدل امنیتی لینوکس، سخت‌سازی SSH، کنترل‌های اجباری (MAC) و ممیزی عملی را مرور می‌کنیم.

مدل امنیتی لینوکس#

لینوکس بر پایهٔ DAC (Discretionary Access Control) بنا شده است: هر فایل مالک (owner) و گروه (group) دارد و مالک می‌تواند مجوزها را به دلخواه تنظیم کند. سه مجموعه از مجوزها وجود دارد: خواندن (r)، نوشتن (w)، اجرا (x) به‌تفکیک مالک/گروه/دیگران.

# نمایش مجوزهای عددی
stat -c '%a %n' /etc/passwd      # 644
stat -c '%a %n' /etc/shadow      # 640
stat -c '%a %n' /usr/bin/sudo    # 4755  (SUID)
 
# تغییر مالک و مجوزها
sudo chown www-data:www-data /var/www/html/index.html
sudo chmod 640 /var/www/html/config.php
 
# مجوزهای نمادین
chmod u+x script.sh        # اجرا برای مالک
chmod g-w config.yml       # حذف نوشتن برای گروه
chmod o-r secret.key       # حذف خواندن برای دیگران

خطر SUID/SGID

فایل‌هایی با بیت SUID (مانند sudo، passwd، mount) با دسترسی مالک اجرا می‌شوند، نه اجراکننده. اگر یک فایل SUID دارای آسیب‌پذیری باشد، مهاجم می‌تواند به root ارتقا دهد. هر ماه فایل‌های SUID را اسکن کنید:

sudo find / -perm -4000 -type f 2>/dev/null

برای کنترل‌های ریزتر از ACL استفاده می‌کنیم:

# دادن دسترسی خواندن به کاربر alice بدون تغییر مجوز اصلی
sudo setfacl -m u:alice:r /var/www/html/config.php
getfacl /var/www/html/config.php

پیکربندی sudo#

sudo به کاربر عادی اجازه می‌دهد دستورات را با دسترسی root اجرا کند؛ اما فقط طبق قواعد /etc/sudoers. هرگز این فایل را با ویرایشگر معمولی ویرایش نکنید؛ از visudo استفاده کنید که قواعد دستوری را قبل از ذخیره اعتبارسنجی می‌کند.

# فقط کاربر devops می‌تواند systemctl restart nginx را اجرا کند
devops ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
 
# گروه admin تمام دستورات را می‌تواند اجرا کند اما با رمز
%admin ALL=(ALL) ALL
 
# کاربر deploy فقط به‌عنوان کاربر www-data می‌تواند دستور بزند
deploy ALL=(www-data) NOPASSWD: /usr/bin/php /var/www/html/artisan

قاعدهٔ طلایی: کمترین دسترسی. به جای NOPASSWD: ALL (که عملی эквивалent به رمز root است)، دستورات خاص را محدود کنید.

سخت‌سازی SSH#

SSH پرتکرارترین سرویس هدف در اینترنت است. پیکربندی پیش‌فرض آن باید سخت‌سازی شود:

# پشتیبان‌گیری از پیکربندی اصلی
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
 
# ویرایش پیکربندی
sudo nano /etc/ssh/sshd_config

تغییرات پیشنهادی:

Port 2222                           # تغییر پورت پیش‌فرض 22
PermitRootLogin no                  # ورود مستقیم root ممنوع
PasswordAuthentication no           # فقط کلید عمومی
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
AllowUsers devops deploy            # اجازه فقط به کاربران مشخص
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 0               # قطع اتصال بی‌استفاده
Protocol 2
# اعتبارسنجی و راه‌اندازی مجدد
sudo sshd -t                        # تست دستوری پیکربندی
sudo systemctl restart sshd

نکتهٔ مهم: قبل از بستن PasswordAuthentication، یک ترمینال باز نگه دارید و کلید عمومی را در ~/.ssh/authorized_keys قرار دهید و از یک ترمینال جدید ورود را تست کنید؛ وگرنه خودتان را بیرون می‌اندازید!

نصب fail2ban برای مسدود خودکار IPهای مهاجم:

sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
 
# بررسی وضعیت
sudo fail2ban-client status sshd

fail2ban لاگ‌های احراز هویت را می‌خواند و IPهایی که بیش از پنج بار ناموفق وارد شده‌اند را با iptables برای ۱۰ دقیقه (پیش‌فرض) مسدود می‌کند.

SELinux و AppArmor#

DAC ضعیف است؛ اگر فرایند با دسترسی root اجرا شود، می‌تواند همه‌چیز را تغییر دهد. MAC (Mandatory Access Control) این مشکل را با اعمال سیاست‌های اجباری بر فرایندها حل می‌کند: حتی root هم باید سیاست MAC را رعایت کند.

ویژگیSELinuxAppArmor
پلتفرمRHEL، CentOS، FedoraUbuntu، openSUSE
مدلLabel-based (Type Enforcement)Path-based
پیچیدگیبالامتوسط
انعطافبسیار بالامتوسط
یادگیریشیب تندملایم‌تر
# وضعیت SELinux
sestatus
getenforce                            # Enforcing، Permissive یا Disabled
 
# تغییر موقت به حالت Permissive (برای عیب‌یابی)
sudo setenforce 0
 
# برچسب‌های امنیتی یک فایل
ls -Z /var/www/html/index.html
 
# وضعیت AppArmor
sudo apparmor_status
sudo aa-status

هرگز SELinux/AppArmor را غیرفعال نکنید

وقتی برنامه‌ای کار نمی‌کند، راه‌حل غیرفعال‌کردن MAC نیست؛ سیاست صحیح را بنویسید. غیرفعال‌کردن MAC، لایهٔ مهمی از دفاع در عمق (Defense-in-Depth) را حذف می‌کند. در حالت Permissive، نقض‌ها فقط ثبت می‌شوند تا سیاست را بر اساس آن تنظیم کنید.

امنیت کرنل#

پارامترهای کرنل از طریق /etc/sysctl.conf یا /etc/sysctl.d/ تنظیم می‌شوند. چند پارامتر امنیتی مهم:

# غیرفعال‌کردن ارسال بسته‌های IP منبع جعلی
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
 
# فعال‌سازی حفاظت در برابر Smurf
net.ipv4.icmp_echo_ignore_broadcasts = 1
 
# غیرفعال‌کردن ارسال ICMP Redirect
net.ipv4.conf.all.accept_redirects = 0
 
# ثبت بسته‌های Marsian (آدرس‌های غیرممکن)
net.ipv4.conf.all.log_martians = 1
 
# فعال‌سازی TCP SYN Cookies (ضد SYN Flood)
net.ipv4.tcp_syncookies = 1
sudo sysctl -p    # اعمال تغییرات

سه سازوکار کلیدی سخت‌سازی حافظه:

  • ASLR (Address Space Layout Randomization): مکان بارگذاری کتابخانه‌ها در هر اجرا تصادفی می‌شود تا ROP و buffer overflow سخت‌تر شود.
  • DEP/NX (Data Execution Prevention): صفحات حافظهٔ داده قابل‌اجرا نیستند.
  • Stack Canary: مقدار تصادفی پیش از بازگشت از تابع قرار می‌گیرد تا سرریز بافر شناسایی شود.

ممیزی با auditd#

auditd سیستم ثبت رویدادهای امنیتی در لینوکس است که برای انطباق (PCI DSS، HIPAA) ضروری است:

sudo apt install auditd
sudo systemctl enable --now auditd
 
# ثبت دسترسی به فایل حساس
sudo auditctl -w /etc/passwd -p wa -k identity_changes
 
# گزارش همهٔ رویدادها با کلید identity_changes
sudo ausearch -k identity_changes
 
# گزارش همهٔ دستورهای sudo
sudo ausearch -m USER_CMD -x sudo

تمرین عملی: ممیزی امنیتی با Lynis#

Lynis یک ابزار متن‌باز ممیزی امنیتی است که سرور لینوکس را اسکن می‌کند و پیشنهادهای سخت‌سازی می‌دهد:

sudo apt install lynis
sudo lynis audit system

Lynis صدها آزمایش انجام می‌دهد و در پایان یک امتیاز Hardening Index (۰ تا ۱۰۰) می‌دهد:

  - Hardening index : [61] (      ) [######          ]
  - Hardening level : [61] (      ) [######          ]
 
  Possible hardening topics:
  - Configure password hashing to SHA-512 (CRYPT_DEFAULT)
  - Set password minimum length to at least 10 (PASS_MIN_LEN)
  - Disable USB storage if not needed (modprobe)
  - Add a banner to /etc/issue (legal)
  - Disable kernel modules: dccp, sctp, rds, tipc

برای دیدن همهٔ هشدارها و توصیه‌ها:

sudo lynis audit system --pentest | tee lynis-report.txt
sudo lynis show details TEST-ID

چک‌لیست سخت‌سازی لینوکس#

کنترلاقداموضعیت
به‌روزرسانیsudo apt update && sudo apt upgrade هفتگی□
کاربر rootغیرفعال‌کردن ورود مستقیم□
احراز هویت SSHکلید عمومی + MFA□
پورت SSHتغییر از 22 به پورت غیراستاندارد□
fail2banنصب و فعال□
فایروالUFW با سیاست پیش‌فرض Deny□
SUID/SGIDاسکن ماهانه و حذف غیرضروری‌ها□
MACSELinux در حالت Enforcing یا AppArmor□
auto-updatesunattended-upgrades برای وصلهٔ امنیتی□
auditdفعال و لاگ‌ها آرشیو می‌شود□
Lynisممیزی فصلی و رفع یافته‌ها□
پشتیبانپشتیبان منظم و آفلاین (Air-Gapped)□

به‌روزرسانی منظم مهم‌ترین کنترل است

بیش از ۶۰ درصد نفوذهای موفق از آسیب‌پذیری‌هایی استفاده می‌کنند که وصلهٔ آن‌ها منتشر شده اما نصب نشده است. فعال‌کردن unattended-upgrades برای وصله‌های امنیتی در دبیان/اوبونتو، ساده‌ترین کار با بیشترین بازده امنیتی است: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.

خلاصه و گام بعدی#

در این فصل با مدل امنیتی لینوکس از جمله مجوزهای فایل، sudo، و سخت‌سازی SSH آشنا شدید. MAC با SELinux و AppArmor را برای دفاع در عمق بررسی کردید، پارامترهای امنیتی کرنل (sysctl، ASLR، DEP) را مرور کردید، ممیزی با auditd را آموختید و یک ممیزی عملی با Lynis انجام دادید.

در فصل بعد، با چارچوب‌های امنیتی NIST و ISO آشنا می‌شوید تا کنترل‌های فنی این فصل را در یک ساختار حاکمیتی منسجم قرار دهید.

اشتراک‌گذاری:

این صفحه در تاریخ ۸ تیر ۱۴۰۵ به‌روزرسانی شده است.