تسلط بر خط فرمان لینوکس: راهنمای عملی برای متخصصان شبکه، امنیت و DevOps

7 مرداد 1404 - خواندن 9 دقیقه - 46 بازدید


مقدمه

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

فهرست مطالب

  1. فصل اول: مبانی شل و مدیریت پوسته
  2. فصل دوم: مدیریت فایل و دایرکتوری
  3. فصل سوم: مجوزها، مالکیت و امنیت فایل
  4. فصل چهارم: پردازش متن و ابزارهای خط لوله
  5. فصل پنجم: مدیریت بسته و به روزرسانی
  6. فصل ششم: شبکه و عیب یابی ارتباطات
  7. فصل هفتم: سرویس ها و مدیریت سیستم
  8. فصل هشتم: اسکریپت نویسی با Bash
  9. فصل نهم: ابزارهای امنیتی اصلی
  10. فصل دهم: پیکربندی فایروال و iptables/nftables

فصل اول: مبانی شل و مدیریت پوسته

1.1 ساختار کلی شل

  • توضیح تفاوت های اصلی Bash، Zsh و Fish
  • فایل های پیکربندی (~/.bashrc، ~/.profile)
  • نحوه بارگذاری تنظیمات و تفاوت Login vs Non-login Shell

1.2 متغیرها و محیط

  • تعریف و نمایش متغیر (VAR=value، echo $VAR)
  • متغیرهای محیطی مهم (PATH، HOME، SHELL)
  • پایداری متغیر با export و ذخیره در فایل های شل

1.3 History و مدیریت دستورات

  • فهرست دستورات قبلی (history)
  • جستجوی تعاملی در History (Ctrl+R)
  • ترفندهای تکرار دستور (!n، !grep)

تمرین

  1. متغیر MYNAME را تعریف کرده و مقدارش را در فایل ~/.bashrc ذخیره کنید.
  2. با استفاده از History، پنجمین دستور قبلی را اجرا کنید.

فصل دوم: مدیریت فایل و دایرکتوری

2.1 فهرست و ناوبری

  • ls با گزینه های -l, -a, -h, --color
  • تغییر دایرکتوری با cd و برگشت سریع (cd -)
  • نمایش مسیر جاری با pwd

2.2 ایجاد، حذف و جابجایی

  • mkdir -p برای ایجاد چند لایه پوشه
  • touch برای ساخت فایل خالی
  • cp و mv با گزینه های -r, -i, -v
  • حذف ایمن با rm -i, حذف پوشه با rm -rf (مواظب باشید!)

2.3 فشرده سازی و آرشیو

  • tar czf و tar xzf
  • zip و unzip
  • تفاوت فرمت های gz, bz2, xz

مثال عملی

bash

mkdir -p ~/backup/{docs,configs,logs}
tar czf ~/backup/docs_$(date +%F).tar.gz ~/Documents

تمرین

  1. دایرکتوری project را در مسیر خانه بسازید، سه فایل خالی در آن ایجاد کنید، سپس همه را در یک آرشیو tar.bz2 فشرده کنید.
  2. آرشیو را در پوشه ی ~/restore بازکنید.

فصل سوم: مجوزها، مالکیت و امنیت فایل

3.1 ساختار مجوزها

  • نمایش مجوزها با ls -l
  • مفهوم خواندن، نوشتن و اجرا (r, w, x) برای owner، group و others

3.2 تغییر مالکیت و گروه

  • دستور chown user:group filename
  • کاربرد chown -R برای دایرکتوری ها

3.3 تنظیم مجوزها با chmod

  • مد دهی عددی (chmod 755 file)
  • مد نمادی (chmod u=rwx,g=rx,o= file)
  • بیت های ویژه: Setuid, Setgid, Sticky bit

نکته امنیتی

فعال کردن Setuid روی فایل های نا آشنا می تواند مسیر نفوذ هکرها را هموار کند.

تمرین

  1. فایلی بسازید و با chmod 4711 به آن مجوزهای Setuid بدهید.
  2. مالکیت یک دایرکتوری با زیرشاخه ها را به کاربر alice واگذار کنید.

فصل چهارم: پردازش متن و ابزارهای خط لوله

