VulnCity

راهنمای جامع امن‌سازی لینوکس

نویسنده: یاسین عابدینی · دسته: آموزش · تاریخ انتشار: ۱۴۰۵/۲/۱

راهنمای جامع امن‌سازی (Hardening) سیستم‌عامل لینوکس

فرآیند حیاتی برای کاهش سطح حمله و محافظت از سیستم در برابر دسترسی‌های غیرمجاز و تهدیدات امنیتی

امن‌سازی یا "Hardening" سیستم‌عامل لینوکس، فرآیندی حیاتی برای کاهش سطح حمله (Attack Surface) و محافظت از سیستم در برابر دسترسی‌های غیرمجاز و تهدیدات امنیتی است. این راهنما مجموعه‌ای از بهترین تکنیک‌ها را برای تقویت دفاعی سرور یا دسکتاپ لینوکسی شما ارائه می‌دهد.

۱. مدیریت کاربران و احراز هویت (User & Authentication)

پایه‌ی امنیت هر سیستمی، مدیریت صحیح حساب‌های کاربری و سیاست‌های دسترسی است.

سیاست‌های پیشرفته رمز عبور

استفاده از رمزهای عبور ضعیف یکی از اصلی‌ترین حفره‌های امنیتی است. با استفاده از کتابخانه libpam-pwquality می‌توانید سیاست‌های سخت‌گیرانه‌ای برای رمزهای عبور تنظیم کنید.

ابتدا بسته را نصب کنید:

# For Debian/Ubuntu
sudo apt-get install libpam-pwquality

# For RHEL/CentOS/Fedora
sudo dnf install libpam-pwquality

سپس فایل /etc/security/pwquality.conf را برای تنظیم قوانین ویرایش کنید:

# حداقل طول رمز عبور
minlen = 10
# حداقل تعداد کلاس کاراکتری (بزرگ، کوچک، عدد، نماد)
minclass = 3
# حداقل تعداد کاراکتر متفاوت نسبت به رمز قبلی
difok = 5
# تعداد تلاش‌های مجاز برای وارد کردن رمز جدید
retry = 2

غیرفعال کردن root

ورود مستقیم با کاربر root بسیار خطرناک است. همیشه از یک کاربر عادی با دسترسی sudo استفاده کنید.

الف) غیرفعال کردن ورود root از طریق SSH:

در فایل /etc/ssh/sshd_config این خط را تنظیم کنید:

PermitRootLogin no

ب) غیرفعال کردن شل ورود برای root:

برای جلوگیری از لاگین مستقیم، شل کاربر root را در فایل /etc/passwd تغییر دهید:

# خط اصلی
root:x:0:0:root:/root:/bin/bash

# خط تغییر یافته
root:x:0:0:root:/root:/sbin/nologin

غیرفعال کردن حساب‌های کاربری بلااستفاده

حساب‌های کاربری غیرفعال یا سرویس‌هایی که دیگر استفاده نمی‌شوند را با تغییر شل آن‌ها به /sbin/nologin مسدود کنید.

برای پیدا کردن کاربرانی که قابلیت ورود به شل را دارند:

awk -F: '($7 != "/sbin/nologin" && $7 != "/usr/sbin/nologin") {print $1, $7}' /etc/passwd

برای غیرفعال کردن یک کاربر:

# مثال برای یک کاربر سیستمی
sudo usermod -s /sbin/nologin nginx

۲. امن‌سازی سرویس SSH

ssh اصلی ترین راه ورود به سرور شماست.

Configuration پیشنهادی برای sshd_config

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

# فقط از پروتکل نسخه ۲ استفاده کنید
Protocol 2

# سطح لاگ‌برداری را روی INFO تنظیم کنید
LogLevel INFO

# ورود با رمزهای عبور خالی را ممنوع کنید
PermitEmptyPasswords no

# زمان انتظار برای لاگین (به ثانیه)
LoginGraceTime 60

