بلاگ

  • آموزش مانیتورینگ منابع سرور لینوکس با ابزارهای htop، top و netdata

    آموزش مانیتورینگ منابع سرور لینوکس با ابزارهای htop، top و netdata

    در این مقاله از بلاگ رهام کلود، خیلی ساده و کاربردی میخوایم درباره آموزش مانیتورینگ منابع سرور گفت‌وگو کنیم؛

    و اینکه چرا برای هر مدیر سرور ضروریه و چطور با چند ابزار کاربردی مثل top ،htop و Netdata همیشه وضعیت سرور لینوکسی خودتون رو زیر نظر داشته باشید.

    فرض کنید سایت شما ناگهان کند یا کاربران از قطعی و کندی شکایت می‌کنن.

    اولین سوالی که باید از خودتون بپرسید اینه که آیا پردازنده بیش از حد درگیره؟ رم پر شده؟ یا شاید یک پردازش خاص تمام منابع سرور رو مصرف کرده؟

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

    با ما همراه باشید.

     

    مانیتورینگ منابع سرور

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

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

    • میزان استفاده از CPU
    • میزان مصرف RAM
    • فضای دیسک
    • سرعت خواندن و نوشتن روی دیسک
    • ترافیک شبکه
    • پردازش‌های در حال اجرا
    • میزان Load سرور

    وقتی این اطلاعات همیشه جلوی چشم شما باشه، خیلی سریع‌تر می‌تونید مشکلات رو پیدا کنید و قبل از اینکه روی کاربران تاثیر بذارن، اون‌ها رو برطرف کنید.

     

    اهمیت مانیتورینگ منابع سرور

    خیلی از مشکلات سرور از ابتدا با علائم کوچکی شروع میشن. مثلا ممکنه مصرف رم کم‌کم بالا بره یا یک سرویس به‌اشتباه وارد حلقه پردازشی بشه و CPU رو صد درصد درگیر کنه.

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

    به همین دلیل مدیران سرور معمولا همیشه یکی از ابزارهای مانیتورینگ رو روی سرورشون نصب دارن.

     

    ابزار top؛ ساده اما کاربردی

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

    برای اجرا کافی است دستور زیر را وارد کنید:

    top

    بعد از اجرا صفحه‌ای مشابه این مشاهده می‌کنید:

    top – 14:20:15 up 5 days
    Tasks: 150 total
    CPU: 12.5% us
    Mem: 8040 MB total

    در این صفحه می‌توانید اطلاعاتی مثل موارد زیر را ببینید:

    • میزان مصرف CPU
    • میزان مصرف حافظه
    • تعداد پردازش‌ها
    • پردازش‌هایی که بیشترین منابع را مصرف می‌کنند
    • Load Average سرور

    اگر فقط می‌خواید سریع وضعیت سرور را بررسی کنید، top کاملا نیاز شما را برطرف می‌کند.

     

    htop؛ نسخه حرفه‌ای‌تر top

    اگر تا حالا با top کار کرده باشید، احتمالا متوجه شدید که ظاهر آن کمی قدیمی است و کار کردن با آن همیشه راحت نیست.

    اینجاست که htop وارد میدان می‌شود.

    این ابزار همان اطلاعات top را نمایش می‌دهد اما محیطی بسیار خواناتر، رنگی و تعاملی دارد.

    برای نصب در اوبونتو:

    sudo apt install htop

    در توزیع‌های مبتنی بر RHEL:

    sudo dnf install htop

    سپس اجرا کنید:

    htop

    در htop می‌توانید خیلی راحت پردازش‌های اضافی را جستجو و متوقف، مصرف CPU هر هسته را جداگانه مشاهده، مصرف RAM و Swap را بررسی و پردازش‌ها را مرتب کنید.

    به همین دلیل بسیاری از مدیران لینوکس، htop را جایگزین top می‌کنند.

     

    آموزش مانیتورینگ منابع سرور

    فرض کنید کاربران گزارش می‌کنند سایت وردپرسی شما کند شده است.

    وارد سرور می‌شوید و دستور زیر را اجرا می‌کنید:

    htop

    متوجه می‌شوید یکی از پردازش‌های PHP نزدیک به ۹۵ درصد CPU را اشغال کرده است.

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

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

    اگر مانیتورینگ انجام نمی‌دادید، پیدا کردن این مشکل زمان بسیار بیشتری می‌برد.

     

    Netdata؛ مانیتورینگ حرفه‌ای با داشبورد گرافیکی

    اگر دوست دارید همه اطلاعات سرور را به‌صورت نمودارهای زنده مشاهده کنید، Netdata یکی از بهترین انتخاب‌هاست.

    برخلاف top و htop که داخل ترمینال اجرا می‌شوند، Netdata یک داشبورد تحت وب در اختیار شما قرار می‌دهد و تقریبا تمام بخش‌های سرور را لحظه‌به‌لحظه نمایش می‌دهد.

    بعد از نصب، اطلاعاتی مانند موارد زیر را مشاهده خواهید کرد:

    • مصرف CPU
    • مصرف RAM
    • وضعیت Swap
    • سرعت شبکه
    • وضعیت دیسک
    • IOPS
    • وضعیت دیتابیس
    • وضعیت وب‌سرور
    • تعداد کانکشن‌ها
    • وضعیت سرویس‌ها

    همه این اطلاعات به‌صورت نمودارهای زنده نمایش داده می‌شوند و پیدا کردن مشکل را بسیار ساده‌تر می‌کنند.

    اگر فقط گاهی وضعیت سرور را بررسی می‌کنید، top یا htop کاملا کافی هستند.

    اما اگر چند سرور دارید، می‌خواهید نمودار لحظه‌ای ببینید، دنبال پیدا کردن علت کندی سرور هستید و یا می‌خواهید تاریخچه مصرف منابع را ببینید، Netdata انتخاب مناسب‌تری خواهد بود.

     

    موارد مهم هنگام مانیتورینگ

    فقط بالا بودن مصرف CPU همیشه به معنی وجود مشکل نیست.

    گاهی ممکن است مصرف CPU طبیعی باشد اما حافظه RAM کاملا پر شده باشد یا دیسک سرعت کافی نداشته باشد.

    بهتر است همیشه این شاخص‌ها را کنار هم بررسی کنید:

    • مصرف CPU
    • مصرف RAM
    • میزان Swap
    • Load Average
    • مصرف دیسک
    • سرعت خواندن و نوشتن دیسک
    • وضعیت شبکه
    • پردازش‌هایی که بیشترین منابع را مصرف می‌کنند

    کنار هم قرار دادن این اطلاعات تصویر دقیق‌تری از وضعیت سرور به شما می‌دهد.

     

    نتیجه‌گیری

    یادگیریآموزش مانیتورینگ منابع سرور یکی از مهم‌ترین مهارت‌هایی است که هر مدیر سرور لینوکسی باید داشته باشد.

    ابزار top برای بررسی‌های سریع، htop برای مدیریت راحت‌تر پردازش‌ها و Netdata برای مانیتورینگ حرفه‌ای و نمایش نمودارهای زنده، هرکدام کاربرد خاص خودشان را دارند.

    اگر به‌صورت مرتب وضعیت CPU، حافظه، دیسک و شبکه را بررسی کنید،

    خیلی از مشکلات را قبل از اینکه باعث اختلال در سایت یا سرویس شوند شناسایی خواهید کرد و در نتیجه پایداری و عملکرد سرور شما به‌مراتب بهتر خواهد شد.

     


    سوالات متداول

    آیا top روی همه سرورهای لینوکسی نصب است؟
    تقریبا بله. این ابزار به‌صورت پیش‌فرض روی اکثر توزیع‌های لینوکس وجود دارد.

    htop بهتر است یا top؟
    از نظر اطلاعات تفاوت زیادی ندارند، اما htop محیط گرافیکی‌تر، امکانات بیشتر و کاربری ساده‌تری دارد.

    آیا Netdata رایگان است؟
    بله. نسخه متن‌باز Netdata رایگان است و برای بیشتر سرورها کاملا کافی خواهد بود.

    هر چند وقت یک‌بار باید منابع سرور را بررسی کنیم؟
    اگر سرور حساسی دارید، بهتر است مانیتورینگ به‌صورت دائمی انجام شود. در غیر این صورت، بررسی روزانه یا هنگام مشاهده کندی و اختلال نیز می‌تواند از بروز بسیاری از مشکلات جلوگیری کند.

    آیا مانیتورینگ باعث کاهش سرعت سرور می‌شود؟
    خیر. ابزارهایی مانند top و htop مصرف منابع بسیار کمی دارند و حتی Netdata نیز در حالت عادی سربار اندکی روی سرور ایجاد می‌کند، بنابراین تاثیر محسوسی بر عملکرد سیستم نخواهد داشت.

  • چگونه امنیت سرور لینوکسی را افزایش دهیم؟ (فایروال، Fail2Ban و SSH)

    چگونه امنیت سرور لینوکسی را افزایش دهیم؟ (فایروال، Fail2Ban و SSH)

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

    فرقی نمیکنه سرورتون برای میزبانی سایت استفاده بشه، یک VPS باشه یا برای اجرای برنامه و سرویس‌های مختلف؛

    اگر تنظیمات امنیتی رو جدی نگیرید، ممکنه سرورتون هدف حملات مختلف قرار بگیره.

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

    با چند تنظیم ساده مثل فعال کردن فایروال، امن کردن SSH و استفاده از Fail2Ban میتونید بخش زیادی از ریسک‌های امنیتی رو کاهش بدید.

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

     

    فهرست موضوعات:

    • چرا امنیت سرور لینوکسی مهمه؟
    • آپدیت بودن سیستم‌عامل لینوکس
    • فعال بودن فایروال
    • استفاده از Firewalld در AlmaLinux و CentOS
    • بستن پورت‌های غیرضروری
    • امنیت SSH
    • استفاده از کلید SSH
    • محدود سازی ورود کاربر Root
    • تغییر یا عدم تغییر پورت SSH
    • Fail2Ban چیه و چه کاری میکنه؟
    • تنظیمات مناسب برای امنیت
    • بررسی لاگ سرور
    • غیرفعال کردن سرویس‌های غیرضروری
    • Backup
    • اشتباهات رایج در امنیت سرور لینوکسی
    • نتیجه‌گیری
    • سوالات متداول

     

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

    خیلی از سرورها به‌صورت مستقیم به اینترنت وصل هستن.

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

    برای مثال، یکی از روش‌های رایج حمله اینه که ربات‌ها به‌صورت خودکار آدرس‌های IP مختلف رو بررسی میکنن و دنبال پورت‌های باز مثل SSH میگردن.

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

    حالا تصور کنید روی سرور شما یک رمز عبور ساده وجود داشته باشه یا SSH بدون هیچ محدودیتی در دسترس باشه. در چنین شرایطی احتمال حمله بیشتر میشه.

    پس بهتره از همون اول چند لایه امنیتی داشته باشید.

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

     

    آپدیت بودن سیستم‌عامل لینوکس

    یکی از ساده‌ترین کارها برای بالا بردن امنیت سرور، به‌روزرسانی سیستم‌عامله.

    گاهی اوقات در نسخه‌های مختلف نرم‌افزارها و سرویس‌ها، آسیب‌پذیری‌های امنیتی پیدا میشه. توسعه‌دهنده‌ها هم معمولاً برای رفع این مشکلات، آپدیت امنیتی منتشر می‌کنن.

    اگر سیستم‌عامل و پکیج‌های سرور شما مدت زیادی آپدیت نشده باشن، ممکنه از یک آسیب‌پذیری قدیمی برای نفوذ استفاده بشه.

    در Ubuntu و Debian میتونید از دستورهای زیر استفاده کنید:

    sudo apt update
    sudo apt upgrade

    در سیستم‌عامل‌های مبتنی بر RHEL مثل AlmaLinux و Rocky Linux هم میتونید از دستور زیر استفاده کنید:

    sudo dnf update

    قبل از انجام آپدیت روی سرورهای مهم، بهتره بررسی کنید که آپدیت موردنظر باعث ناسازگاری با سرویس‌های شما نشه.

    در سرورهای production معمولا بهتره قبل از آپدیت‌های بزرگ، Backup یا Snapshot داشته باشید.

     

    فعال بودن فایروال

    یکی از مهم‌ترین بخش‌ها در افزایش امنیت سرور لینوکسی استفاده از فایرواله.

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

    برای مثال، اگر روی سرور شما فقط یک سایت و SSH فعال باشه، منطقی نیست که ده‌ها پورت بدون استفاده باز باشن.

    هرچه سرویس‌های غیرضروری کمتری در دسترس اینترنت باشن، سطح حمله هم کمتر میشه.

    فایروال UFW در Ubuntu

    در Ubuntu یکی از ابزارهای ساده برای مدیریت فایروال، UFW هست.

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

    sudo ufw enable

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

    sudo ufw status

    اگر SSH روی پورت پیش‌فرض 22 فعال باشه، قبل از فعال کردن فایروال حتماً اجازه دسترسی به SSH رو باز کنید:

    sudo ufw allow 22/tcp

    برای باز کردن پورت HTTP:

    sudo ufw allow 80/tcp

    و برای HTTPS:

    sudo ufw allow 443/tcp

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

    مثال: فرض کنید یک سرور Ubuntu دارید که روی اون یک سایت اجرا میشه و از طریق SSH هم مدیریت میشه.
    در این حالت معمولاً حداقل پورت‌های زیر نیاز هستن:

    پورت 22 برای SSH
    پورت 80 برای HTTP
    پورت 443 برای HTTPS

    در نتیجه میتونید این پورت‌ها رو مجاز کنید:

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp

    البته اگر SSH شما روی پورت دیگه‌ای تنظیم شده، باید همون پورت رو در فایروال باز کنید.

     

    استفاده از Firewalld در AlmaLinux و CentOS

    در سیستم‌عامل‌هایی مثل AlmaLinux، Rocky Linux و CentOS معمولاً Firewalld یکی از ابزارهای رایج برای مدیریت فایرواله.

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

    sudo firewall-cmd –state

    برای باز کردن سرویس SSH:

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

    برای باز کردن HTTP:

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

    برای HTTPS:

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

    بعد از تغییر قوانین، تنظیمات رو Reload کنید:

    sudo firewall-cmd –reload

    برای مشاهده قوانین فعال هم میتونید از این دستور استفاده کنید:

    sudo firewall-cmd –list-all

     

    بستن پورت‌های غیرضروری

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

    مثلاً اگر روی سرور شما سرویس FTP، Mail Server یا دیتابیس اجرا نمیشه، نیازی نیست پورت‌های مربوط به اون‌ها رو به اینترنت باز کنید.

    قبل از بستن پورت‌ها بهتره بررسی کنید چه سرویس‌هایی روی سرور در حال اجرا هستن.

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

    sudo ss -tulpn

    این دستور به شما کمک می‌کنه متوجه بشید چه سرویس‌هایی روی چه پورت‌هایی در حال گوش دادن هستن.

    ### نکته مهم

    قبل از بستن هر پورتی، مطمئن بشید که سرویس مهمی به اون وابسته نیست. مخصوصاً اگر از طریق SSH به سرور متصل هستید، حواستون باشه که دسترسی SSH رو به اشتباه مسدود نکنید.

     

    امنیت SSH

    SSH یکی از مهم‌ترین راه‌های مدیریت سرور لینوکسیه. اما اگر تنظیماتش به‌درستی انجام نشده باشه، می‌تونه یکی از اهداف حملات Brute Force باشه.

    در حمله Brute Force، مهاجم سعی می‌کنه با امتحان کردن تعداد زیادی رمز عبور، وارد حساب کاربری بشه.

    برای همین بهتره SSH رو امن‌تر کنیم.

    فایل تنظیمات SSH معمولاً اینجاست:

    /etc/ssh/sshd_config

    برای ویرایش فایل:

    sudo nano /etc/ssh/sshd_config

    البته قبل از تغییر تنظیمات، بهتره از فایل اصلی Backup بگیرید.

     

    استفاده از کلید SSH

    یکی از بهترین کارها برای افزایش امنیت سرور لینوکسی اینه که به‌جای ورود با Password از SSH Key استفاده کنید.

    در این روش یک جفت کلید ساخته میشه:

    کلید خصوصی (Private Key)
    کلید عمومی (Public Key)

    کلید عمومی روی سرور قرار می‌گیره و کلید خصوصی روی سیستم شما باقی می‌مونه.

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

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

    ssh-keygen

    بعد از ساخت کلید، باید کلید عمومی رو روی سرور قرار بدید.

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

    ssh-copy-id username@server-ip

    بعد از اینکه مطمئن شدید ورود با SSH Key به‌درستی کار می‌کنه، میتونید ورود با Password رو غیرفعال کنید.

    در فایل تنظیمات SSH:

    PasswordAuthentication no

    بعد سرویس SSH رو Restart یا Reload کنید:

    sudo systemctl restart ssh

    در بعضی توزیع‌ها نام سرویس sshd هست:

    sudo systemctl restart sshd

     

    هشدار: قبل غیرفعال کردن ورود با رمز عبور، حتما یک Session فعال و یک روش مطمئن برای ورود با SSH Key داشته باشید.
    اگر بدون تست این گزینه رو غیرفعال کنید و کلید SSH درست کار نکنه، ممکنه دسترسی شما به سرور قطع بشه.

     

    محدود سازی ورود کاربر Root

    کاربر Root بالاترین سطح دسترسی در لینوکس رو داره. اگر یک مهاجم بتونه مستقیماً با حساب Root وارد سرور بشه، کنترل بسیار زیادی روی سیستم خواهد داشت.

    به همین دلیل بهتره ورود مستقیم Root از طریق SSH رو محدود یا غیرفعال کنید.

    در فایل:

    etc/ssh/sshd_config/

    میتونید تنظیم زیر رو بررسی کنید:

    PermitRootLogin no

    بعد تنظیمات SSH رو اعمال کنید:

    sudo systemctl restart ssh

    روش بهتر اینه که با یک کاربر معمولی وارد سرور بشید و فقط در مواقع لازم با sudo دستورات مدیریتی رو اجرا کنید. مثلا:

    sudo apt update یا sudo systemctl restart nginx

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

     

    تغییر یا عدم تغییر پورت SSH

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

    مثلا میتونید SSH رو روی پورت دیگری مثل 2222 قرار بدید.

    این کار ممکنه تعداد زیادی از اسکن‌های خودکار ساده رو کاهش بده، اما نباید اون رو یک راهکار امنیتی اصلی در نظر بگیرید؛ چرا؟

    چون مهاجم می‌تونه پورت‌های مختلف رو Scan کنه و پورت SSH جدید رو پیدا کنه. پس تغییر پورت به‌تنهایی امنیت واقعی ایجاد نمیکنه.

    اگر تصمیم گرفتید پورت SSH رو تغییر بدید، باید هم‌زمان تنظیمات فایروال رو هم تغییر بدید. مثلا:

    sudo ufw allow 2222/tcp

    و در تنظیمات SSH:

    Port 2222

    بعد از تغییر تنظیمات، حتما اتصال جدید رو تست کنید. مثلا:

    ssh -p 2222 username@server-ip

     

    Fail2Ban چیه و چه کاری میکنه؟

    یکی دیگه از ابزارهای کاربردی برای افزایش امنیت سرور لینوکسی، Fail2Ban هست.

    Fail2Ban لاگ‌های سرویس‌های مختلف رو بررسی میکنه. اگر متوجه بشه یک IP در مدت کوتاهی تعداد زیادی تلاش ناموفق برای ورود داشته، میتونه اون IP رو به‌صورت موقت Block کنه.

    مثلا فرض کنید یک ربات مخرب در چند دقیقه 100 بار تلاش می‌کنه با رمزهای مختلف وارد SSH بشه.

    Fail2Ban می‌تونه این رفتار رو تشخیص بده و IP مربوطه رو برای مدت مشخصی مسدود کنه.

    این ابزار برای مقابله با حملات Brute Force خیلی کاربردیه.

     

    نصب Fail2Ban در Ubuntu

    برای نصب Fail2Ban در Ubuntu میتونید از دستور زیر استفاده کنید:
    sudo apt update
    sudo apt install fail2ban
    بعد سرویس رو فعال کنید:
    sudo systemctl enable fail2ban
    و اجرا کنید:
    sudo systemctl start fail2ban
    و برای بررسی وضعیت:
    sudo systemctl status fail2ban

     

    تنظیم Fail2Ban

    فایل تنظیمات اصلی Fail2Ban معمولاً در مسیر زیر قرار داره:
    /etc/fail2ban/
    برای تنظیمات شخصی بهتره به‌جای تغییر مستقیم فایل اصلی، از فایل `jail.local` استفاده کنید. مثلا:
    sudo nano /etc/fail2ban/jail.local
    یک تنظیم ساده برای SSH می‌تونه چیزی شبیه این باشه:
    [sshd]
    enabled = true
    port = ssh
    maxretry = 5
    findtime = 10m
    bantime = 1h

    enabled = true یعنی محافظت از SSH فعال باشه.
    maxretry = 5 یعنی بعد از 5 تلاش ناموفق، IP مشکوک شناسایی بشه.
    findtime = 10m یعنی این تلاش‌ها در بازه 10 دقیقه بررسی بشن.
    bantime = 1h یعنی IP برای یک ساعت مسدود بشه.

    بعد از تغییر تنظیمات:
    sudo systemctl restart fail2ban
    برای مشاهده وضعیت Jail مربوط به SSH:
    sudo fail2ban-client status sshd

     

    تنظیمات مناسب برای امنیت

    فرض کنید شما یک VPS با Ubuntu دارید و روی اون یک سایت وردپرسی اجرا میشه.

    سرور شما از طریق اینترنت در دسترسه و برای مدیریت اون از SSH استفاده می‌کنید.

    یک تنظیم امنیتی مناسب می‌تونه شامل این موارد باشه:

    مرحله اول: آپدیت سیستم

    sudo apt update
    sudo apt upgrade

    مرحله دوم: تنظیم فایروال

    فقط پورت‌های موردنیاز رو باز کنید:

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    بعد:
    sudo ufw enable

    مرحله سوم: امن کردن SSH

    * استفاده از SSH Key
    * غیرفعال کردن Password Login
    * محدود کردن ورود مستقیم Root

    مرحله چهارم: نصب Fail2Ban

    sudo apt install fail2ban

    بعد Jail مربوط به SSH رو فعال کنید.

    حالا سرور شما چند لایه امنیتی داره:

    فایروال → پورت‌های غیرضروری رو مسدود می‌کنه.
    SSH Key → ورود با رمز عبور رو حذف میکنه.
    Fail2Ban → تلاش‌های مشکوک و تکراری رو شناسایی و IP مهاجم رو Block میکنه.
    کاربر معمولی + sudo → استفاده مستقیم از Root رو محدود می‌کنه.

    این یعنی برای نفوذ به سرور، مهاجم باید از چند لایه امنیتی عبور کنه.

     

    بررسی لاگ سرور

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

    لاگ‌ها می‌تونن اطلاعات مهمی درباره تلاش‌های ورود ناموفق، خطاهای سرویس‌ها و فعالیت‌های مشکوک در اختیار شما قرار بدن.

    برای مثال، در Ubuntu و Debian میتونید لاگ‌های مربوط به احراز هویت رو بررسی کنید:

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

    در بعضی توزیع‌های لینوکس مثل AlmaLinux ممکنه لاگ‌های احراز هویت در مسیر زیر باشن:

    /var/log/secure

    اگر تعداد زیادی تلاش ناموفق برای ورود مشاهده کردید، بهتره بررسی کنید که آیا این تلاش‌ها طبیعی هستن یا نشونه یک حمله Brute Force.

     

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

    هر سرویس اضافی که روی سرور اجرا میشه، می‌تونه یک نقطه احتمالی برای حمله باشه.

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

    برای مشاهده سرویس‌های فعال:

    systemctl list-units –type=service –state=running

    قبل از غیرفعال کردن هر سرویس، حتما مطمئن بشید که سرویس موردنظر برای عملکرد سایت یا برنامه شما ضروری نیست.

     

    Backup

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

    به همین دلیل Backup یکی از مهم‌ترین بخش‌های امنیت سروره.

    اگر سرور هک بشه، اطلاعات حذف بشن یا مشکلی برای دیتابیس ایجاد بشه، داشتن Backup می‌تونه شما رو نجات بده.

    بهتره Backupها به‌صورت منظم گرفته شده و روی سرور اصلی ذخیره نشن، در یک محل جداگانه نگهداری بشن و هر چند وقت یک‌بار Restore اونها تست بشه.

    داشتن Backup بدون تست Restore، مثل داشتن کلیدی هست که هیچ‌وقت مطمئن نشدید قفل رو باز میکنه یا نه!

     

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

    برای افزایش امنیت سرور لینوکسی فقط نصب فایروال و Fail2Ban کافی نیست. چند اشتباه رایج هم وجود داره که بهتره از اون‌ها دوری کنید.

    استفاده از رمز عبور ساده
    رمزهایی مثل 123456 یا رمزهای کوتاه به‌راحتی قابل حدس هستن.

    باز گذاشتن همه پورت‌ها
    اینکه همه پورت‌ها رو باز بذارید و امیدوار باشید اتفاقی نیفته، روش مناسبی برای مدیریت امنیت سرور نیست.

    غیرفعال کردن SSH Password بدون تست
    اگر SSH Key درست تنظیم نشده باشه، ممکنه دسترسی خودتون رو از دست بدید.

    اعتماد کامل به تغییر پورت SSH
    تغییر پورت می‌تونه تعداد اسکن‌های ساده رو کمتر کنه، اما جایگزین فایروال، SSH Key و Fail2Ban نیست.

    نصب ابزارهای امنیتی بدون بررسی تنظیمات
    نصب یک ابزار به‌تنهایی امنیت ایجاد نمی‌کنه. تنظیم درست و بررسی عملکرد اون ابزار هم مهمه.

    نداشتن Backup
    امنیت یعنی فقط جلوگیری از حمله نیست؛ باید برای زمانی که مشکلی هم پیش میاد آماده باشید.

     

    نتیجه‌گیری

    برای افزایش امنیت سرور لینوکسی لازم نیست حتما یک متخصص امنیت حرفه‌ای باشید. با رعایت چند نکته ساده میتونید امنیت سرورتون رو تا حد زیادی بهتر کنید.

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

    امن کردن SSH و استفاده از SSH Key، احتمال حملات مربوط به رمز عبور رو کاهش میده و Fail2Ban هم می‌تونه جلوی بسیاری از تلاش‌های تکراری و Brute Force رو بگیره.

    در کنار این موارد، آپدیت منظم سیستم‌عامل، بررسی لاگ‌ها و داشتن Backup هم اهمیت زیادی دارن.

    در واقع بهتره امنیت سرور رو به شکل چندلایه ببینید.

    هیچ ابزار واحدی نمیتونه امنیت کامل ایجاد کنه؛

    اما وقتی چند لایه امنیتی مثل Firewall ،SSH Key ،Fail2Ban، محدود کردن دسترسی Root و Backup رو کنار هم داشته باشید، سرور شما وضعیت بسیار امن‌تری خواهد داشت.

     


    سوالات متداول

    آیا نصب Fail2Ban برای امنیت سرور کافی است؟
    خیر. Fail2Ban فقط یکی از لایه‌های امنیتیه. بهتره در کنار اون از فایروال، SSH Key، آپدیت منظم سیستم و تنظیمات مناسب SSH هم استفاده کنید.

    آیا تغییر پورت SSH باعث امن شدن سرور می‌شود؟
    تغییر پورت SSH می‌تونه بعضی اسکن‌های خودکار ساده رو کاهش بده، اما یک راهکار امنیتی کامل نیست. بهتره روی SSH Key، فایروال و Fail2Ban هم تمرکز کنید.

    آیا باید پورت 22 را ببندیم؟
    اگر SSH شما روی پورت 22 اجرا میشه و برای مدیریت سرور به اون نیاز دارید، نباید این پورت رو بدون جایگزین ببندید. در صورت تغییر پورت SSH، باید پورت جدید رو در فایروال باز کنید.

    آیا استفاده از SSH Key بهتر از Password است؟
    در بیشتر سناریوها بله. استفاده از کلید SSH می‌تونه امنیت ورود به سرور رو بیشتر کنه، مخصوصاً اگر ورود با Password هم غیرفعال شده باشه.

    آیا می‌توانیم ورود Root را کاملاً غیرفعال کنیم؟
    در بسیاری از سرورها بله، و معمولاً بهتره ورود مستقیم Root از طریق SSH محدود بشه. اما قبل از انجام این کار، باید مطمئن بشید یک حساب کاربری دیگر با دسترسی مدیریتی و `sudo` دارید.

    Fail2Ban دقیقا چه کاری انجام می‌دهد؟
    Fail2Ban لاگ‌ها رو بررسی می‌کنه و وقتی الگوهای مشکوک مثل تلاش‌های متعدد برای ورود ناموفق رو تشخیص بده، می‌تونه IP مربوطه رو برای مدت مشخصی مسدود کنه.

    آیا فایروال به‌تنهایی امنیت سرور را تضمین می‌کند؟
    خیر. فایروال فقط یکی از لایه‌های امنیتیه. برای امنیت بهتر باید از ترکیب فایروال، SSH امن، Fail2Ban، آپدیت منظم، Backup و مدیریت صحیح کاربران استفاده کنید.

    مهم‌ترین کار برای افزایش امنیت سرور لینوکسی چیست؟
    یک کار به‌تنهایی نمی‌تونه امنیت سرور رو تضمین کنه.
    اما اگر بخوایم از مهم‌ترین اقدامات شروع کنیم، بهتره ابتدا فایروال رو تنظیم کنید، دسترسی‌های غیرضروری رو ببندید، SSH رو با کلید امن کنید، ورود مستقیم Root رو محدود کنید و Fail2Ban رو برای مقابله با تلاش‌های ورود مشکوک فعال کنید.

  • آموزش مدیریت کاربران و سطوح دسترسی در لینوکس

    آموزش مدیریت کاربران و سطوح دسترسی در لینوکس

    اگر با لینوکس کار کرده باشید، احتمالا با مفاهیمی مثل User ،Group و Permission یا همون دسترسی فایل‌ها برخورد کردید.

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

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

    چون با استفاده از Permissionها مشخص می‌کنیم چه کسی میتونه یک فایل رو بخونه، تغییر بده یا اجراش کنه.

    توی این مقاله از بلاگ رهام کلود قراره قدم‌به‌قدم با مدیریت کاربران، گروه‌ها و سطح دسترسی فایل‌ها در لینوکس آشنا بشیم و در آخر هم چند مثال کاربردی داشته باشیم.

    پس با ما تا انتهای این مقاله همراه باشید.

     

     

    کاربر (User) در لینوکس چیه؟

    در لینوکس هر کسی که با سیستم کار می‌کنه، معمولا یک حساب کاربری داره. این حساب کاربری مشخص می‌کنه که کاربر چه دسترسی‌هایی روی سیستم داشته باشه.

    مثلا فرض کن یک سرور لینوکسی داری و سه نفر روی اون کار می‌کنن؛ مدیر سرور، توسعه‌دهنده و کاربر عادی.

    قرار نیست همه این افراد به تمام فایل‌های سرور دسترسی داشته باشن. مثلا ممکنه بخواید توسعه‌دهنده فقط به فایل‌های یک پروژه دسترسی داشته باشه و نتونه فایل‌های سیستمی رو تغییر بده.

    اینجاست که مدیریت کاربران و سطح دسترسی اهمیت پیدا میکنه.

     

    انواع کاربران در لینوکس

    به‌طور کلی کاربران لینوکس رو میشه به چند دسته تقسیم کرد.

    کاربر Root

    کاربر root قدرتمندترین کاربر در لینوکسه و تقریبا به همه بخش‌های سیستم دسترسی داره. مثلا میتونه:

    -کاربر جدید بسازه
    -کاربران رو حذف کنه
    -نرم‌افزار نصب کنه
    -فایل‌های سیستمی رو تغییر بده
    -سرویس‌ها رو مدیریت کنه
    -سطح دسترسی فایل‌ها رو تغییر بده

    به همین دلیل بهتره برای کارهای روزمره همیشه با Root کار نکنیم؛ چون یک دستور اشتباه می‌تونه باعث آسیب جدی به سیستم بشه.

     

    کاربران معمولی

    این کاربران دسترسی محدودی دارن و معمولا برای کارهای روزمره ازشون استفاده میشه. مثلا میتونیم یک کاربر به اسم ali بسازیم:

    sudo adduser ali

    بعد از اجرای این دستور، لینوکس ازتون رمز عبور و چند اطلاعات دیگه میخواد.

    برای اینکه ببینید کاربر ساخته شده یا نه، میتونید از این دستور استفاده کنید:

    id ali

     

    ساخت کاربر جدید در لینوکس

    برای ساخت یک کاربر روش‌های مختلفی وجود داره، اما یکی از ساده‌ترین روش‌ها استفاده از adduser هست:

    sudo adduser user1

    اگر فقط بخواید با دستور useradd کاربر بسازید:

    sudo useradd user1

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

    بعد از ساخت کاربر، می‌تونید با دستور زیر برای اون رمز عبور تعیین کنید:

    sudo passwd user1

    حذف کاربر در لینوکس

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

    در سیستم‌های مبتنی بر Debian و Ubuntu معمولاً این دستور استفاده میشه:

    sudo deluser user1

    اگر بخوای پوشه Home کاربر هم حذف بشه:

    sudo deluser –remove-home user1

    در بعضی توزیع‌ها هم می‌تونی از `userdel` استفاده کنی:

    sudo userdel user1

    و برای حذف Home:

    sudo userdel -r user1

    قبل از حذف کاربر بهتره مطمئن بشید فایل مهمی داخل Home اون کاربر وجود نداشته باشه.

     

    کاربرد گروه‌ها (Groups) در لینوکس

    فرض کنید روی یک سرور 10 کاربر دارید و می‌خواید همه اون‌ها به فایل‌های یک پروژه دسترسی داشته باشن.

    به‌جای اینکه برای تک‌تک کاربران Permission تنظیم کنید، می‌تونید یک Group بسازید و کاربران رو داخل اون قرار بدید.

    مثلا یک گروه به اسم developers بسازید:

    sudo groupadd developers

    حالا کاربر ali رو به این گروه اضافه کنید:

    sudo usermod -aG developers ali

    برای اضافه کردن کاربر `reza` هم:

    sudo usermod -aG developers reza

    حالا هر دو کاربر عضو گروه developers هستن و میتونید دسترسی‌های مربوط به پروژه رو برای این گروه تنظیم کنید.

    برای دیدن گروه‌های یک کاربر:

    groups ali
    یا:
    id ali

     

    سطح دسترسی در لینوکس چیه؟

    حالا میرسیم به یکی از مهم‌ترین بخش‌های مدیریت لینوکس؛ یعنی سطح دسترسی در لینوکس.

    هر فایل و پوشه در لینوکس Permission یا سطح دسترسی مشخصی داره.

    این دسترسی‌ها مشخص می‌کنن که چه کسی اجازه داره فایل رو بخونه، فایل رو تغییر بده و یا فایل رو اجرا کنه

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

    Read یا r
    برای خواندن فایل استفاده میشه.

    Write یا w
    اجازه تغییر دادن فایل رو میده.

    Execute یا x
    اجازه اجرای فایل رو میده.

    اگر یک فایل رو با دستور زیر بررسی کنیم:

    ls -l

    ممکنه چیزی شبیه این ببینیم:

    –rwxr-xr-

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

    rwx برای مالک فایل
    r-x برای گروه
    –r برای سایر کاربران

     

    عددهای Permission در لینوکس

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

    هر Permission یک مقدار عددی داره:

    خواندن = 4
    نوشتن = 2
    اجرا = 1

    حالا اگر بخوایم همه دسترسی‌ها رو داشته باشیم:

    4 + 2 + 1 = 7

    پس:

    rwx = 7

    اگر فقط Read و Write داشته باشیم:

    4 + 2 = 6

    پس:

    rw- = 6

    و اگر فقط Read داشته باشیم:

    r– = 4

    به همین دلیل Permissionهایی مثل این رو زیاد می‌بینیم:

    755
    644
    700
    600

     

    Permission 755 یعنی چی؟

    یکی از Permissionهای رایج در لینوکس 755 هست.

    وقتی می‌نویسیم:

    chmod 755 file.sh

    یعنی:

    مالک: rwx → خواندن، نوشتن و اجرا
    گروه: r-x → خواندن و اجرا
    سایر کاربران: r-x → خواندن و اجرا

    پس مالک می‌تونه فایل رو تغییر بده، اما بقیه فقط می‌تونن اون رو بخونن و اجرا کنن.

     

    644 یعنی چی؟

    Permission 644 هم برای فایل‌های معمولی خیلی رایجه. مثلا:

    chmod 644 index.html

    یعنی:

    مالک: خواندن و نوشتن
    گروه: فقط خواندن
    سایر کاربران: فقط خواندن

    این نوع Permission برای فایل‌هایی مثل HTML، CSS و فایل‌های متنی کاربرد زیادی داره.

     

    دستور chmod چیست؟

    برای تغییر سطح دسترسی فایل‌ها و پوشه‌ها از دستور chmod استفاده می‌کنیم. مثلا:

    chmod 755 script.sh یا chmod 644 index.html

    یک روش دیگه هم استفاده از حالت نمادین هست.

    مثلا برای اضافه کردن دسترسی اجرا به مالک:

    chmod u+x script.sh

    اینجا:

    u یعنی User یا مالک
    g یعنی Group
    o یعنی Other
    a یعنی همه

    مثلا برای حذف دسترسی نوشتن از سایر کاربران:

    chmod o-w file.txt

     

    مالک فایل رو چطور تغییر بدیم؟

    برای تغییر Owner یک فایل یا پوشه از chown استفاده میکنیم. مثلا:

    sudo chown ali file.txt

    حالا مالک فایل file.txt کاربر ali میشه.

    اگر بخواید هم مالک و هم گروه رو تغییر بدید:

    sudo chown ali:developers file.txt

    یعنی:

    مالک: ali
    گروه: developers

    برای تغییر مالک یک پوشه و تمام فایل‌های داخلش هم می‌تونی از R- استفاده کنی:

    sudo chown -R ali:developers /var/www/project

    البته در استفاده از R- باید دقت کنی، چون تغییر مالکیت اشتباه روی یک مسیر مهم می‌تونه باعث مشکل در سرویس‌ها بشه.

     

    دستور chgrp چیه؟

    اگر فقط بخوای گروه یک فایل رو تغییر بدید، می‌تونید از chgrp استفاده کنید. مثلا:

    sudo chgrp developers project.txt

    حالا گروه فایل project.txt به developers تغییر میکنه.

     

    تفاوت chmod و chown و chgrp

    برای اینکه این سه دستور رو با هم اشتباه نگیرید، خیلی ساده میتونیم این‌طوری بگیم:

    chmod = تغییر سطح دسترسی
    chown = تغییر مالک فایل
    chgrp = تغییر گروه فایل

    مثلا فرض کن این فایل رو داریم:

    rw-r—– 1 ali developers project.txt-

    در اینجا:

    -مالک فایل ali هست.
    -گروه فایل developers هست.
    -مالک می‌تونه فایل رو بخونه و تغییر بده.
    -اعضای گروه فقط می‌تونن فایل رو بخونن.
    -سایر کاربران هیچ دسترسی ندارن.

     

    مثال مدیریت دسترسی یک پروژه

    فرض کنید یک پروژه وب روی سرور دارید:

    /var/www/myproject

    دو توسعه‌دهنده به نام‌های ali و reza روی پروژه کار میکنن.

    اول یک گروه می‌سازیم:

    sudo groupadd developers

    حالا کاربران رو به گروه اضافه می‌کنیم:

    sudo usermod -aG developers ali
    sudo usermod -aG developers reza

    بعد مالکیت پوشه پروژه رو تنظیم می‌کنیم:

    sudo chown -R root:developers /var/www/myproject

    حالا می‌تونیم Permission مناسب رو تنظیم کنیم:

    sudo chmod -R 775 /var/www/myproject

    در این حالت:

    -مالک فایل دسترسی کامل داره.
    -اعضای گروه هم دسترسی کامل دارن.
    -سایر کاربران می‌تونن فایل‌ها رو بخونن و اجرا کنن.

    البته در یک سرور واقعی، Permission مناسب کاملا به نوع پروژه و سرویس‌هایی که روی سرور اجرا میشن بستگی داره و نباید بدون بررسی، روی همه مسیرها 777 قرار بدید.

     

    چرا نباید از chmod 777 زیاد استفاده کرد؟

    احتمالا این دستور رو زیاد دیدید:

    chmod -R 777 /var/www/project

    این دستور تقریبا به همه اجازه خواندن، نوشتن و اجرا میده.

    ممکنه در بعضی آموزش‌ها برای حل سریع یک مشکل پیشنهاد بشه، ولی در محیط واقعی سرور کار خطرناکیه.

    چون اگر یک فایل یا پوشه حساس Permission 777 داشته باشه، کاربران یا سرویس‌های بیشتری می‌تونن اون رو تغییر بدن.

    پس بهتره به‌جای اینکه سریع سراغ 777 بریم، اول ببینیم مشکل دقیقا از کجاست و چه Permissionی واقعا نیاز داریم.

     

    دستور sudo چه کاری انجام میده؟

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

    برای اجرای بعضی دستورات با دسترسی مدیریتی از sudo استفاده می‌کنیم. مثلا:

    sudo systemctl restart nginx یا sudo apt update

    برای اینکه یک کاربر بتونه از sudo استفاده کنه، معمولا باید عضو گروه مناسب مدیریتی باشه.

    در Ubuntu مثلا می‌تونی کاربر رو به گروه sudo اضافه کنی:

    sudo usermod -aG sudo ali

    بعد از ورود مجدد کاربر، می‌تونه دستورات مدیریتی رو با sudo اجرا کنه.

    در بعضی توزیع‌ها مثل CentOS و RHEL معمولاً گروه wheel برای این کار استفاده میشه:

    sudo usermod -aG wheel ali

     

    چطور کاربران لاگین‌شده را ببینیم؟

    برای دیدن کاربران فعلی که به سیستم وارد شده‌اند، می‌تونی از این دستور استفاده کنی:

    who یا w

    برای دیدن کاربری که در حال حاضر با اون وارد سیستم شدی:

    whoami

    مثلا اگر خروجی ali باشه، یعنی در حال حاضر با کاربر ali وارد سیستم هستی.

     

    چطور اطلاعات کاربران را ببینیم؟

    برای دیدن اطلاعات یک کاربر می‌تونی از id استفاده کنی:

    id ali

    خروجی ممکنه چیزی شبیه این باشه:

    uid=1001(ali) gid=1001(ali) groups=1001(ali),1002(developers)

    از این خروجی می‌فهمیم که کاربر ali عضو گروه developers هم هست.

    دستوراتی کاربردی جهت مدیریت کاربران و دسترسی‌ها

    در ادامه چند دستور مهم رو یکجا داشته باشیم:

    ساخت کاربر
    sudo adduser ali

    تعیین یا تغییر رمز عبور
    sudo passwd ali

    نمایش اطلاعات کاربر
    id ali

    نمایش گروه‌های کاربر
    groups ali

    ساخت گروه
    sudo groupadd developers

    اضافه کردن کاربر به گروه
    sudo usermod -aG developers ali

    تغییر مالک فایل
    sudo chown ali file.txt

    تغییر مالک و گروه
    sudo chown ali:developers file.txt

    غییر گروه
    sudo chgrp developers file.txt

    تغییر Permission
    chmod 644 file.txt

    نمایش Permission فایل‌ها
    ls -l

    نمایش کاربر فعلی
    whoami

     

    نکاتی درباره سطح دسترسی در لینوکس

    وقتی با Permissionها کار می‌کنید، همیشه سعی کنید حداقل دسترسی لازم رو به کاربران و سرویس‌ها بدید.

    یعنی اگر یک کاربر فقط باید فایل رو بخونه، نیازی نیست بهش دسترسی Write بدید.

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

    این روش که بهش اصل حداقل دسترسی یا Least Privilege گفته میشه، یکی از نکات مهم در امنیت سرورهاست.

     

    نتیجه‌گیری

    مدیریت کاربران و Permissionها یکی از پایه‌های مهم کار با لینوکسه. اگر با سرور لینوکسی، هاستینگ یا پشتیبانی سرور کار می‌کنی، باید حداقل با مفاهیمی مثل User، Group، Owner و سطح دسترسی در لینوکس آشنا باشی.

    با دستورهایی مثل `chmod` می‌تونی دسترسی فایل‌ها رو تغییر بدی، با `chown` مالک فایل رو عوض کنی و با Groupها هم مدیریت دسترسی چند کاربر رو ساده‌تر انجام بدی.

    مهم‌ترین نکته اینه که برای حل مشکلات دسترسی، سریع سراغ `chmod 777` نری. اول بررسی کن فایل متعلق به چه کاربریه، گروهش چیه و چه Permissionهایی داره. بعد دقیقاً همون دسترسی‌ای رو تنظیم کن که واقعاً نیاز داری.

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

     


    سوالات متداول

    سطح دسترسی در لینوکس چیست؟
    سطح دسترسی در لینوکس مشخص میکنه که مالک فایل، اعضای گروه و سایر کاربران چه کاری میتونن با یک فایل یا پوشه انجام بدن.
    این دسترسی‌ها معمولا شامل Read، Write و Execute هستن.

    تفاوت chmod و chown چیست؟
    chmod برای تغییر Permission یا سطح دسترسی استفاده میشه، اما chown برای تغییر مالک فایل یا پوشه کاربرد داره.

    Permission عددی 755 یعنی چی؟
    در Permission 755، مالک دسترسی کامل rwx داره و گروه و سایر کاربران میتونن فایل رو بخونن و اجرا کنن، ولی اجازه تغییر اون رو ندارن.

    Permission 644 برای چه فایل‌هایی مناسبه؟
    Permission 644 برای خیلی از فایل‌های معمولی مثل فایل‌های HTML، CSS و فایل‌های متنی مناسبه.
    مالک می‌تونه فایل رو بخونه و تغییر بده و بقیه فقط امکان خواندن دارن.

    آیا استفاده از chmod 777 کار درستی است؟
    معمولا نه. 777 دسترسی خیلی زیادی به کاربران میده و می‌تونه از نظر امنیتی خطرناک باشه. بهتره همیشه فقط دسترسی‌های مورد نیاز رو تنظیم کنید.

    چطور یک کاربر رو به گروه اضافه کنیم؟
    می‌تونید از دستور زیر استفاده کنید:
    sudo usermod -aG developers ali
    در این مثال، کاربر ali به گروه developers اضافه میشه.

    چطور بفهمیم یک فایل چه سطح دسترسی‌ای دارد؟
    با دستور زیر می‌تونید Permission فایل‌ها رو ببینید:
    ls -l

    چطور بفهمیم کاربر عضو چه گروه‌هایی هست؟
    کافیه دستور زیر رو اجرا کنی:
    groups username
    مثلا:
    groups ali

    چطور کاربر فعلی لینوکس را ببینیم؟
    با دستور whoami ، این دستور نام کاربری که در حال حاضر با اون وارد سیستم شدید رو نمایش میده.

  • نصب و پیکربندی Nginx در لینوکس Ubuntu و CentOS

    نصب و پیکربندی Nginx در لینوکس Ubuntu و CentOS

    اگه با سرور لینوکس کار کرده باشید، احتمالا اسم Nginx به گوشتون خورده.

    Nginx یکی از محبوب‌ترین وب‌سرورهای دنیاست که به خاطر سرعت بالا، مصرف کم منابع و عملکرد خوب در مدیریت تعداد زیادی درخواست، روی خیلی از سرورها استفاده میشه.

    در این مقاله از بلاگ رهام کلود قراره قدم‌به‌قدم با نصب nginx در لینوکس آشنا بشیم و ببینیم چطور میشه Nginx رو روی دو توزیع محبوب یعنی Ubuntu و CentOS نصب و پیکربندی کرد.

    نگران نباشید؛ قرار نیست وارد تنظیمات پیچیده بشیم. همه چیز رو ساده و مرحله‌به‌مرحله پیش میبریم؛ با ما همراه باشید.

     

    نصب nginx در لینوکس

     

    Nginx و کاربرد آن

    قبل از اینکه بریم سراغ نصب، بهتره خیلی کوتاه بدونیم Nginx اصلا چه کاری انجام میده.

    Nginx یک وب‌سرور قدرتمنده که میتونه درخواست‌های کاربران رو دریافت کنه و محتوای سایت رو به اون‌ها نمایش بده.

    البته کاربرد Nginx فقط به وب‌سرور محدود نمیشه و میشه ازش به عنوان Reverse Proxy ،Load Balancer و حتی برای مدیریت ترافیک بین چند سرور استفاده کرد.

    مثلا وقتی کاربر آدرس سایت شما رو داخل مرورگر وارد میکنه، درخواست به سرور ارسال میشه.

    Nginx این درخواست رو دریافت می‌کنه و فایل موردنظر مثل HTML، CSS، JavaScript یا تصاویر رو به کاربر برمیگردونه.

    یکی از دلایلی که خیلی‌ها سراغ Nginx میرن، عملکرد خوب اون در زمان دریافت درخواست‌های همزمان زیاده.

     

    پیش‌نیازهای نصب Nginx

    برای نصب Nginx در لینوکس، اول باید به یک سرور لینوکسی دسترسی داشته باشید.

    در این آموزش از دو سیستم‌عامل استفاده می‌کنیم؛ Ubuntu و CentOS.

    همچنین بهتره دسترسی Root داشته باشید یا کاربری که امکان اجرای دستورات با sudo رو داشته باشه.

    برای اتصال به سرور هم معمولا از SSH استفاده میشه. مثلا:

    ssh root@SERVER-IP

    (به جای SERVER-IP باید آی‌پی سرور خودتون رو وارد کنید.)

     

    نصب Nginx در Ubuntu

    اگه سرور شما Ubuntu هست، نصب Nginx خیلی ساده انجام میشه.

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

    sudo apt update

    بعد از اون Nginx رو نصب می‌کنیم:

    sudo apt install nginx -y

    چند لحظه صبر کنید تا نصب کامل بشه.

    حالا برای اینکه مطمئن بشیم Nginx درست نصب شده، وضعیت سرویس رو بررسی می‌کنیم:

    sudo systemctl status nginx

    اگر همه چیز درست باشه، باید وضعیت سرویس به شکل `active (running)` نمایش داده بشه.

     

    فعال کردن Nginx هنگام روشن شدن سرور

    بهتره کاری کنیم که Nginx بعد از ری‌استارت شدن سرور، خودش به صورت خودکار اجرا بشه.

    برای این کار دستور زیر رو وارد کنید:

    sudo systemctl enable nginx

    اگه بخوایم همین الان هم سرویس رو اجرا کنیم، می‌تونیم از دستور زیر استفاده کنیم:

    sudo systemctl start nginx

    برای ری‌استارت کردن Nginx هم:

    sudo systemctl restart nginx

    و اگر بخوایم موقتا سرویس رو متوقف کنیم:

    sudo systemctl stop nginx

     

    تست Nginx در Ubuntu

    حالا که Nginx نصب شده، مرورگر خودتون رو باز کنید و آی‌پی سرور رو وارد کنید. مثلا:

    http://SERVER-IP

    اگر نصب به درستی انجام شده باشه، صفحه پیش‌فرض Nginx رو مشاهده می‌کنید.

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

     

    نصب Nginx در CentOS

    حالا بریم سراغ CentOS.

    نکته مهم اینه که در نسخه‌های جدید CentOS Stream و توزیع‌های مشابه مثل AlmaLinux و Rocky Linux ممکنه روش نصب کمی متفاوت باشه.

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

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

    sudo dnf update -y

    بعد Nginx رو نصب می‌کنیم:

    sudo dnf install nginx -y

    بعد از نصب، سرویس Nginx رو اجرا می‌کنیم:

    sudo systemctl start nginx

    حالا وضعیت سرویس رو بررسی می‌کنیم:

    sudo systemctl status nginx

    اگر عبارت active (running) رو مشاهده کردید، یعنی Nginx با موفقیت اجرا شده.

    برای اینکه بعد از ری‌استارت سرور هم Nginx به صورت خودکار اجرا بشه، این دستور رو بزنید:

    sudo systemctl enable nginx

     

    باز کردن پورت HTTP و HTTPS در فایروال CentOS

    یکی از مشکلات رایجی که ممکنه بعد از نصب Nginx باهاش مواجه بشید، باز نبودن پورت‌های وب در فایرواله.

    اگه روی سرور شما `firewalld` فعال باشه، باید پورت‌های HTTP و HTTPS رو باز کنید.

    برای باز کردن پورت 80:

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

    برای باز کردن پورت 443:

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

    بعد از اون فایروال رو Reload کنید:

    sudo firewall-cmd –reload

    حالا دوباره آی‌پی سرور رو داخل مرورگر وارد کنید:

    http://SERVER-IP

    اگه همه چیز درست باشه، صفحه پیش‌فرض Nginx نمایش داده میشه.

     

    پیکربندی ساده Nginx

    حالا که نصب تموم شد، بریم سراغ بخش جذاب‌تر ماجرا؛ یعنی پیکربندی Nginx.

    فایل‌های تنظیمات Nginx بسته به سیستم‌عامل ممکنه کمی متفاوت باشن، اما فایل اصلی تنظیمات معمولاً اینجاست:

    /etc/nginx/nginx.conf

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

    sudo nano /etc/nginx/nginx.conf

    البته بهتره قبل از هر تغییری، از فایل تنظیمات بکاپ بگیرید:

    sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

    این کار باعث میشه اگر تنظیمات رو اشتباه کردید، بتونید به نسخه قبلی برگردید.

     

    ساخت یک سایت ساده با Nginx

    فرض کنید می‌خوایم یک سایت با دامنه زیر روی سرور راه‌اندازی کنیم:

    example.com

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

    sudo mkdir -p /var/www/example.com

    بعد مالکیت پوشه رو تنظیم می‌کنیم:

    sudo chown -R $USER:$USER /var/www/example.com

    حالا یک فایل HTML ساده می‌سازیم:

    nano /var/www/example.com/index.html

    داخل فایل میتونیم این کد رو قرار بدیم:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=”UTF-8″>
    <title>Example Website</title>
    </head>
    <body>
    <h1>سلام! سایت من با Nginx اجرا میشه.</h1>
    </body>
    </html>

    فایل رو ذخیره کنید.

     

    ساخت تنظیمات سایت در Nginx

    حالا باید به Nginx بگیم درخواست‌های مربوط به دامنه `example.com` رو از کجا سرو کنه.

    در Ubuntu می‌تونیم یک فایل تنظیمات برای سایت ایجاد کنیم:

    sudo nano /etc/nginx/sites-available/example.com

    و این تنظیمات رو داخلش قرار بدیم:

    server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
    try_files $uri $uri/ =404;
    }
    }

    در این تنظیمات، server_name مشخص می‌کنه این کانفیگ مربوط به چه دامنه‌ایه و root هم مسیر فایل‌های سایت رو مشخص میکنه.

    حالا باید کانفیگ سایت رو فعال کنیم:

    /sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled

    بعد بهتره تنظیمات Nginx رو تست کنیم:

    sudo nginx -t

    اگر پیام زیر یا مشابه اون رو دیدید، یعنی تنظیمات مشکلی نداره:

    syntax is ok
    test is successful

    حالا Nginx رو Reload می‌کنیم:

    sudo systemctl reload nginx

    اگر DNS دامنه هم به آی‌پی سرور اشاره کنه، با وارد کردن دامنه در مرورگر باید سایت خودتون رو ببینید.

     

    مثال راه‌اندازی سایت با Nginx

    فرض کنید یک سرور Ubuntu دارید و می‌خواید سایت mysite.com رو روی اون اجرا کنید.

    مراحل کلی به این شکله:

    گام اول: نصب Nginx
    sudo apt update
    sudo apt install nginx -y

     

    مرحله دوم: ساخت پوشه سایت
    sudo mkdir -p /var/www/mysite.com

     

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

    sudo nano /var/www/mysite.com/index.html

     

    مرحله چهارم: ساخت کانفیگ Nginx

    sudo nano /etc/nginx/sites-available/mysite.com

    تنظیمات:

    server {
    listen 80;
    server_name mysite.com www.mysite.com;

    root /var/www/mysite.com;
    index index.html;

    location / {
    try_files $uri $uri/ =404;
    }
    }

     

    مرحله پنجم: فعال کردن سایت

    sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/

     

    مرحله ششم: بررسی تنظیمات

    sudo nginx -t

     

    مرحله هفتم: اعمال تغییرات

    sudo systemctl reload nginx

    حالا اگر DNS دامنه mysite.com رو به آی‌پی سرور وصل کرده باشید، سایت شما باید از طریق مرورگر قابل دسترسی باشه.

     

     

    خطاهای رایج بعد از نصب Nginx

    گاهی ممکنه Nginx نصب بشه، اما سایت باز نشه. در این شرایط چند مورد رو بررسی کنید.

    -Nginx اجرا نیست
    وضعیت سرویس رو بررسی کنید:
    sudo systemctl status nginx
    اگر اجرا نبود:
    sudo systemctl start nginx

     

    -پورت 80 یا 443 بسته است
    فایروال سرور رو بررسی کنید و مطمئن بشید پورت‌های موردنیاز باز هستن.

     

    -DNS دامنه درست تنظیم نشده
    اگر دامنه دارید، رکورد A باید به آی‌پی سرور شما اشاره کنه. مثلا:
    example.com → SERVER-IP
    ممکنه بعد از تغییر DNS کمی زمان لازم باشه تا تغییرات در همه‌جا اعمال بشه.

     

    -کانفیگ Nginx اشتباه است

    قبل از Reload یا Restart کردن Nginx، همیشه کانفیگ رو تست کنید:
    sudo nginx -t
    اگر خطایی وجود داشته باشه، معمولاً همین دستور کمک می‌کنه محل مشکل رو پیدا کنید.

     

    -پورت 80 توسط سرویس دیگری استفاده شده
    گاهی Apache یا یک وب‌سرور دیگه روی پورت 80 در حال اجراست. برای بررسی می‌تونید از دستور زیر استفاده کنید:
    sudo ss -tulpn | grep :80
    اگر سرویس دیگری پورت 80 رو اشغال کرده باشه، باید مشخص کنید که می‌خواید از همون سرویس استفاده کنید یا Nginx رو جایگزینش کنید.

     

    جمع‌بندی

    همون‌طور که دیدید، نصب nginx در لینوکس کار پیچیده‌ای نیست و با چند دستور ساده میشه این وب‌سرور رو روی Ubuntu یا CentOS راه‌اندازی کرد.

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

    شما می‌تونید از Nginx برای میزبانی سایت‌های استاتیک استفاده کنید یا اون رو به عنوان Reverse Proxy جلوی سرویس‌هایی مثل Node.js، Python و PHP-FPM قرار بدید.

    اگر تازه وارد مدیریت سرور شدین، اول نصب و مدیریت سرویس Nginx رو یاد بگیرید و بعدش مباحثی مثل Virtual Host ،ReverseProxy ،SSL ،LoadBalancing و بهینه‌سازی Nginx.

    با همین مفاهیم پایه، کم‌کم میتونید Nginx رو برای پروژه‌های واقعی و سرورهای حرفه‌ای هم مدیریت کنید.

     


    سوالات متداول

    Nginx چیست؟
    Nginx یک وب‌سرور قدرتمنده که برای نمایش سایت‌ها، مدیریت درخواست‌های HTTP و HTTPS، Reverse Proxy و Load Balancing استفاده میشه.

     

    آیا نصب Nginx روی Ubuntu سخته؟
    نه. در Ubuntu معمولاً با دستور apt install nginx می‌تونید Nginx رو نصب کنید و بعد با systemctl سرویس رو مدیریت کنید.

     

    آیا میتوان Nginx رو روی CentOS نصب کرد؟
    بله. در سیستم‌هایی که از DNF استفاده می‌کنن، می‌تونید با دستور dnf install nginx اون رو نصب کنید.

     

    چطور بفهمیم Nginx درست نصب شده؟
    با اجرای دستور زیر می‌تونید وضعیت سرویس رو بررسی کنید:
    sudo systemctl status nginx
    اگر وضعیت active (running) باشه، یعنی سرویس در حال اجراست. برای تست تنظیمات Nginx از دستور زیر استفاده کنید:
    sudo nginx -t
    این دستور قبل از Reload یا Restart کردن، صحت سینتکس فایل‌های تنظیمات رو بررسی میکنه.

     

    فایل تنظیمات اصلی Nginx کجاس؟
    فایل اصلی تنظیمات معمولا در مسیر زیر قرار داره:
    /etc/nginx/nginx.conf
    البته تنظیمات مربوط به سایت‌ها ممکنه در فایل‌ها و پوشه‌های جداگانه قرار گرفته باشن.

     

    آیا Nginx از Apache بهتره؟
    نمیشه گفت همیشه Nginx بهتره. انتخاب بین Nginx و Apache به نوع پروژه و نیاز شما بستگی داره.
    Nginx معمولا برای مدیریت تعداد زیاد درخواست و استفاده به عنوان Reverse Proxy گزینه خیلی خوبیه، اما Apache هم امکانات و انعطاف‌پذیری خاص خودش رو داره.

     

    چرا بعد از نصب Nginx سایت باز نمیشه؟
    دلایل مختلفی می‌تونه داشته باشه؛ از جمله اجرا نبودن Nginx، بسته بودن پورت 80، تنظیم نبودن DNS، اشتباه بودن کانفیگ یا اشغال پورت توسط سرویس دیگه.
    اولین کار اینه که وضعیت Nginx و نتیجه nginx -t رو بررسی کنید.

     

  • آموزش کامل دستورات لینوکس برای مدیران سرور (از مبتدی تا پیشرفته)

    آموزش کامل دستورات لینوکس برای مدیران سرور (از مبتدی تا پیشرفته)

    در این مقاله از رهام کلود، می‌خوایم مهم‌ترین دستورات لینوکس برای مدیریت سرور رو از پایه و با زبان ساده یاد بگیریم.

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

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

    پس با ما تا انتهای این مقاله همراه باشید.

     

     

    ترمینال لینوکس

    ترمینال محیطیه که داخلش دستور می‌نویسیم و به سرور می‌گیم چه کاری انجام بده.

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

    مثلا وقتی دستور زیر رو وارد می‌کنید:

    pwd

    سرور مسیر پوشه‌ای که الان داخلش هستید رو نشون میده.

    در بیشتر سرورها، اتصال از طریق SSH انجام میشه. برای نمونه، از ویندوز یا لینوکس می‌تونید با دستور زیر به سرور وصل بشید:

    ssh root@192.0.6.43

    به جای IP نمونه باید آدرس واقعی سرور خودتون رو بنویسید. بعد از وارد کردن رمز عبور، وارد محیط خط فرمان سرور میشید.

     

     

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

    اولین چیزی که باید یاد بگیرید، جابه‌جایی بین مسیرهاست. در لینوکس همه چیز از مسیر اصلی “/” شروع میشه.

    برای مشاهده مسیر فعلی:
    pwd
    این دستور میگه که الان دقیقا داخل کدوم پوشه هستید.

    برای دیدن فایل‌ها و پوشه‌ها:
    ls

    نمایش جزئیات بیشتر:
    ls -l

    دیدن فایل‌های مخفی:
    ls -la

    نکته: فایل‌های مخفی در لینوکس معمولا با نقطه شروع میشن، مثل “bashrc.”.

    رفتن به یک پوشه:
    cd /var/www

    برگشتن به پوشه قبلی:
    .. cd

    برای برگشتن به پوشه اصلی کاربر:
    ~ cd

    برای برگشت سریع به مسیر قبلی که داخلش بودید:
    – cd

    این چند دستور ساده، پایه کار با بیشتر دستورات لینوکس هستن.

     

    ساخت فایل و پوشه

    برای ساخت یک پوشه جدید از `mkdir` استفاده می‌کنیم:
    mkdir backups

    اگر بخواید چند پوشه تو در تو رو یک‌جا بسازید:
    mkdir -p /var/backups/website/daily

    ساخت یک فایل خالی:
    touch test.txt

    نکته: این دستور فایل test.txt رو می‌سازه. اگر فایل از قبل وجود داشته باشه، محتوای اون رو پاک نمی‌کنه.

     

    کپی، انتقال و تغییر نام فایل‌ها

    برای کپی کردن یک فایل از دستور cp استفاده می‌کنیم:
    cp config.php config-backup.php

    کپی کردن یک پوشه همراه با تمام محتویاتش:

    cp -r website website-backup

    انتقال فایل:
    /mv file.txt /var/backups

    دستور mv برای تغییر نام هم استفاده میشه:
    mv old-name.txt new-name.txt
    یعنی اگه مقصد یک نام جدید باشه، فایل تغییر نام پیدا می‌کنه و اگر مقصد یک پوشه باشه، فایل به اون پوشه منتقل میشه.

     

    حذف فایل و پوشه (با احتیاط کامل انجام بشه)

    برای حذف یک فایل:
    rm file.txt

    حذف یک پوشه خالی :
    rmdir empty-folder

    حذف پوشه همراه با تمام فایل‌های داخلش:
    rm -r folder-name

    گاهی دستور زیر رو هم می‌بینید:
    rm -rf folder-name

    گزینه f- یعنی بدون پرسیدن تایید، حذف انجام بشه.
    این دستور قدرت زیادی داره و اگر مسیر رو اشتباه وارد بشه، ممکنه اطلاعات مهم سرور پاک بشه. قبل از اجرای اون، حتما مسیر فعلی و نام پوشه رو خوب بررسی کنید.

     

    مشاهده محتوای فایل‌ها

    برای دیدن کل محتوای یک فایل کوچک:
    cat file.txt

    اگر فایل طولانیه ، بهتره از less استفاده کنید:
    less /var/log/messages
    با کلیدهای جهت‌دار می‌تونید جابه‌جا بشید و با زدن q خارج بشید.

    دیدن چند خط اول فایل:
    head file.txt

    ۲۰ خط اول:
    head -n 20 file.txt

    و دیدن چند خط آخر:
    tail file.txt

    مشاهده لحظه‌ای تغییرات یک فایل لاگ:
    tail -f /var/log/messages
    این دستور برای مدیران سرور خیلی کاربردیه، چون می‌تونید همزمان با رخ دادن یک مشکل، پیام‌های جدید لاگ رو ببینید.
    برای خروج از حالت دنبال کردن فایل، کلیدهای Ctrl + C رو بزنید.

     

    ویرایش فایل‌ها در لینوکس

    یکی از ویرایشگرهای ساده لینوکس nano هست:
    nano /etc/hosts

     

    نکته: بعد از تغییر فایل، برای ذخیره کردن Ctrl + O و برای خروج Ctrl + X رو بزنید.

     

    ویرایشگر معروف دیگه vi یا vim هست:
    vi /etc/hosts

    برای شروع ویرایش داخل vi، کلید i رو بزنید. بعد از انجام تغییرات، کلید Esc رو بزنید و برای ذخیره و خروج بنویسید:
    wq:
    و برای خروج بدون ذخیره تغییرات:
    !q:

    اگر تازه‌کار هستید ، معمولا nano راحت‌تره. ولی یاد گرفتن چند فرمان اصلی vi برای مدیریت سرور خیلی مفیده، چون تقریبا روی بیشتر سرورها وجود داره.

     

    پیدا کردن فایل‌ها و پوشه‌ها

    برای پیدا کردن یک فایل در کل سرور می‌تونید از find استفاده کنید:
    find / -name “wp-config.php” 2>/dev/null
    در این دستور، جست‌وجو از مسیر اصلی سرور شروع میشه. بخش 2</dev/null هم خطاهای دسترسی رو مخفی می‌کنه تا خروجی شلوغ نشه.

    برای جست‌وجوی فایل‌ها داخل یک مسیر مشخص:
    “find /var/www -name “*.php
    این دستور تمام فایل‌هایی که پسوند PHP دارن رو نمایش میده.

    جست‌وجوی متن داخل فایل‌ها از grep استفاده می‌کنیم:
    grep “error” application.log

    جست‌وجوی یک عبارت داخل تمام فایل‌های یک پوشه:
    /grep -R “database” /var/www

    اینکه بزرگی و کوچکی حروف مهم نباشه :
    /grep -Ri “error” /var/log

     

    بررسی فضای دیسک سرور

    برای مشاهده وضعیت کلی دیسک:
    df -h
    گزینه -h باعث میشه حجم‌ها به شکل قابل فهم، مثلا گیگابایت و مگابایت نمایش داده بشن.

    اگر فضای دیسک پر شده، می‌تونید حجم یک پوشه رو بررسی کنید:
    du -sh /var/log

    دیدن حجم پوشه‌های داخل یک مسیر:
    du -sh /var/* 2>/dev/null

    مرتب کردن پوشه‌ها بر اساس حجم:
    du -sh /var/* 2>/dev/null | sort -h
    این دستور کمک می‌کنه سریع‌تر بفهمید کدوم پوشه فضای بیشتری مصرف کرده.

     

    بررسی RAM و پردازنده

    برای مشاهده مقدار حافظه مصرف‌شده و آزاد:
    free -h
    در لینوکس ممکنه مقدار حافظه آزاد کم به نظر برسه، چون سیستم از بخشی از RAM برای کش استفاده می‌کنه.
    معمولا ستون available معیار بهتری برای بررسی حافظه قابل استفاده است.

    برای مشاهده پردازش‌های در حال اجرا:
    top

    ابزار خواناتری هم به نام htop وجود داره:
    htop
    اگر نصب نبود، در اوبونتو و دبیان میتونید نصبش کنید:
    apt install htop -y
    در AlmaLinux ،Rocky Linux یا CentOS:
    dnf install htop -y

    داخل top یا htop میتونید ببینید کدوم برنامه بیشتر از CPU یا RAM استفاده میکنه.

     

    مشاهده و متوقف کردن پردازش‌ها

    برای دیدن پردازش‌های مربوط به یک برنامه:
    ps aux | grep nginx

    هر پردازش یک شماره به نام PID داره . برای متوقف کردن عادی یک پردازش:
    kill 1234

    اگر پردازش متوقف نشد ، می‌شه با اجبار بستش:
    kill -9 1234

    نکته: استفاده از kill -9 باید آخرین گزینه باشه، چون برنامه فرصت ذخیره اطلاعات یا بستن درست فایل‌ها رو پیدا نمیکنه.

     

    برای بستن پردازش‌ها بر اساس نام:
    pkill nginx
    قبل از اجرای این دستور مطمئن بشید که واقعاً قصد متوقف کردن تمام پردازش‌های اون برنامه رو دارید.

     

    مدیریت سرویس‌ها با systemctl

    در بیشتر توزیع‌های جدید لینوکس ، سرویس‌ها با systemctl مدیریت می‌شن .

    برای مشاهده وضعیت یک سرویس:
    systemctl status nginx

    راه‌اندازی سرویس:
    systemctl start nginx

    توقف سرویس:
    systemctl stop nginx

    ری‌استارت کردن:
    systemctl restart nginx

    اگر فقط فایل تنظیمات تغییر کرده و نمی‌خواید سرویس کامل قطع و وصل بشه:
    systemctl reload nginx

    اینکه سرویس بعد از روشن شدن سرور خودکار اجرا بشه:
    systemctl enable nginx

    غیرفعال کردن اجرای خودکار:
    systemctl disable nginx

    یکی از اشتباهات رایج اینه که بعد تغییر تنظیمات، سرویس بدون بررسی ری-استارت بشه.
    مثلا، قبل ری-استارت Nginx بهتره تنظیمات رو تست کنید:
    nginx -t
    اگر پیام موفقیت دیدید، بعد سرویس رو ری‌استارت کنید.

     

    خواندن لاگ‌های سیستم

    وقتی یک سرویس اجرا نمیشه، فقط ری-استارت کردن اون کافی نیست. باید ببینید چرا مشکل ایجاد شده.

    برای دیدن لاگ یک سرویس:
    journalctl -u nginx

    دیدن آخرین پیام‌ها:
    journalctl -u nginx -n 50

    مشاهده زنده لاگ‌ها:
    journalctl -u nginx -f

    دیدن خطاهای مهم از زمان روشن شدن سرور:
    journalctl -p err -b

    این دستورات مخصوصا وقتی یک سرویس در وضعیت failed قرار گرفته، خیلی کاربردی هستن.

     

    بررسی IP و وضعیت شبکه

    برای مشاهده IPهای سرور:
    ip addr

    نسخه کوتاه‌تر:
    ip a

    دیدن مسیر پیش‌فرض و Gateway:
    ip route

    تست ارتباط با یک IP یا دامنه:
    ping 8.8.8.8 یا ping google.com

    اگر IP پینگ میشه ولی دامنه نه، احتمالا مشکل از DNS سروره.

    متوقف کردن پینگ:
    Ctrl + C

    و برای دیدن مسیر عبور بسته‌ها تا مقصد:
    traceroute google.com

    نکته: ممکنه traceroute به‌صورت پیش‌فرض نصب نباشه.

     

     

    بررسی پورت‌های باز و برنامه‌های در حال گوش دادن

    برای دیدن پورت‌هایی که روی سرور در حال استفاده هستن:
    ss -tulpn

    مثلا برای بررسی پورت 80:
    ‘ss -tulpn | grep ‘:80

    و برای بررسی پورت SSH:
    ‘ss -tulpn | grep ‘:22
    این دستور به شما میگه چه برنامه‌ای روی یک پورت مشخص در حال گوش دادنه.
    مثلا اگه سایت باز نمیشه، با بررسی پورت‌های 80 و 443 میتونید مطمئن بشید وب‌سرور اجرا شده یا نه.

     

    دانلود فایل با wget و curl

    برای دانلود یک فایل:
    wget https://example.com/file.zip

    مشخص کردن نام فایل خروجی:
    wget -O backup.zip https://example.com/file.zip

    با curl هم می‌تونید فایل دانلود کنید:
    curl -O https://example.com/file.zip

    بررسی پاسخ یک سایت بدون دانلود کامل محتوا:
    curl -I https://example.com
    این دستور اطلاعاتی مثل کد پاسخ، نوع سرور و ریدایرکت‌ها رو نمایش میده.

    و برای مشاهده محتوای پاسخ :
    curl https://example.com

     

    فشرده‌سازی و استخراج فایل‌ها

    برای ساخت فایل فشرده tar.gz:
    tar -czf backup.tar.gz /var/www/html

    استخراج اون:
    tar -xzf backup.tar.gz

    فشرده کردن با ZIP:
    zip -r website.zip website/

    و برای استخراج ZIP:
    unzip website.zip

    این دستورات برای گرفتن بکاپ، انتقال سایت و نگهداری فایل‌ها خیلی کاربردی هستن.

     

    مدیریت کاربران لینوکس

    برای ساخت یک کاربر جدید:
    adduser ali

    در بعضی توزیع‌ها می‌تونید از این دستور هم استفاده کنید:
    useradd -m ali

    تعیین یا تغییر رمز عبور:
    passwd ali

    اضافه کردن کاربر به گروه مدیریتی در اوبونتو:
    usermod -aG sudo ali

    در AlmaLinux و Rocky Linux معمولاً گروه مدیریتی wheel هست:
    usermod -aG wheel ali

    دیدن اطلاعات یک کاربر:
    id ali

    حذف کاربر:
    userdel ali

    و برای حذف کاربر همراه با پوشه خانگی اون:
    userdel -r ali

    قبل از حذف کاربر ، مطمئن بشید فایل مهمی داخل پوشه شخصی اون باقی نمونده.

     

    مالکیت و سطح دسترسی فایل‌ها

    هر فایل در لینوکس یک مالک ، یک گروه و یک سطح دسترسی داره.
    برای مشاهده این اطلاعات:
    ls -l

    تغییر مالک فایل:
    chown user:user file.txt

    تغییر مالکیت یک پوشه و تمام محتویاتش:
    chown -R user:user /var/www/example

    و تغییر سطح دسترسی:
    chmod 644 file.txt

    و برای پوشه‌ها معمولاً سطح دسترسی زیر رایجه:
    chmod 755 folder

    عدد 644 معمولا یعنی مالک اجازه خواندن و نوشتن داره و بقیه فقط می‌تونن فایل رو بخونن. عدد 755 هم برای پوشه‌ها اجازه ورود و خواندن رو فراهم میکنه.

    از دادن دسترسی 777 بدون دلیل خودداری کنید. این دسترسی به همه اجازه نوشتن میده و میتونه یک خطر امنیتی جدی ایجاد کنه .

     

    نصب و حذف برنامه‌ها

    در اوبونتو و دبیان ، برای به‌روزرسانی لیست بسته‌ها :
    apt update

    برای ارتقای برنامه‌ها :
    apt upgrade -y

    نصب یک برنامه :
    apt install nginx -y

    حذف برنامه :
    apt remove nginx -y

    در AlmaLinux ، Rocky Linux و سیستم‌های مشابه :
    dnf update -y

    برای نصب :
    dnf install nginx -y

    و برای حذف :
    dnf remove nginx -y

     

    نکته: قبل از انجام آپدیت گسترده روی سرورهای مهم، بهتره بکاپ داشته باشید و تغییرات بسته‌ها رو بررسی کنید.

     

    اتصال و انتقال فایل با SSH و SCP

    برای اتصال به سرور:
    ssh root@192.0.2.10

    اگر SSH روی پورت متفاوتی اجرا میشه:
    ssh -p 2222 root@192.0.2.10

    انتقال یک فایل از سیستم خودتون به سرور:
    scp backup.zip root@192.0.2.10:/root/

    دانلود یک فایل از سرور :
    scp root@192.0.2.10:/root/backup.zip .

    برای انتقال یک پوشه کامل:
    scp -r website root@192.0.2.10:/var/www/

    نکته: نقطه “.” در لینوکس یعنی مسیر فعلی.

     

    انتقال حرفه‌ای فایل‌ها با rsync

    برای فایل‌ها و پوشه‌های بزرگ ، rsync معمولا از scp کاربردی‌تره، چون فقط بخش‌های تغییرکرده رو منتقل میکنه.

    rsync -avz website/ root@192.0.2.10:/var/www/website/

    گزینه a- ساختار و دسترسی فایل‌ها رو تا حد زیادی حفظ می‌کنه ، v- جزئیات رو نمایش می‌ده و -z اطلاعات رو هنگام انتقال فشرده میکنه.

    و برای دیدن نتیجه دستور بدون انتقال:
    rsync -avzn website/ root@192.0.2.10:/var/www/website/

    گزینه n- یک اجرای آزمایشی انجام میده. این روش قبل از انتقال یا حذف فایل‌های مهم خیلی مفیده.

     

    ترکیب دستورات با Pipe

    علامت | خروجی یک دستور رو به دستور بعدی می‌فرسته. مثلا:
    ps aux | grep mysql
    دستور اول تمام پردازش‌ها رو نمایش می‌ده و دستور دوم فقط خط‌هایی که شامل `mysql` هستن جدا می‌کنه .

    مثال دیگه:
    du -sh /var/* 2>/dev/null | sort -h
    اینجا حجم پوشه‌ها گرفته میشه و بعد بر اساس اندازه مرتب میشن.

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

     

    ذخیره خروجی دستورات داخل فایل

    برای ذخیره خروجی داخل یک فایل:
    df -h > disk-report.txt

    اگر فایل وجود داشته باشه، محتوای قبلی اون جایگزین میشه.

    اضافه کردن خروجی به انتهای فایل:
    date >> disk-report.txt

    ذخیره خطاها داخل یک فایل:
    command 2> errors.txt

    و برای ذخیره هم خروجی عادی و هم خطاها:
    command > output.txt 2>&1

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

     

    اجرای چند دستور پشت سر هم

    برای اجرای دستور دوم فقط وقتی دستور اول موفق بوده:
    apt update && apt upgrade -y

    اجرای دستور دوم در هر صورت:
    command1 ; command2

    و برای اجرای دستور دوم فقط وقتی دستور اول خطا داده:
    command1 || command2
    مثلا:
    systemctl restart nginx || systemctl status nginx

    اگر ری‌استارت Nginx ناموفق باشه، وضعیت سرویس نمایش داده میشه.

     

    زمان‌بندی کارها با Cron

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

    برای ویرایش برنامه‌های زمان‌بندی‌شده کاربر فعلی:
    crontab -e

    و برای دیدن Cronهای ثبت‌شده:
    crontab -l

    نمونه اجرای یک اسکریپت هر روز ساعت 3 صبح:
    0 3 * * * /root/backup.sh

    اگر اسکریپت اجرا نمیشه، اول مطمئن بشید مسیر فایل کامله، دسترسی اجرا داره و دستورات داخل اسکریپت هم با مسیر کامل نوشته شدن.

     

    بررسی اطلاعات سیستم

    برای مشاهده نام سیستم:
    hostname

    دیدن اطلاعات کامل‌تر سیستم عامل و کرنل:
    uname -a

    نسخه سیستم عامل:
    cat /etc/os-release

    مدت‌زمان روشن بودن سرور و مقدار Load:
    uptime

    و دیدن تاریخ و ساعت:
    date

    و برای بررسی تنظیمات زمانی سرور:
    timedatectl

     

    مثالی برای درک مدیریت لینوکس

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

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

    لازم نیست از روز اول تمام جزئیات ساختمان رو حفظ باشید؛ مهم اینه بدونید برای هر مشکل باید سراغ کدوم ابزار برید و قبل از انجام تغییرهای حساس، وضعیت فعلی رو بررسی کنید.

     

    فرض کنید کاربران میگن سایت باز نمیشه. بهتره بدون برنامه شروع به ری‌استارت کردن همه چیز نکنید.

    اول بررسی کنید سرور روشن و قابل دسترسی هست یا نه:
    ping 192.0.2.10

    بعد ببینید وب‌سرور اجرا شده یا نه:
    systemctl status nginx

    پورت‌های سایت رو بررسی کنید:
    ss -tulpn | grep -E ‘:80|:443’

    وضعیت دیسک رو هم ببینید:
    df -h

    اگر سرویس خطا داشت، آخرین لاگ‌ها رو بررسی کنید:
    journalctl -u nginx -n 50

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

     

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

    قبل از اجرای دستورهایی که فایل حذف میکنن، دسترسی تغییر میدن یا سرویس مهمی رو متوقف میکنن، مسیر و نام فایل رو دوباره بخونید.

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

    برای تغییر فایل‌های مهم، بهتره اول یک نسخه پشتیبان بسازید:
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

    وقتی از راه دور تنظیمات شبکه یا SSH رو تغییر میدید، اتصال فعلی رو نبندید تا مطمئن بشید تنظیم جدید کار میکنه.

    یک اشتباه کوچک در این قسمت ممکنه دسترسی شما به سرور رو قطع کنه.

     

    نتیجه‌گیری

    یاد گرفتن دستورات لینوکس به معنی حفظ کردن صدها فرمان نیست؛ چیزی که بیشتر اهمیت داره، شناخت گروه‌های اصلی دستورات و استفاده درست از اون‌هاست.

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

    برای شروع، دستورهایی مثل cd ،ls ،cp ،mv ،df ،free ،systemctl و journalctl رو تمرین کنید.

    بعد کم‌کم سراغ ابزارهایی مثل grep ،find ،rsync ،Pipe و Cron برید.

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

     

     


    سوالات متداول

    برای یادگیری دستورات لینوکس از کجا شروع کنیم؟
    بهتره اول جابه‌جایی بین مسیرها، مشاهده فایل‌ها، کپی، انتقال و ویرایش فایل رو یاد بگیرید. بعد از اون سراغ بررسی منابع، مدیریت سرویس‌ها و خواندن لاگ‌ها برید.

    آیا همه دستورات روی اوبونتو و AlmaLinux یکسان هستن؟
    بیشتر فرمان‌های پایه مثل ls ،cd ،cp ،systemctl و journalctl یکسان هستن.
    تفاوت اصلی معمولا در مدیریت بسته‌هاست؛ اوبونتو از apt و AlmaLinux از dnf استفاده میکنه.

    چطور بفهمیم یک دستور چه کاری انجام میده؟
    می‌تونید قبل از اجرا از man یا گزینه help– استفاده کنید:
    man command یا command –help

    آیا کار کردن با کاربر root خطرناکه؟
    اگر دستور اشتباهی اجرا بشه، کاربر root محدودیتی نداره و می‌تونه فایل‌های مهم سیستم رو حذف یا تغییر بده.
    بهتره برای کارهای روزمره از یک کاربر معمولی با دسترسی sudo استفاده کنید.

    اگر یک سرویس اجرا نشد، اولین کار چیه؟
    اول با دستور زیر وضعیت سرویس رو ببینید:
    systemctl status service-name
    بعد آخرین لاگ‌های اون رو با این دستور بررسی کنید:
    journalctl -u service-name -n 50

    چطور بفهمیم فضای سرور چرا پر شده؟
    ابتدا با df -h پارتیشن پر رو پیدا کنید. بعد با du حجم پوشه‌ها رو بررسی کنید:
    du -sh /var/* 2>/dev/null | sort -h

    آیا میشه دستورها رو قبل از اجرای واقعی آزمایش کرد؟
    بعضی ابزارها گزینه آزمایشی دارن. مثلا در rsync می‌تونید از -n استفاده کنید.
    برای دستورهای حذف فایل معمولا حالت آزمایشی وجود نداره، پس باید مسیر رو با ls و pwd بررسی کنید.

    مهم‌ترین دستور برای پیدا کردن خطای سرور چیه؟
    یک دستور ثابت برای همه مشکلات وجود نداره، اما systemctl status و journalctl معمولا بهترین نقطه شروع برای بررسی سرویس‌های خراب هستن.