4.1 خط لوله (Pipes) و انتقال داده

  • مفهوم pipe (|) برای انتقال خروجی یک دستور به ورودی دستور بعدی
  • کاربردهای زنجیره ای با grep, awk, cut

مثال: استخراج آی پی ها از لاگ

bash

cat access.log | grep "Accepted" | awk '{print $NF}' | sort | uniq

4.2 استفاده از grep

  • grep برای جستجو در فایل ها
  • پارامترهای کاربردی:
    -i (بدون توجه به حروف بزرگ/کوچک)
    -r (جستجوی بازگشتی در پوشه ها)
    --color=auto (نمایش رنگی)

4.3 استفاده از cut, awk و sed

  • cut: برش فیلدها با دلیمتر خاص
  • awk: پردازش خط به خط فایل و استخراج فیلدهای دلخواه
  • sed: ویرایش متن و جایگزینی الگوها (sed 's/old/new/g')

تمرین

  1. فایلی بسازید که شامل اطلاعات کاربری باشد و با awk نام همه کاربران را استخراج کنید.
  2. با sed شماره تلفن ها را با فرمت استاندارد تبدیل کنید.

فصل پنجم: مدیریت بسته و به روزرسانی

5.1 توزیع های Debian/Ubuntu

  • نصب بسته با apt install
  • حذف با apt remove و apt purge
  • به روزرسانی سیستم با:

bash

sudo apt update && sudo apt upgrade -y

5.2 توزیع های RHEL/CentOS

  • استفاده از yum و dnf:

bash

sudo dnf install nginx

5.3 توزیع های Arch و مشتقات

  • نصب با pacman -S، به روزرسانی با pacman -Syu

5.4 بررسی وابستگی ها و فایل های نصبی

  • dpkg -l و rpm -qa برای لیست بسته ها
  • جستجو با apt-cache search یا dnf search

تمرین

  1. بسته curl را نصب کرده و نسخه آن را بررسی کنید.
  2. یک بسته را نصب و سپس با dpkg -L مسیر فایل های آن را بررسی کنید.

فصل ششم: شبکه و عیب یابی ارتباطات

6.1 بررسی تنظیمات شبکه

  • ip a برای مشاهده آدرس های IP
  • ip r یا route -n برای بررسی روت ها
  • ping برای تست اتصال
  • traceroute و mtr برای مسیر اتصال

6.2 DNS و تست نام دامنه

  • بررسی resolv.conf
  • استفاده از dig و nslookup برای تست دامنه ها
  • شبیه سازی پاسخ های DNS

6.3 ابزارهای مانیتورینگ شبکه

  • netstat -tulpn (پورت های باز)
  • ss به جای netstat در توزیع های جدیدتر
  • nmap برای اسکن شبکه و کشف میزبان ها

6.4 تست سرعت و اتصال

  • curl -I website.com برای بررسی پاسخ سرور
  • wget برای دانلود تستی
  • نصب ابزار iperf3 برای تست پهنای باند بین دو نقطه

تمرین

  1. پورت باز سرور google.com را با nmap بررسی کنید.
  2. از dig برای دریافت رکوردهای MX یک دامنه استفاده کنید.

فصل هفتم: سرویس ها و مدیریت سیستم

7.1 آشنایی با systemd

بیشتر توزیع های مدرن از systemd برای مدیریت سرویس ها استفاده می کنن.

مشاهده وضعیت سرویس:

bash

systemctl status nginx

فعال سازی سرویس هنگام بوت:

bash

systemctl enable apache2

توقف یا راه اندازی:

bash

systemctl stop ssh
systemctl start mysql

7.3 زمان بندی و cron jobs

ابزاری حیاتی برای اجرای خودکار وظایف دوره ای:

ویرایش کرون کاربر:

bash

crontab -e

مثال: اجرای اسکریپت هر روز ساعت ۲ صبح:

bash

0 2 * * * /home/user/backup.sh

بررسی کرون های فعال:

bash

crontab -l

فصل هشتم: اسکریپت نویسی با Bash

8.1 ساختار کلی یک اسکریپت

هر اسکریپت Bash با #!/bin/bash شروع می شه:

bash

#!/bin/bash
echo "سلام Meysam!"

شرط if:

bash