# حداکثر تلاش‌های ناموفق برای احراز هویت
MaxAuthTries 4

# غیرفعال کردن احراز هویت مبتنی بر میزبان (کمتر امن)
HostbasedAuthentication no
IgnoreRhosts yes

# غیرفعال کردن X11 Forwarding در صورت عدم نیاز
X11Forwarding no

# محدود کردن الگوریتم‌های رمزنگاری به موارد امن
Ciphers aes128-ctr,aes192-ctr,aes256-ctr

# نمایش بنر قبل از ورود (برای هشدارهای قانونی)
Banner /etc/issue.net

استفاده از احرازهویت بر پایه ssh key

این روش بسیار امن‌تر از رمز عبور است.

  1. ایجاد کلید: ssh-keygen -t rsa -b 4096
  2. کپی کلید عمومی به سرور: ssh-copy-id username@server_ip
  3. غیرفعال کردن ورود با رمز عبور: در فایل sshd_config تنظیم کنید:
PubkeyAuthentication yes
PasswordAuthentication no

محدودسازی دسترسی کاربران

تنها به کاربران مشخصی اجازه ورود از طریق SSH را بدهید:

AllowUsers user1 user2

امن‌سازی فایل پیکربندی SSH

مطمئن شوید که فقط کاربر root می‌تواند این فایل را تغییر دهد:

sudo chown root:root /etc/ssh/sshd_config
sudo chmod 600 /etc/ssh/sshd_config

نکته: تغییر پورت پیش‌فرض SSH (22) به یک پورت دیگر، شما را از دید بسیاری از اسکنرهای خودکار پنهان می‌کند.

۳. امن‌سازی Kernel و بوت

فعال‌سازی ماژول‌های امنیتی لینوکس (LSM)

SELinux یا AppArmor ماژول‌های امنیتی قدرتمندی هستند که کنترل دسترسی اجباری (MAC) را پیاده‌سازی می‌کنند.

  • AppArmor: ساده‌تر و مناسب برای شروع. (پیش‌فرض در Ubuntu/Debian)
  • SELinux: بسیار قدرتمند و دقیق، اما پیچیده‌تر. (پیش‌فرض در RHEL/CentOS)

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

در فایل /etc/selinux/config اطمینان حاصل کنید:

SELINUX=enforcing
SELINUXTYPE=default

امن‌سازی بوت‌لودر (GRUB)

برای جلوگیری از دسترسی غیرمجاز به Single User Mode و تغییر پارامترهای بوت، برای GRUB رمز عبور تنظیم کنید.

  1. یک رمز عبور هش شده ایجاد کنید:
    grub2-mkpasswd-pbkdf2
  2. رمز عبور تولید شده را در فایل پیکربندی GRUB قرار دهید.
  3. سطح دسترسی فایل grub.conf را محدود کنید:
    sudo chown root:root /etc/grub.conf
    sudo chmod og-rwx /etc/grub.conf

الزام احراز هویت برای Single User Mode

این دستورات تضمین می‌کنند که برای ورود به Single User Mode، رمز عبور root پرسیده شود:

sudo sed -i "/SINGLE/s/sushell/sulogin/" /etc/sysconfig/init
sudo sed -i "/PROMPT/s/yes/no/" /etc/sysconfig/init

غیرفعال کردن استفاده از حافظه USB

برای جلوگیری از اتصال دستگاه‌های ذخیره‌سازی ناشناس، ماژول usb_storage را بلاک کنید.

در فایل /etc/modprobe.d/blacklist.conf اضافه کنید:

blacklist usb_storage

و برای اطمینان، در /etc/rc.local نیز اضافه کنید:

modprobe -r usb_storage
exit 0

۴. امنیت فایل سیستم (File System)

مدیریت صحیح مجوزها (Permissions)

مجوزهای نادرست روی فایل‌های سیستمی حساس می‌تواند فاجعه‌بار باشد.