if [ $NAME == "Meysam" ]; then
echo "مدیر اجرایی!"
fi

حلقه for:

bash

for i in {1..5}; do
echo "مرحله $i"
done

8.3 آرگومان ها و پارامترها

  • آرگومان خط فرمان: $1, $2

بررسی تعداد آرگومان:

bash

if [ $# -lt 1 ]; then
echo "حداقل یک آرگومان لازم است"
fi

8.4 استفاده از توابع

bash

function greet() {
echo "درود، $1!"
}
greet "Meysam"

تمرین

  1. اسکریپتی بنویس که بعد از بررسی اتصال شبکه، به صورت خودکار سرویس های لازم را راه اندازی کند.
  2. اسکریپتی بنویس که از هر پوشه پشتیبان بگیره و با نام تاریخ ذخیره کنه.

فصل نهم: ابزارهای امنیتی اصلی

9.1 بررسی امنیت فایل ها با chkrootkit و rkhunter

این ابزارها فایل ها و کتابخانه ها را از نظر وجود rootkit بررسی می کنند:

bash

sudo chkrootkit
sudo rkhunter --check

9.2 اسکن آسیب پذیری با Lynis

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

bash

sudo apt install lynis
sudo lynis audit system

9.3 کنترل دسترسی با AppArmor و SELinux

مثال در Ubuntu:

bash

sudo aa-status

9.4 مانیتورینگ تغییرات فایل با auditd

ابزار مانیتورینگ برای ثبت فعالیت های مشکوک:

bash

sudo auditctl -w /etc/passwd -p wa

9.5 مشاهده لاگ های امنیتی

بررسی auth.log برای تلاش های ورود:

bash

sudo tail -f /var/log/auth.log

تمرین

  1. ابزار Lynis را اجرا کرده و گزارش آن را تحلیل کن.
  2. مسیر /var/www/html را با auditd مانیتور کن.

فصل دهم: پیکربندی فایروال با iptables و nftables

10.1 مفاهیم پایه فایروال در لینوکس

  • فایروال نقش دروازه ی کنترل بسته های ورودی، خروجی و عبوری رو ایفا می کنه.
  • هر بسته ی شبکه با مجموعه ای از قوانین مقایسه می شه تا مجاز یا مسدود بشه.
  • فایروال های لینوکسی مبتنی بر جدول، زنجیره و قانون هستند.

10.2 iptables: فایروال سنتی اما قدرتمند

ساختار کلی

  • Tables: مجموعه قوانین با کاربرد خاص
    filter: فیلتر بسته ها
    nat: تغییر مسیر آدرس و پورت
    mangle: تغییر بسته ها
  • Chains: مسیر پردازش بسته ها
    INPUT, OUTPUT,

نمونه قوانین پایه با nft

ایجاد جدول:

bash

sudo nft add table inet firewall

ایجاد زنجیره:

bash

sudo nft add chain inet firewall input { type filter hook input priority 0; }

اجازه دادن به پورت 80:

bash

sudo nft add rule inet firewall input tcp dport 80 accept

10.4 مقایسه سریع iptables و nftables

ویژگیiptablesnftablesساختارپراکنده و چندجدولییکپارچه و مدولارسرعت اجرامعمولیبهینه و سریع ترخوانایینسبتا پیچیدهقابل فهم ترپشتیبانی مدرنکمتر در سیستم های جدیدتوصیه شده توسط سیستم عامل هاابزار گرافیکیفراوانهنوز محدودتر

10.5 مدیریت حالت اتصال (Stateful Firewall)

  • بررسی وضعیت اتصال با ماژول conntrackbashsudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  • این خط یعنی بسته هایی که قبلا مجاز بودن، بدون بررسی مجدد عبور می کنن.

10.6 راه اندازی سریع فایروال ایمن (مثال عملی)

bash

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
این مجموعه قوانین، همه چیز رو می بنده به جز اتصال های مجاز و SSH.

تمرین پایانی

  1. یک اسکریپت Bash بنویس که در بوت سیستم فایروال nftables رو فعال کنه و فقط پورت های 22، 80 و 443 رو باز بذاره.
  2. تفاوت اجرای همین قواعد با iptables رو تست و بررسی کن.