فایل‌های حساب کاربری:

sudo chmod 644 /etc/passwd
sudo chown root:root /etc/passwd
sudo chmod 600 /etc/shadow
sudo chown root:root /etc/shadow

فایل‌های زمان‌بندی (Cron):

sudo chown root:root /etc/crontab /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly
sudo chmod og-rwx /etc/crontab /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly

رمزنگاری پارتیشن‌ها با LUKS

LUKS (Linux Unified Key Setup) یک استاندارد قدرتمند برای رمزنگاری دیسک است که از داده‌های شما در حالت Data-at-Rest محافظت می‌کند.

ساختار LUKS:

  • Header (phdr): شامل اطلاعاتی مانند UUID، نوع و حالت رمزنگاری، و چک‌سام.
  • Key Material (KM): شامل ۸ اسلات کلید است. کلید اصلی (Master Key) با رمز عبور هر کاربر رمزنگاری شده و در یکی از این اسلات‌ها ذخیره می‌شود.
  • Bulk Data: داده‌های اصلی که توسط کلید اصلی رمزنگاری شده‌اند.

دستورات کلیدی برای ایجاد یک پارتیشن رمزنگاری شده:

# فرمت کردن پارتیشن با LUKS
sudo cryptsetup -y -v luksFormat /dev/sdb1

# باز کردن پارتیشن و ایجاد یک مپ در /dev/mapper
sudo cryptsetup luksOpen /dev/sdb1 my_encrypted_drive

# ایجاد فایل سیستم روی پارتیشن باز شده
sudo mkfs.ext4 /dev/mapper/my_encrypted_drive

# اتصال (Mount) پارتیشن برای استفاده
sudo mount /dev/mapper/my_encrypted_drive /mnt/secure_data

۵. مدیریت نرم‌افزارها و سرویس‌ها

به‌روزرسانی خودکار و منظم

بسته‌های نرم‌افزاری و Kernel سیستم‌عامل را همیشه به‌روز نگه دارید تا آسیب‌پذیری‌های امنیتی شناخته‌شده برطرف شوند.

  • در Debian/Ubuntu: بسته unattended-upgrades را نصب و پیکربندی کنید.
  • در RHEL/Fedora: سرویس dnf-automatic.timer را فعال کنید.

غیرفعال کردن سرویس‌های غیرضروری

هر سرویس اضافی، یک راه نفوذ بالقوه است. سرویس‌هایی را که استفاده نمی‌کنید، متوقف و غیرفعال کنید.

بررسی پورت‌های باز

با استفاده از ابزارهایی مانند netstat یا ss، پورت‌های در حال گوش دادن را شناسایی و پورت‌های غیرضروری را با فایروال مسدود کنید.

sudo netstat -antp

حذف بنرهای شناسایی

اطلاعات نسخه نرم‌افزارها را از بنرها حذف کنید تا به مهاجمان سرنخ ندهید. (مثال Banner none در SSH).

۶. نظارت و لاگ‌برداری (Auditing & Logging)

لاگ‌های سیستم چشم و گوش شما هستند. مکان لاگ‌های مهم را بشناسید و به طور منظم آن‌ها را بررسی کنید:

  • /var/log/auth.log یا /var/log/secure: لاگ‌های مربوط به احراز هویت.
  • /var/log/messages: پیام‌های عمومی سیستم.
  • /var/log/boot.log: لاگ‌های مربوط به فرآیند بوت.
  • /var/log/wtmp: تاریخچه ورود و خروج کاربران.

نتیجه‌گیری

امنیت یک فرآیند مداوم است، نه یک پروژه یک‌باره. با اجرای این تکنیک‌ها، شما یک لایه دفاعی مستحکم برای سیستم لینوکس خود ایجاد می‌کنید. همیشه هوشیار باشید، سیستم خود را به‌روز نگه دارید و به‌طور منظم تنظیمات امنیتی را بازبینی کنید.