My folder vip
76 subscribers
202 photos
82 videos
622 files
499 links
آرشیو یادگیری هک/امنیت

اینجا فولدر شخصی من برای یادگیری و ثبت مطالب Linux، Networking و Cyber Security است.

🔐 LPIC | Network+ | CEH | SANS
🐧 Linux & System Administration
🌐 Networking & Troubleshooting
💻 Python & Security Tools
🧪 Labs | CTF | Prac
Download Telegram
فصل ششم — قسمت شصت‌ویکم 🐧
نصب و پیکربندی محیط GUI

——————-
🖥
اول GUI چیست؟
GUI = Graphical User Interface
یعنی محیط گرافیکی که با ماوس، پنجره، آیکون و منو با لینوکس کار می‌کنیم.
مثلاً به‌جای:
mkdir test

در GUI می‌توانی با کلیک راست → New Folder پوشه بسازی.

—————-

2️⃣ Window Manager چیست؟
اینجا یک لایه پایین‌تر داریم.
Window Manager مسئول مدیریت پنجره‌هاست؛ مثلاً:
پنجره را کجا قرار بده؟
پنجره را Maximize کن
پنجره را Minimize کن
پنجره را ببند

برای محیط‌های مختلف:
GNOME    → Mutter
KDE → KWin
Cinnamon → Muffin
MATE → Marco

Metacity هم Window Manager قدیمی GNOME بود.
پس خیلی ساده:
Desktop Environment
↓
Window Manager
↓
پنجره‌ها


——————

3️⃣ XFree86 چیست؟
XFree86 یکی از پیاده‌سازی‌های قدیمی سیستم X Window System بود.
در گذشته وظیفه‌اش فراهم کردن زیرساخت نمایش گرافیکی در سیستم‌های Unix/Linux بود.
بعداً X.Org جایگزین اصلی آن شد.

—————

4️⃣ X.Org چیست؟
X.Org Server یکی از پیاده‌سازی‌های سیستم X Window System است.
به زبان ساده:
برنامه‌ها می‌خواهند چیزی روی مانیتور نمایش دهند؛ X.Org واسطه‌ای بین برنامه‌ها، ورودی‌ها و سخت‌افزار گرافیکی است.

ساختار ساده:
Application
↓
Desktop Environment
↓
X.Org
↓
GPU / Display


—————

5️⃣ Wayland چیست؟
Wayland یک معماری جدیدتر برای سیستم نمایش گرافیکی است که برای بسیاری از سناریوها جایگزین X11/X.Org می‌شود.
ساختار آن ساده‌تر است:
Application
↓
Wayland Compositor
↓
Display

مثلاً در GNOME، Mutter می‌تواند نقش compositor مربوط به Wayland را هم انجام دهد.
🧠 پس تفاوت اصلی را این‌طور حفظ کن:
قدیمی‌تر:
XFree86 → X.Org / X11

جدیدتر:
Wayland



—————-


6️⃣ نصب GUI در Red Hat / Fedora
اگر از سیستم‌های مبتنی بر Red Hat استفاده می‌کنی، ابتدا می‌توانی گروه‌های نرم‌افزاری را ببینی:
dnf group list

مثلاً برای نصب محیط GUI:
dnf group install "Server with GUI"

یا در بعضی نسخه‌ها:
dnf group install "Workstation"

⚠️ اسم دقیق Group ممکن است بین نسخه‌های Fedora/RHEL/AlmaLinux متفاوت باشد؛ اول با dnf group list بررسی کن.

—————

فعال کردن GUI هنگام Boot
بعد از نصب:
systemctl set-default graphical.target

بعد:
reboot

حالا سیستم به‌جای محیط متنی، به محیط گرافیکی می‌رود.
برای دیدن Target فعلی:
systemctl get-default

اگر دیدی:
graphical.target

یعنی GUI به‌عنوان حالت پیش‌فرض انتخاب شده.

——————

7️⃣ نصب GUI در Debian / Ubuntu
اول معمولاً Repositoryها باید درست باشند.
برای X.Org:
apt install xorg

برای GNOME:
apt install gnome

یا بسته‌های دسکتاپ مناسب نسخه تو، مثلاً:
apt install ubuntu-desktop

برای X11 authentication هم:
apt install xauth

نکته مهم درباره دستورهای نوشته‌شده
این‌هایی که نوشتی احتمالاً اشتباه تایپی دارند:
apt-get install unmtu-desktop
apt-get install gnome-desktop-environmaent

این اسم‌ها به این شکل صحیح نیستند.
مثلاً:
apt install ubuntu-desktop

و برای GNOME بسته/Task دقیق را متناسب با توزیع بررسی می‌کنیم.

———————-
👏1
فصل ششم — قسمت شصت و دوم 🐧
قابلیتهای استاندارد در محیط های gui
————————————

حالا که فهمیدیم GUI چیست، ببینیم یک Desktop Environment از چه قسمت‌هایی تشکیل شده.
————-
🖥 1. Desktop Settings
بخش تنظیمات دسکتاپ.
مثلاً:
Settings
├── Display
├── Network
├── Sound
├── Keyboard
├── Mouse
└── Background

یعنی جایی که ظاهر و رفتار سیستم را تنظیم می‌کنیم.

———————

🖥 2. Display Manager
قبل از ورود به دسکتاپ، صفحه Login را نمایش می‌دهد.
مثلاً:
Username
Password
↓
Login
↓
Desktop

نمونه‌ها:
GDM → معمولاً GNOME
SDDM → معمولاً KDE
LightDM → سبک و قابل استفاده با محیط‌های مختلف
🧠 Display Manager با Window Manager فرق دارد.
Display Manager → ورود به سیستم
Window Manager → مدیریت پنجره‌ها

——————-

📁 3. File Manager
برای مدیریت فایل و پوشه‌ها.
مثلاً:
Home
├── Documents
├── Downloads
├── Pictures
└── Videos

نمونه‌ها:
GNOME → Files / Nautilus
KDE → Dolphin
XFCE → Thunar
Cinnamon → Nemo
MATE → Caja

—————-

🔹 4. Icon
آیکون‌ها میانبرهای گرافیکی برای برنامه‌ها، فایل‌ها و پوشه‌ها هستند.
مثلاً:
🗑 Trash
📁 Home
🌐 Firefox


———————-

🧩 5. Widget
ابزارهای کوچک روی دسکتاپ یا پنل.
مثلاً:
CPU: 20%
RAM: 45%
Weather: 25°C
Clock: 18:40


—————-

⭐️ 6. Favorite Bar / Dock
برنامه‌های مورد علاقه را سریع در اختیارمان می‌گذارد.
مثلاً در GNOME می‌توانی برنامه‌های پرکاربرد را در Dash/Dock قرار بدهی.
——————-

🚀 7. Launcher
برای اجرای سریع برنامه‌ها.
مثلاً:
Super
↓
Firefox

یا جستجو می‌کنی:
terminal

و Terminal را اجرا می‌کنی.

——————-

📋 8. Menu
منوی برنامه‌ها.
مثلاً:
Applications
├── Internet
├── Office
├── System
├── Utilities
└── Settings



————-

📊 9. Panel
نوارهایی در بالا یا پایین صفحه که معمولاً اطلاعات و ابزارهای مختلف را نشان می‌دهند.
مثلاً:
┌──────────────────────────────────────┐
│ Applications Network 🔊 🔋 18:40│
└──────────────────────────────────────┘


—————-

🪟 10. Window Manager
مسئول مدیریت پنجره‌هاست.
مثلاً:
باز کردن پنجره
بستن
Minimize
Maximize
جابجایی
Resize


———————

🟠 GNOME
GNOME ظاهر مدرن و ساده‌ای دارد.
7
ویژگی مهم:
ساده و تمیز
Activities Overview
جستجوی سریع
مناسب لپ‌تاپ و دسکتاپ
قابلیت گسترش با Extensions

🔵 KDE Plasma
6
KDE خیلی قابل تنظیم است.
مثلاً می‌توانی:
پنل را جابه‌جا کنی
ظاهر را تغییر بدهی
Widget اضافه کنی
رفتار پنجره‌ها را تغییر بدهی
🧠 اگر GNOME را ساده و مینیمال بدانیم، KDE بیشتر قابل شخصی‌سازی است.


🟢 Cinnamon
6
ظاهرش برای کسی که از Windows آمده بسیار آشناست:
┌─────────────────────────┐
│ │
│ Desktop │
│ │
├─────────────────────────┤
│ Menu Apps Clock │
└─────────────────────────┘




🟡 XFCE
7
سبک و کم‌مصرف است.
برای:
سیستم‌های قدیمی
VMها
سیستم‌هایی با RAM کم
انتخاب خوبی است.




🟣 MATE
5

MATE هم سبک و کلاسیک است و ساختار سنتی دسکتاپ را حفظ می‌کند.




—————————-


🧩 GNOME Extensions
یکی از قابلیت‌های جذاب GNOME همین Extensions است.
با Extension می‌توانیم امکانات جدید به GNOME اضافه کنیم.
مثلاً:
GNOME
↓
Extension
↓
قابلیت جدید

مثلاً:
اضافه کردن پنل
نمایش CPU/RAM
تغییر رفتار پنجره‌ها
اضافه کردن Dock
تغییر ظاهر Shell
🧠 مثل افزونه مرورگر است؛ ولی برای محیط GNOME.


———————
❤1👏1🙏1
فصل ششم — قسمت شصت و سوم 🐧
Accessibility - برای افراد با مشکلات بینایی


——————-
Accessibility یعنی قابلیت‌هایی که کمک می‌کنند افراد دارای محدودیت‌های بینایی، شنوایی یا حرکتی راحت‌تر با کامپیوتر کار کنند.
اینجا تمرکز ما روی Keyboard Accessibility است.

—————-

⌨️ Keyboard Accessibility چیست؟
فرض کن کسی نمی‌تواند به‌راحتی چند کلید را همزمان فشار دهد.
مثلاً برای:
Ctrl + Alt + Delete

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

—————

1️⃣ Sticky Keys
یکی از مهم‌ترین قابلیت‌هاست.
با Sticky Keys لازم نیست کلیدهای ترکیبی را همزمان نگه داری.
مثلاً به‌جای:
Ctrl + Alt + T

می‌توانی:
Ctrl
↓
Alt
↓
T

را جداگانه فشار بدهی.
سیستم متوجه می‌شود که Ctrl و Alt همچنان در ترکیب هستند.
🧠 مثال واقعی:
اگر فردی مشکل حرکتی داشته باشد، به‌جای اینکه سه انگشتش را همزمان روی کیبورد بگذارد، کلیدها را یکی‌یکی می‌زند.

——————-

2️⃣ Slow Keys
Slow Keys باعث می‌شود سیستم فشارهای خیلی سریع یا اتفاقی روی کلیدها را نادیده بگیرد.
مثلاً اگر دستت روی کیبورد کشیده شود:
aaaaaaaaaaaa

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

——————-

3️⃣ Bounce Keys
اگر یک کلید را چند بار پشت سر هم به‌صورت ناخواسته فشار بدهی، Bounce Keys می‌تواند فشارهای تکراری سریع را نادیده بگیرد.
مثلاً:
aaaaaaaa

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


—————

4️⃣ Toggle Keys
وقتی کلیدهایی مثل:
Caps Lock
Num Lock
Scroll Lock

را فشار می‌دهی، Toggle Keys می‌تواند با صدای متفاوت فعال یا غیرفعال شدن آن‌ها را اعلام کند.
مثلاً:
Caps Lock ON  → 🔊
Caps Lock OFF → 🔊

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

———————

🔄 5️⃣ Switch / Switching
در Accessibility مفهوم Switch Access هم وجود دارد.
یعنی کاربر می‌تواند به‌جای استفاده از ماوس و کیبورد معمولی، با یک یا چند کلید یا وسیله ورودی ساده بین گزینه‌ها جابه‌جا شود.
مثلاً:
[Firefox]  [Terminal]  [Files]

↓
Switch

[Terminal] انتخاب شد

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


—————
🌍 اول یک نکته مهم: تغییر زبان Accessibility نیست
تغییر زبان کیبورد معمولاً در بخش Keyboard / Input Sources تنظیم می‌شود، نه Accessibility.
مثلاً می‌خواهی بین:
🇮🇷 فارسی
🇺🇸 English

سوییچ کنی.
در GNOME معمولاً از:
Settings
↓
Keyboard
↓
Input Sources
↓
Add Input Source

زبان فارسی و انگلیسی را اضافه می‌کنی.
بعد معمولاً با:
Super + Space

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

—————-


👁 1. قابلیت‌های مربوط به بینایی
Screen Reader
صفحه را برای کاربر می‌خواند.
مثلاً کاربر روی یک آیکون می‌رود:
Firefox

Screen Reader اعلام می‌کند:
Firefox، application

در GNOME معمولاً ابزار معروف آن Orca است.


—————

🔍 Zoom / Magnification
قسمتی از صفحه را بزرگ می‌کند.
مثلاً:
عادی:
[ Settings ]

Zoom:
[ SETTINGS ]

برای افرادی که دید ضعیف دارند بسیار کاربردی است.

——————-
📝 Large Text

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

🎨 High Contrast

تضاد رنگ‌ها را بیشتر می‌کند تا نوشته‌ها و عناصر صفحه راحت‌تر دیده شوند.

——————

👂 2. قابلیت‌های مربوط به شنوایی
برای افرادی که مشکل شنوایی دارند، بعضی سیستم‌ها می‌توانند به‌جای تکیه بر صدا، نمایش بصری ارائه کنند.
مثلاً:
Notification Sound
↓
Visual Flash

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

—————-
🖱 4. قابلیت‌های مربوط به Mouse
مثلاً Mouse Keys اجازه می‌دهد با صفحه‌کلید، نشانگر ماوس را کنترل کنی.
یعنی به‌جای حرکت دادن فیزیکی ماوس:
Keyboard
↓
Mouse Pointer

همچنین می‌توان سرعت حرکت ماوس و مدت نگه‌داشتن کلیک را تنظیم کرد.

————-

🧠 5. Switch Access
برای افرادی که نمی‌توانند به‌راحتی از ماوس و کیبورد معمولی استفاده کنند.
سیستم گزینه‌ها را یکی‌یکی انتخاب می‌کند:
Firefox
↓
Terminal
↓
Files
↓
Settings

و کاربر با یک Switch یا ورودی ساده گزینه موردنظر را انتخاب می‌کند.

—————-

🖥 6. Accessibility در محیط‌های مختلف
ممکن است اسم و محل این گزینه‌ها در:
GNOME
KDE
XFCE
Cinnamon
MATE

کمی متفاوت باشد.
ولی مفهوم کلی یکی است:
👁 Vision
👂 Hearing
⌨️ Keyboard
🖱 Mouse
🗣 Speech / Reading




——————
❤1👏1
فصل ششم — قسمت شصت و چهارم 🐧
مفهوم
localization
——————-

Localization یا بومی‌سازی یعنی سیستم‌عامل بداند کاربر در چه زبان، کشور و منطقه‌ای کار می‌کند و اطلاعات را متناسب با آن نمایش دهد.
مثلاً:
زبان: فارسی
کشور: ایران
تقویم/فرمت تاریخ: متناسب با تنظیمات منطقه
فرمت عدد: متناسب با Locale
کیبورد: فارسی / انگلیسی


—————

🌍 Locale چیست؟
Locale مجموعه‌ای از تنظیمات مربوط به زبان و منطقه کاربر است.
در لینوکس این اطلاعات معمولاً از طریق Environment Variableها مشخص می‌شوند.
برای دیدن Locale فعلی:
locale

مثلاً ممکن است ببینی:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=



——————

🧠 مهم‌ترین متغیرها
LANG
تنظیم پیش‌فرض Locale سیستم/کاربر است.
echo $LANG

مثلاً:
en_US.UTF-8

یعنی:
en → English
US → United States
UTF-8 → Encoding



—————

LC_ALL
اگر مقدار داشته باشد، می‌تواند تنظیمات سایر LC_*ها را override کند.
مثلاً:
echo $LC_ALL

معمولاً بهتر است برای تنظیم دائمی بی‌دلیل از آن استفاده نکنیم.


———————

LC_TIME
فرمت نمایش زمان و تاریخ:
echo $LC_TIME

LC_NUMERIC
فرمت اعداد:
echo $LC_NUMERIC

LC_MONETARY
فرمت پول:
echo $LC_MONETARY

LC_MESSAGES
زبان پیام‌های برنامه‌ها:
echo $LC_MESSAGES

—————-

🔤 حالا Encoding چیست؟
اینجا باید یک تفاوت مهم را بفهمی:
Locale ≠ Encoding
Locale می‌گوید:
«سیستم از چه زبان و منطقه‌ای استفاده کند؟»

Encoding می‌گوید:
«کاراکترها را چطور به داده قابل ذخیره در کامپیوتر تبدیل کنیم؟»


————-

1️⃣ ASCII
قدیمی‌ترین ساختار معروف برای نمایش کاراکترهاست.
مثلاً:
A → 65
B → 66
C → 67

ASCII عمدتاً برای حروف انگلیسی، اعداد و تعدادی علامت طراحی شده.
❌ مشکل:
فارسی، عربی، چینی و بسیاری زبان‌های دیگر را پوشش نمی‌دهد.



2️⃣ ISO-8859
برای گسترش ASCII مجموعه‌هایی از استانداردهای 8 بیتی ایجاد شدند.
مثلاً:
ISO-8859-1

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



3️⃣ Unicode
Unicode آمد تا برای تقریباً تمام زبان‌های دنیا یک استاندارد واحد برای کاراکترها داشته باشیم.
مثلاً:
A
ش
中
😀

همگی می‌توانند در Unicode تعریف شوند.
🧠 خیلی ساده:
ASCII یک محله بود؛ Unicode یک شهر خیلی بزرگ برای کاراکترهای زبان‌های مختلف است. 😄




4️⃣ UTF
اینجا یک نکته خیلی مهم:
Unicode و UTF یکی نیستند.
Unicode مشخص می‌کند چه کاراکتری چه کدی دارد.
UTF مشخص می‌کند این اطلاعات چطور در حافظه/فایل به صورت بایت ذخیره یا منتقل شود.
معروف‌ترین آن:
UTF-8

مثلاً:
LANG=en_US.UTF-8

یعنی Locale انگلیسی آمریکا با Encoding مبتنی بر UTF-8.






——————

🔍 در لینوکس چطور ببینیم؟
مهم‌ترین دستور:
locale

برای دیدن Localeهای موجود:
locale -a

مثلاً:
C
C.utf8
en_US.utf8

و برای دیدن مقدار یک متغیر:
echo $LANG

یا:
echo $LC_ALL
👏1
فصل ششم — قسمت شصت و پنجم 🐧
Remote Desktop — اتصال گرافیکی از راه دور به لینوکس
——————-
در این قسمت می‌خواهیم یاد بگیریم چطور از یک کامپیوتر دیگر به محیط گرافیکی لینوکس وصل شویم.
مثلاً:
Windows / Linux
│
│ Network
↓
Linux Server
│
└── GUI


————-

Remote Desktop چیست؟
یعنی به‌جای اینکه جلوی خود سرور باشیم، از کامپیوتر خودمان به آن وصل شویم و محیط گرافیکی آن را ببینیم و کنترل کنیم.
مثلاً:
PC خودت
↓
Remote Connection
↓
Linux Server
↓
GNOME / KDE / XFCE




——————

2️⃣ X11 چیست؟
X11 یکی از سیستم‌های قدیمی و معروف Linux/Unix برای نمایش GUI است.
نکته مهم:
X11 خودش «Remote Desktop» نیست؛ ولی قابلیت اجرای برنامه‌های گرافیکی از راه دور را دارد.

مثلاً روی سرور:
gedit

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


—————


3️⃣ X11 Forwarding چیست؟
یعنی اتصال گرافیکی یک برنامه را از طریق SSH منتقل کنیم.
ساختار:
Client
│
│ SSH
↓
SSH Server
│
↓
X11 Application

مثلاً:
ssh -X ali@192.168.1.10

بعد روی سرور:
xclock

اگر X11 Forwarding درست تنظیم شده باشد، پنجره xclock روی سیستم کلاینت نمایش داده می‌شود.


—————-


4️⃣ فعال کردن X11 Forwarding در SSH
روی سرور فایل:
nano /etc/ssh/sshd_config

را باز کن.
دنبال این گزینه بگرد:
X11Forwarding yes

اگر # اولش بود:
#X11Forwarding yes

به:
X11Forwarding yes

تغییر بده.
بعد:
systemctl restart sshd




—————-

نصب X11 روی سیستم
در Debian/Ubuntu ممکن است نیاز داشته باشی:
apt install xauth

بعد از کلاینت:
ssh -X user@server-ip

یا در بعضی شرایط:
ssh -Y user@server-ip

🧠 تفاوت ساده:
-X → X11 Forwarding معمولی
-Y → Trusted X11 Forwarding



——————
5️⃣ Remmina چیست؟
Remmina یک برنامه GUI برای اتصال Remote به سیستم‌های دیگر است.
می‌تواند با پروتکل‌هایی مثل:
RDP
SSH
VNC
SPICE

کار کند.
مثلاً در Ubuntu:
sudo apt install remmina

بعد Remmina را باز می‌کنی:
Remmina
↓
New Connection
↓
Protocol: RDP
↓
Server: 192.168.1.10
↓
Username
↓
Password
↓
Connect


——————-

6️⃣ Remote Desktop واقعی با RDP
اگر می‌خواهی کل Desktop لینوکس را از راه دور ببینی، X11 Forwarding انتخاب مناسبی نیست.
برای این کار می‌توانی از RDP استفاده کنی.
مثلاً روی بعضی سیستم‌های Linux می‌توانی xrdp نصب کنی:
sudo apt install xrdp

سپس:
systemctl enable --now xrdp

بعد از Windows می‌توانی برنامه:
Remote Desktop Connection

را باز کنی و IP لینوکس را وارد کنی.


——————-

7️⃣ X11 Forwarding vs Remote Desktop
این تفاوت را حتماً بفهم:
X11 Forwarding
فقط یک یا چند برنامه گرافیکی را اجرا می‌کنی:
SSH
↓
xclock
↓
پنجره xclock روی Client

Remote Desktop
کل محیط دسکتاپ را می‌بینی:
RDP
↓
Linux Desktop
├── Files
├── Terminal
├── Browser
└── Settings






——————-
❤2👏1
فصل ششم —قسمت اخر - قسمت شصت و ششم 🐧
time and printer
- زمان و پرینتر
——————-
در این قسمت دو موضوع مهم داریم:

🕐 مدیریت زمان در لینوکس
🖨 مدیریت پرینتر در لینوکس

———————

🕐 بخش اول — زمان در لینوکس
1️⃣ date
برای نمایش تاریخ و ساعت فعلی سیستم:
date

مثلاً:
Mon Aug 24 20:10:30 +0330 2026

یعنی سیستم تاریخ، ساعت و Time Zone را نشان می‌دهد.

——————-

2️⃣ date +%s
این یکی خیلی مهم است.
date +%s

یک عدد بزرگ می‌دهد، مثلاً:
1787582430

این عدد Unix Timestamp است.
یعنی تعداد ثانیه‌هایی که از:
1970-01-01 00:00:00 UTC

گذشته است.
🧠 چرا 1970؟
سیستم‌های Unix یک نقطه شروع استاندارد برای شمارش زمان انتخاب کردند که به آن:
Unix Epoch
می‌گوییم.
مثلاً:
1970
↓
شروع شمارش
↓
1 ثانیه
2 ثانیه
3 ثانیه
...

به همین دلیل در برنامه‌نویسی و سیستم‌ها خیلی زیاد Timestamp می‌بینی.
مثلاً:
date +%s

یا در PHP:
time();

———-

3️⃣ دستور time
اینجا یک اشتباه رایج وجود دارد:
time

با date فرق دارد.
time برای اندازه‌گیری مدت زمان اجرای یک دستور است.
مثلاً:
time ls

خروجی ممکن است چیزی شبیه این باشد:
real    0m0.005s
user 0m0.001s
sys 0m0.004s

یعنی می‌گوید اجرای ls چقدر زمان برده.
مثال واقعی
اگر بخواهی ببینی یک اسکریپت چقدر طول می‌کشد:
time ./backup.sh

🧠 پس:
date → الان ساعت چند است؟
time → این برنامه چقدر طول کشید؟

——————-

4️⃣ timedatectl
یکی از مهم‌ترین ابزارهای مدیریت زمان در Linux است.
timedatectl

اطلاعاتی مثل:
Local time
Universal time
RTC time
Time zone
NTP

را نمایش می‌دهد.


———————

تغییر Time Zone
اول Time Zoneهای موجود:
timedatectl list-timezones

مثلاً:
sudo timedatectl set-timezone Asia/Tehran

بعد:
timedatectl

را بزن.

————

🌍 Local Time و UTC
در لینوکس معمولاً چند مفهوم زمانی داریم:
Local Time
UTC
RTC

Local Time
زمان محلی سیستم.
مثلاً:
20:30

UTC
زمان استاندارد جهانی.
مثلاً:
17:00 UTC

RTC
Real-Time Clock
ساعتی است که در سخت‌افزار سیستم وجود دارد و حتی وقتی سیستم‌عامل خاموش است، زمان را نگه می‌دارد.


—————-

🧠 5️⃣ NTP چیست؟
NTP = Network Time Protocol
وظیفه‌اش این است که ساعت سیستم را با یک Time Server هماهنگ کند.
مثلاً:
Linux Server
│
│ NTP
↓
Time Server
│
↓
زمان صحیح

چرا مهم است؟
چون ساعت اشتباه می‌تواند باعث مشکلاتی مثل:
اشتباه بودن زمان Logها
مشکل Certificate
مشکل Authentication
مشکل Kerberos
مشکل هماهنگی سرورها
شود.
برای دیدن وضعیت NTP:
timedatectl

ممکن است ببینی:
System clock synchronized: yes
NTP service: active

——————

🖨 بخش دوم — Printer در Linux
حالا برویم سراغ پرینتر.
در لینوکس سیستم معروفی برای مدیریت پرینتر وجود دارد:
CUPS
CUPS = Common UNIX Printing System
CUPS سیستم اصلی چاپ در بسیاری از توزیع‌های Linux و Unix است.
ساختار ساده:
Application
↓
CUPS
↓
Printer

مثلاً Firefox می‌خواهد یک صفحه را چاپ کند:
Firefox
↓
CUPS
↓
Printer




—————-

🖨 نصب CUPS
در Debian/Ubuntu:
sudo apt install cups

فعال کردن سرویس:
sudo systemctl enable --now cups

بررسی:
systemctl status cups

———

📋 دیدن پرینترها
یکی از ابزارهای مهم CUPS:
lpstat

مثلاً:
lpstat -p

برای دیدن Printerهای موجود.
و:
lpstat -a

برای دیدن Printerهایی که درخواست‌های چاپ را قبول می‌کنند.

—————

دستور:
lp file.txt

یعنی فایل را برای چاپ ارسال کن.
مثلاً:
lp report.pdf



—————

❌ حذف یک Job چاپ
اگر اشتباهی فایل بزرگی را برای چاپ فرستادی:
cancel JOB-ID

مثلاً:
cancel printer-123

برای دیدن Jobها:
lpstat -o




—————

🌐 پنل گرافیکی CUPS
CUPS یک Web Interface هم دارد.
معمولاً:
http://localhost:631

در آن می‌توانی:
Printer اضافه کنی
Printer حذف کنی
Jobها را ببینی
Printer پیش‌فرض تعیین کنی
وضعیت Printer را بررسی کنی
❤2👏2
خب خب فصل شش کاملا و کلا امروز تموم شد.

از فردا به امید خدا فصل هفت رو استارت میزنیم
👏3🕊2❤1
Media is too big
VIEW IN TELEGRAM
حل چالش های Bndit
قسمت اول
————--
از چالش 1 تا 10
——————-
سایت
https://overthewire.org/wargames
—————————-
بابت صدا معذرت میخوام توی ویدیو های بعدی بهتر میشه
این ویدیو دلی بود گفتم بگیرم شما هم بتونید استفاده کنید❤️


#bandit #linux
👏3🔥2❤1👍1🎉1
به نام خدا شروع فصل هفت لینوکس الپیک یک (102)
❤3🔥1
فصل هفتم — قسمت شصت و هفتم 🐧
مدیریت کردن سیستم — System Administration
——————-
فصل هفتم وارد بخش مدیریت واقعی یک Linux Server می‌شود. یعنی اینجا دیگر فقط با دستورات لینوکس کار نمی‌کنیم؛ یاد می‌گیریم یک سیستم را اداره و نگهداری کنیم.
چهار بخش اصلی این فصل:
System Administration
│
├── 👤 Users & Groups
├── 🕐 Time Management
├── 📋 Logs
└── 📧 Mail Transfer Agent


———————-

1️⃣ مدیریت کاربران و گروه‌ها 👤
در لینوکس هر کسی که وارد سیستم می‌شود یک User دارد.
مثلاً:
root
ali
admin

هر User می‌تواند عضو یک یا چند Group باشد.
مثلاً:
ali
├── users
├── developers
└── docker

چرا Group داریم؟
فرض کن ۱۰ نفر در یک شرکت داریم و همه باید به یک پوشه دسترسی داشته باشند.
به‌جای اینکه برای تک‌تک افراد Permission تنظیم کنیم:
ali
reza
mohammad
sara
...

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

و همه را عضو آن می‌کنیم.

———————

دستورات مهمی که در این بخش خواهیم داشت:
useradd
usermod
userdel
passwd
id
who
whoami
groups
groupadd
groupmod
groupdel

فایل‌های مهم:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

🧠 این چهار فایل را خیلی خوب یاد بگیر.

————————-

2️⃣ مدیریت زمان 🕐
این قسمت ادامه چیزی است که در فصل قبل خواندیم.
سرور باید ساعت صحیح داشته باشد.
چون زمان اشتباه باعث مشکل در:
Log
Authentication
Certificate
Kerberos
Cron
ارتباط بین سرورها
می‌شود.
ابزارهای مهم:
date
timedatectl

و مهم‌تر:
NTP

برای هماهنگ کردن ساعت سرور با Time Server.

——————
3️⃣ مدیریت Logها 📋
Log یعنی گزارش اتفاقاتی که در سیستم رخ داده است.
مثلاً:
SSH login
Failed login
Service started
Service stopped
Kernel error
Disk error

فرض کن SSH کار نمی‌کند.
به‌جای حدس زدن:
چرا SSH کار نمی‌کنه؟ 🤔

می‌رویم Logها را بررسی می‌کنیم.
در سیستم‌های Linux دو روش مهم داریم:
سیستم‌های سنتی
/var/log/

مثلاً:
/var/log/auth.log
/var/log/syslog

در بعضی توزیع‌ها:
/var/log/secure
/var/log/messages

systemd
ابزار بسیار مهم:
journalctl

مثلاً:
journalctl

یا برای SSH:
journalctl -u ssh



——————————

4️⃣ Mail Transfer Agent 📧
اینجا قرار نیست فعلاً Mail Server کامل بسازیم.
فقط مفهوم MTA را یاد می‌گیریم.
MTA چیست؟
Mail Transfer Agent
برنامه‌ای است که مسئول انتقال Email بین Mail Serverها است.
مثلاً:
User
↓
Mail Client
↓
Mail Server
↓
MTA
↓
Internet
↓
Destination Mail Server

نمونه MTAها:
Postfix
Sendmail
Exim

یکی از معروف‌ترین‌ها:
Postfix




——————

🧠 فرق Mail Client و MTA
مثلاً:
Thunderbird
یک Mail Client است.
یعنی کاربر با آن Email را می‌خواند و ارسال می‌کند.
اما:
Postfix
یک MTA است.
یعنی وظیفه انتقال Mail را برعهده دارد.

—————-
❤2🔥1
فصل هفتم — قسمت شصت و هشتم 🐧
مدیریت کاربران در لینوکس
——————-
در این قسمت می‌خواهیم بفهمیم User در لینوکس دقیقاً چیست، چطور ساخته می‌شود، کجا اطلاعاتش ذخیره می‌شود و چطور Permission و Group آن را مدیریت کنیم.

——————

1️⃣ چرا User ایجاد می‌کنیم؟
یکی از اشتباهات بزرگ در Linux این است که همه با root کار کنند.
root قدرت بسیار زیادی دارد:
root
↓
دسترسی تقریباً کامل به سیستم

مثلاً اگر با root اشتباهی بزنی:
rm -rf /some/path

ممکن است اطلاعات مهمی از بین برود.
پس برای هر شخص یا سرویس یک User جدا می‌سازیم.
مثلاً:
root
├── ali
├── reza
└── apache

هر User می‌تواند Permission متفاوتی داشته باشد.

——————

2️⃣ آیا Root را حذف می‌کنیم؟
❌ معمولاً root را حذف نمی‌کنیم.
Root یک حساب سیستمی ضروری است.
کاری که معمولاً انجام می‌دهیم این است که:
استفاده مستقیم از root را محدود می‌کنیم و به کاربران عادی در صورت نیاز دسترسی مدیریتی می‌دهیم.

مثلاً:
sudo usermod -aG wheel ali

در Red Hat و خانواده آن، گروه wheel معمولاً برای دسترسی sudo استفاده می‌شود.
در Debian/Ubuntu معمولاً گروه مهم:
sudo

است.
مثلاً:
sudo usermod -aG sudo ali



—————————-

3️⃣ User و Group
هر User یک UID دارد.
هر Group یک GID دارد.
مثلاً:
id ali

ممکن است ببینی:
uid=1000(ali) gid=1000(ali) groups=1000(ali),10(wheel)

یعنی:
UID → شناسه کاربر
GID → گروه اصلی
groups → گروه‌هایی که کاربر عضو آنهاست




——————-

4️⃣ دستور groups
برای دیدن گروه‌های کاربر:
groups ali

مثلاً:
ali : ali wheel developers


———————

5️⃣ دستور id
اطلاعات کامل‌تری می‌دهد:
id ali

مثلاً:
uid=1001(ali)
gid=1001(ali)
groups=1001(ali),10(wheel)

🧠 برای امتحان:
groups → گروه‌ها
id → UID + GID + Groups

————————-

6️⃣ Login Shell چیست؟
وقتی User ایجاد می‌شود، برای او یک Shell مشخص می‌شود.
مثلاً:
/bin/bash

اما بعضی Userها اصلاً برای Login کردن ساخته نشده‌اند.
مثلاً User مربوط به سرویس‌ها:
apache
nginx
mysql

ممکن است Shell آنها:
/usr/sbin/nologin

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

مثلاً:
grep nginx /etc/passwd

ممکن است ببینی:
nginx:x:...:/usr/sbin/nologin


——————

7️⃣ ساخت User
دستور اصلی:
useradd ali

بعد برایش Password:
passwd ali

اما بهتر است هنگام ساخت User گزینه‌های موردنیاز را هم مشخص کنیم.
مثلاً:
useradd -m -s /bin/bash ali

یعنی:
-m → Home Directory بساز
-s → Shell مشخص کن

بعد:
passwd ali



——————
8️⃣ هنگام ساخت User چه اتفاقی می‌افتد؟
وقتی:
useradd -m ali

می‌زنی، چند اتفاق مهم می‌افتد.
1. UID ایجاد می‌شود
مثلاً:
1001

2. Group ساخته/تنظیم می‌شود
3. Home ساخته می‌شود:
/home/ali

4. فایل‌های اولیه از /etc/skel کپی می‌شوند.
5. اطلاعات User در فایل‌های سیستم ثبت می‌شود.
——————

9️⃣ /etc/skel چیست؟
skel مخفف Skeleton است.
یعنی یک قالب اولیه برای Home User.
مثلاً:
/etc/skel/
├── .bashrc
├── .profile
└── ...

وقتی User جدید می‌سازی:
useradd -m ali

فایل‌های موجود در /etc/skel معمولاً به:
/home/ali/

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


—————-

🔟 /etc/passwd
اطلاعات عمومی Userها در:
/etc/passwd

قرار دارد.
مثلاً:
cat /etc/passwd

یک خط ممکن است این شکلی باشد:
ali:x:1001:1001:Ali:/home/ali:/bin/bash

ساختار:
username
:
password placeholder
:
UID
:
GID
:
GECOS
:
Home
:
Shell

نکته مهم
در سیستم‌های مدرن، Password واقعی داخل /etc/passwd نیست.
آن x معمولاً یعنی اطلاعات Password در:
/etc/shadow

————————-

1️⃣1️⃣ /etc/shadow
این فایل اطلاعات حساس مربوط به Password را نگه می‌دارد.
sudo cat /etc/shadow

مثلاً:
ali:$6$........:...

Password به صورت Hash ذخیره می‌شود، نه Password خام.
⚠️ دسترسی این فایل بسیار محدود است.

——————-

1️⃣2️⃣ /etc/login.defs

مثلاً:
cat /etc/login.defs

می‌توانی تنظیماتی مربوط به:
محدوده UID
محدوده GID
عمر Password
تنظیمات Password
Home Directory
را در آن ببینی.

————

1️⃣3️⃣ useradd -D
برای دیدن Defaultهای useradd:
useradd -D

مثلاً ممکن است:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel

ببینی.
یعنی وقتی User جدید می‌سازی، useradd از این Defaultها استفاده می‌کند.

——————

1️⃣4️⃣ مدیریت Password با passwd
ساخت/تغییر Password:
passwd ali

چند Option مهم:
قفل کردن حساب:
passwd -l ali

باز کردن:
passwd -u ali

منقضی کردن Password:
passwd -e ali

دیدن وضعیت:
passwd -S ali

حذف Password:
passwd -d ali

⚠️ passwd -d یعنی Password حساب را حذف می‌کنی و از نظر امنیتی باید با احتیاط استفاده شود.


———————-

1️⃣5️⃣ usermod
برای تغییر مشخصات User:
usermod

مثلاً تغییر Shell:
sudo usermod -s /bin/bash ali

تغییر Home:
sudo usermod -d /home/newali -m ali

اضافه کردن User به Group:
sudo usermod -aG project42 ali

⚠️ نکته خیلی مهم
این:
-aG

یعنی User را به Groupهای اضافی اضافه کن.
حتماً -a را یادت باشد.
چون:
usermod -G project42 ali

ممکن است عضویت‌های قبلی کاربر در گروه‌های supplementary را جایگزین کند.

——————-

1️⃣6️⃣ ساخت Group
sudo groupadd project42

اگر بخواهی GID مشخص بدهی:
sudo groupadd -g 1042 project42

بررسی:
getent group project42



——————-

1️⃣7️⃣ اضافه کردن User به Group
مثلاً:
sudo usermod -aG project42 ali

بعد:
groups ali

یا:
id ali




——————-

1️⃣8️⃣ Wheel چیست؟
در سیستم‌های Red Hat / Fedora / AlmaLinux گروه:
wheel

معمولاً برای دسترسی مدیریتی با sudo استفاده می‌شود.
مثلاً:
sudo usermod -aG wheel ali

بعد کاربر ali می‌تواند در صورت تنظیم صحیح sudoers از sudo استفاده کند.
در Debian/Ubuntu معمولاً:
sudo usermod -aG sudo ali

🧠 حفظ کن:
Red Hat family → wheel
Debian family → sudo




————————
فصل هفتم — قسمت شصت و نهم 🐧
پیاده سازی su و sudo
————————————

در این قسمت دو مفهوم خیلی مهم برای مدیریت دسترسی کاربران داریم:
su
↓
تغییر کاربر

sudo
↓
اجرای یک دستور با دسترسی کاربر دیگر، معمولاً root



——————

1️⃣ su چیست؟
su مخفف Switch User است.
یعنی از یک User وارد User دیگری شویم.
مثلاً:
su ali

→ وارد حساب ali می‌شوی و Password او را می‌خواهد.
برای رفتن به root:
su -

→ وارد root می‌شوی و محیط Login مربوط به root را هم دریافت می‌کنی.
🧠 تفاوت مهم:
su
→ تغییر User

sudo
→ اجرای یک دستور با دسترسی User دیگر


—————————

2️⃣ sudo چیست؟
sudo یعنی:
این دستور را با دسترسی مدیریتی اجرا کن.

مثلاً کاربر ali کاربر معمولی است:
whoami

ali

ولی می‌خواهد یک Package نصب کند:
sudo dnf install nginx

دستور با دسترسی root اجرا می‌شود، ولی خود User تبدیل به root نمی‌شود.
مثلاً:
sudo systemctl restart sshd

فقط همان دستور با دسترسی مناسب اجرا می‌شود.
————————
3️⃣ چرا sudo بهتر از استفاده دائمی از root است؟
فرض کن:
ali → User معمولی

فقط زمانی که نیاز دارد:
sudo command

اجرا می‌کند.
بنابراین لازم نیست دائماً داخل root باشی.
این موضوع از نظر امنیت و Audit هم بهتر است.


————————

4️⃣ sudoers چیست؟
قوانین sudo در این قسمت مدیریت می‌شوند:
/etc/sudoers

اما ❌ نباید معمولاً با nano مستقیماً فایل را ویرایش کنیم.
از:
visudo

استفاده می‌کنیم.
visudo فایل sudoers را با بررسی Syntax ویرایش می‌کند.

———————-

5️⃣ ساختار یک قانون sudoers
مثلاً:
admin1 ALL=(ALL) NOPASSWD: ALL

یعنی:
admin1
↓
نام کاربر

ALL
↓
از هر Host

(ALL)
↓
می‌تواند به عنوان Userهای مجاز اجرا کند

NOPASSWD
↓
Password نمی‌خواهد

ALL
↓
تمام دستورات

پس:
admin1
می‌تواند تمام دستورات sudo را بدون درخواست Password اجرا کند.

⚠️ این دسترسی بسیار قدرتمند است و عملاً تقریباً معادل دسترسی کامل مدیریتی است.


——————

6️⃣ یک مثال محدودتر
مثلاً فقط اجازه بدهیم ali سرویس SSH را Restart کند:
ali ALL=(root) /usr/bin/systemctl restart sshd

یعنی:
ali
↓
sudo
↓
فقط systemctl restart sshd
↓
با دسترسی root

کاربر نمی‌تواند با همین Rule مثلاً این را اجرا کند:
sudo dnf install nginx




————-

7️⃣ یک مثال کاربردی دیگر
فرض کنیم کاربر backup فقط اجازه داشته باشد Backup را اجرا کند:
backup ALL=(root) /usr/local/bin/backup.sh

پس:
sudo /usr/local/bin/backup.sh

مجاز است، اما مثلاً:
sudo rm -rf /important

مجاز نیست.
🧠 این همان اصل Least Privilege است:
هر User فقط به اندازه‌ای که لازم دارد دسترسی داشته باشد.


————-

8️⃣ مثال برای dnf
Rule خودت:
admin2 ALL=(root) /usr/bin/dnf update

یعنی admin2 اجازه دارد:
sudo /usr/bin/dnf update

را با دسترسی root اجرا کند.
اما یک نکته مهم:
⚠️ مسیر Binary را دقیق بررسی کن
ممکن است در سیستم مسیر dnf متفاوت باشد.
با:
which dnf

مسیر واقعی را پیدا کن.
مثلاً:
/usr/bin/dnf

و همان را در sudoers بنویس.



—————
9️⃣ wheel در Red Hat
در خانواده Red Hat:
RHEL
Fedora
AlmaLinux
Rocky Linux

گروه معروف مدیریتی:
wheel

است.
مثلاً:
usermod -aG wheel ali

یعنی ali را عضو wheel کن.
بعد اگر sudoers سیستم اجازه داده باشد، ali می‌تواند از sudo استفاده کند.

————-

🔟 در Debian/Ubuntu
در Debian و Ubuntu معمولاً گروه:
sudo

است.
مثلاً:
usermod -aG sudo ali
فصل هفتم — قسمت هفتاد 🐧
Install Mail server
—————————

در قسمت قبل با MTA آشنا شدیم. اینجا یک قدم عملی‌تر می‌شویم و یک Mail Server ساده را با Postfix راه‌اندازی می‌کنیم.

————————-

1️⃣ ساختار کلی Mail Server
وقتی یک Email می‌فرستی، چند جزء می‌توانند درگیر باشند:
MUA → MTA → MTA → MDA

📩 MUA — Mail User Agent
برنامه‌ای که کاربر با آن Email را می‌خواند یا می‌فرستد.
مثلاً:
Thunderbird
Outlook
Webmail

یعنی رابط کاربر با سیستم Mail.

——————

🚚 MTA — Mail Transfer Agent
وظیفه‌اش انتقال Email بین Mail Serverها است.
مثلاً:
Postfix
Exim
Sendmail
OpenSMTPD

مثال:
MUA
↓
Postfix
↓
Internet
↓
Postfix مقص




———————-

📥 MDA — Mail Delivery Agent
وقتی Mail به سرور مقصد رسید، MDA آن را در محل مناسب Mailbox کاربر تحویل می‌دهد.
مثلاً:
MTA
↓
MDA
↓
Mailbox


———-

2️⃣ انتخاب MTA
در Linux چند MTA معروف داریم:
Postfix
Sendmail
Exim
OpenSMTPD

در این آموزش از:
⭐️ Postfix
استفاده می‌کنیم.
Postfix یکی از MTAهای معروف Linux است و برای ارسال و دریافت SMTP استفاده می‌شود.

——————————

3️⃣ نصب Postfix
در Red Hat / Fedora / AlmaLinux:
dnf install postfix

بعد سرویس را فعال و اجرا کن:
systemctl enable --now postfix

بررسی:
systemctl status postfix

——————

4️⃣ فایل تنظیمات Postfix
فایلی که باید بشناسی:
/etc/postfix/main.cf

⚠️ در جزوه‌ات نوشته بودی:
/etc/postfix/main.cfg

درستش:
/etc/postfix/main.cf

5️⃣ inet_interfaces
در:
nano /etc/postfix/main.cf

گزینه:
inet_interfaces = all

یعنی Postfix روی تمام Interfaceهای شبکه سیستم گوش بدهد.
مثلاً اگر سرور چند IP داشته باشد:
eth0 → 192.168.1.10
eth1 → 10.0.0.10

با:
inet_interfaces = all

Postfix روی Interfaceهای مناسب سیستم Listen می‌کند.
🧠 برای سرور واقعی باید این تنظیم را با توجه به نیاز و مدل شبکه انجام داد؛ باز گذاشتن سرویس SMTP روی همه Interfaceها بدون تنظیمات امنیتی می‌تواند خطرناک باشد.


—————
6️⃣ پورت SMTP
پروتکل اصلی ارسال Mail:
SMTP

پورت استاندارد:
25

برای Submission معمولاً:
587

و SMTPS:
465

در این قسمت فعلاً مفهوم اصلی را با 25 یاد بگیر.
بررسی:
ss -lntp | grep :25

ممکن است ببینی:
LISTEN ... :25

یعنی Postfix روی پورت SMTP در حال Listen است.
————————

7️⃣ Firewall
اگر سرور باید از بیرون SMTP دریافت کند، پورت موردنظر باید در Firewall مجاز باشد.
مثلاً در سیستم‌های دارای firewalld:
firewall-cmd --permanent --add-service=smtp
firewall-cmd --reload

بررسی:
firewall-cmd --list-services




——————

8️⃣ ارسال Email از Command Line
یکی از ابزارهای ساده:
s-nail

نصب:
dnf install s-nail

بعد می‌توانی Mail بفرستی.
مثلاً:
echo "Hello from Linux" | mail -s "Test Mail" user@example.com

ساختار:
echo
↓
متن Email
↓
mail
↓
Postfix
↓
SMTP

——————

9️⃣ Mail محلی در Linux
یکی از بهترین تمرین‌ها برای فهم Mail Server این است که اول Mail داخلی خود Linux را امتحان کنی.
مثلاً یک User بساز:
useradd ali
passwd ali

بعد:
echo "Hello Ali" | mail -s "Test" ali

اینجا Email از طریق Mail System محلی تحویل User می‌شود.
بعد با:
mail

می‌توانی Mailهای محلی را ببینی.


—————
10️⃣ لاگ Mail را کجا ببینیم؟
یکی از مهم‌ترین چیزها در عیب‌یابی Mail Server، Log است.
در Red Hat-basedها معمولاً:
/var/log/maillog

مثلاً:
tail -f /var/log/maillog

حالا در یک Terminal دیگر Mail بفرست:
echo "Test" | mail -s "Test Mail" ali

و در Terminal اول Log را ببین.
این فوق‌العاده مهم است چون می‌توانی ببینی:
Mail received
Mail queued
Mail delivered
Connection failed
Relay denied
Authentication failed



——————-

1️⃣1️⃣ در Debian/Ubuntu
ممکن است Mail Log را در این مسیر ببینی:
/var/log/mail.log

پس:
Red Hat
→ /var/log/maillog

Debian
→ /var/log/mail.log



————-
فصل هفتم — قسمت هفتاد و یکم 🐧
مدیریت لاگ‌ها در لینوکس

————————————
این قسمت خیلی مهمه، چون در لینوکس تقریباً هر اتفاق مهمی را می‌توان از روی Logها بررسی کرد؛ از ورود کاربر گرفته تا Crash شدن سرویس، خطای SSH یا مشکل شبکه.

————————————

1️⃣ Process چیست؟
Process یا پردازش یعنی یک برنامه‌ای که در حال اجراست.
مثلاً وقتی می‌زنی:
firefox

برنامه Firefox اجرا می‌شود و سیستم برای آن یک Process ایجاد می‌کند.
هر Process معمولاً یک PID دارد:
Firefox
↓
PID = 2451

برای دیدنش:
ps aux

یا:
top


—————————————

2️⃣ Daemon چیست؟
Daemon یک Process است که معمولاً در پس‌زمینه اجرا می‌شود و منتظر درخواست یا رویداد می‌ماند.
مثلاً:
sshd
cron
systemd-journald
rsyslogd

مثال واقعی:
وقتی SSH Server اجراست:
sshd
↓
منتظر اتصال SSH
↓
کاربر وصل شد
↓
درخواست را پردازش می‌کند

پس:
Daemon = برنامه‌ای که معمولاً در پس‌زمینه اجرا می‌شود و یک سرویس را ارائه می‌دهد.

معمولاً اسم بسیاری از Daemonها به d ختم می‌شود:
sshd
rsyslogd
systemd-journald



————————-

3️⃣ Log چیست و چرا مهم است؟
Log یعنی گزارش اتفاقاتی که در سیستم رخ داده‌اند.
مثلاً:
18:30 → User ali وارد شد
18:31 → sshd اجرا شد
18:32 → Login ناموفق
18:35 → nginx Restart شد
18:40 → Disk error

مثال واقعی
فرض کن کاربر می‌گوید:
«من رمز SSH را درست می‌زنم ولی وارد نمی‌شوم.»

به جای حدس زدن:
journalctl -u sshd

را می‌زنی و Log را بررسی می‌کنی.
ممکن است مشخص شود:
Failed password

یا:
Connection refused

یا:
User not allowed

پس Log برای Troubleshooting، Security و Auditing بسیار مهم است.


————————————-

4️⃣ ساختار کلی Logging در Linux
در Linux دو سیستم مهم را زیاد می‌بینی:
Traditional Syslog
↓
rsyslog

systemd
↓
systemd-journald
↓
journalctl

یعنی ممکن است سیستم هم از:
rsyslog

استفاده کند و هم:
systemd-journald




—————————

5️⃣ Syslog چیست؟
Syslog یک استاندارد و معماری برای ارسال و مدیریت پیام‌های Log است.
برنامه‌ها می‌توانند پیام‌های خودشان را به Syslog بفرستند.
مثلاً:
sshd ─────┐
nginx ────┤
cron ─────┤──→ rsyslog ──→ /var/log/...
kernel ───┘

یکی از پیاده‌سازی‌های معروف Syslog:
rsyslog

است.
فایل تنظیمات آن معمولاً:
/etc/rsyslog.conf

است.

——————————-

6️⃣ Facility چیست؟
Facility مشخص می‌کند Log مربوط به چه نوع بخشی از سیستم است.
چند نمونه:
auth
authpriv
cron
daemon
kern
mail
user
local0 ... local7

مثلاً:
auth

→ پیام‌های مربوط به Authentication
kern

→ پیام‌های Kernel
mail

→ پیام‌های Mail
cron

→ پیام‌های Cron

———————————

7️⃣ Severity چیست؟
Severity مشخص می‌کند شدت یا اهمیت یک Log چقدر است.
از کم‌اهمیت‌تر به بحرانی‌تر:
debug
info
notice
warning
err
crit
alert
emerg

مثلاً:
info

→ اطلاعات عادی
warning

→ هشدار
err

→ خطا
crit

→ خطای بسیار مهم
emerg

→ وضعیت اضطراری
🧠 برای دفتر:
Facility → این Log مربوط به کدام بخش است؟

Severity → این Log چقدر جدی است؟




————————————


8️⃣ Log Rotation چیست؟
فرض کن یک سرور داری و:
/var/log/messages

هر روز هزاران Log تولید می‌کند.
اگر این فایل را کنترل نکنی، ممکن است:
100 MB
↓
1 GB
↓
10 GB
↓
Disk Full 💀

اینجاست که Log Rotation وارد می‌شود.
ابزار معروف:
logrotate

است.
کارش این است که Logهای قدیمی را:
messages
messages.1
messages.2
messages.3.gz

مدیریت کند و در صورت نیاز فشرده یا حذف کند.
———————————————

9️⃣ فایل logrotate.conf
فایل اصلی تنظیمات:
/etc/logrotate.conf

و تنظیمات برنامه‌های مختلف معمولاً در:
/etc/logrotate.d/

قرار دارند.
مثلاً:
ls /etc/logrotate.d/


——————————

🔟 systemd-journald چیست؟
در سیستم‌های مبتنی بر systemd، سرویس:
systemd-journald

وظیفه جمع‌آوری و مدیریت Journalها را دارد.
یعنی:
Application
↓
systemd-journald
↓
Journal
↓
journalctl

———————

1️⃣1️⃣ فایل تنظیمات journald
فایل:
/etc/systemd/journald.conf

است.

——————————


1️⃣2️⃣ journalctl
مهم‌ترین ابزار برای خواندن Journal:
journalctl

است.
اگر فقط بزنی:
journalctl

تعداد زیادی Log نمایش داده می‌شود.

———————————

1️⃣3️⃣ آخرین 50 Log
journalctl -n 50

یعنی:
50 خط آخر Journal را نمایش بده.


————————

1️⃣4️⃣ دنبال کردن Log به صورت لحظه‌ای
journalctl -f

-f یعنی Follow.
مثل:
tail -f

مثلاً:
journalctl -f

حالا در Terminal دیگری SSH Login کن.
Log همان لحظه نمایش داده می‌شود.

———————-

1️⃣5️⃣ Log مربوط به یک سرویس
مثلاً SSH:
journalctl -u sshd

یعنی:
فقط Logهای Unit مربوط به sshd را نشان بده.

در Ubuntu ممکن است نام سرویس:
journalctl -u ssh

باشد.

————————-

1️⃣6️⃣ Log مربوط به Boot فعلی
journalctl -b

یعنی:
Logهای Boot فعلی سیستم را نمایش بده.

خیلی کاربردی است وقتی سیستم Boot شده ولی مثلاً یک سرویس بالا نیامده.


———————————


1️⃣7️⃣ فقط Errorها
journalctl -p err

یعنی فقط پیام‌هایی با Priority برابر یا بالاتر از err را نشان بده.
برای محدوده:
journalctl -p crit..err

یعنی Logهای:
crit
alert
emerg
err

را نمایش بده.

———————-

1️⃣8️⃣ Log از یک زمان مشخص
از دیروز:
journalctl --since yesterday

از دو ساعت قبل:
journalctl --since "2 hours ago"

مثلاً:
journalctl --since "2026-08-26 15:00"

→ Logهای بعد از ساعت 15 را نشان می‌دهد.


———————-

1️⃣9️⃣ ترکیب چند Filter
اینجا قدرت journalctl را می‌بینی.
مثلاً:
journalctl -u sshd --since yesterday

یعنی:
Logهای SSH از دیروز تا الان.

یا:
journalctl -u sshd -p err

یعنی:
خطاهای مهم سرویس SSH.

——————-

2️⃣0️⃣ تغییر Format خروجی
خروجی معمولی:
journalctl -o short

برای خروجی JSON:
journalctl -o json-pretty

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


——————————————

2️⃣1️⃣ ابزار logger
با logger می‌توانیم خودمان یک پیام به Syslog ارسال کنیم.
مثلاً:
logger "Hello from Alireza"

بعد می‌توانی Log را پیدا کنی.
حتی Facility و Severity هم مشخص کنی:
logger -p user.info "Test message"

یعنی:
Facility → user
Severity → info

یک مثال امنیتی:
logger -p auth.warning "Suspicious login detected"



————————-


2️⃣2️⃣ systemd-cat
این ابزار خروجی یک برنامه را وارد Journal می‌کند.
مثلاً:
echo "Hello Journal" | systemd-cat

یا:
systemd-cat echo "Test message"

بعد:
journalctl

را بزن و پیام را پیدا کن.
حتی می‌توانی Priority بدهی:
echo "Something went wrong" | systemd-cat -p err




——————-

2️⃣3️⃣ /var/log
یکی از مهم‌ترین مسیرهای Log در Linux:
cd /var/log/

است.
برای دیدنش:
ls -lh /var/log/

ممکن است فایل‌هایی مثل این ببینی:
messages
secure
maillog
cron
boot.log

البته نام و محل Logها بسته به Distribution و تنظیمات سیستم متفاوت است.

————————
🧠 یک مثال واقعی خیلی مهم
فرض کن SSH کار نمی‌کند.
به جای اینکه کورکورانه تنظیمات را تغییر بدهی:
اول:
systemctl status sshd

بعد:
journalctl -u sshd -n 50
اگر فقط Error می‌خواهی:
journalctl -u sshd -p err
اگر مشکل بعد از Reboot ایجاد شده:
journalctl -b
این یعنی Log خواندن یکی از اصلی‌ترین مهارت‌های Linux Administrator است.

—————————
فصل هفتم — جلسه آخر - قسمت هفتاد و دوم 🐧
مدیریت زمان در لینوکس

————————————
زمان در لینوکس فقط برای نمایش ساعت نیست؛ برای Logها، Cron، Certificateها، احراز هویت، Kerberos و ارتباط بین سرورها خیلی مهم است.
مثلاً اگر ساعت سرور ۱۰ دقیقه اشتباه باشد، ممکن است بررسی Logها یا حتی بعضی Authenticationها به مشکل بخورد.

==============


1️⃣ دو نوع ساعت در سیستم
در لینوکس با دو مفهوم مهم روبه‌رو هستیم:
🖥 Hardware Clock
ساعتی که داخل سخت‌افزار/RTC سیستم نگهداری می‌شود.
Hardware Clock
→ ساعت سخت‌افزاری

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


———————-


System Clock
ساعتی که Kernel لینوکس هنگام اجرای سیستم استفاده می‌کند.
System Clock
→ ساعت مورد استفاده Linux

پس:
Hardware Clock
↓
Linux Boot
↓
System Clock

————————-


2️⃣ hwclock
برای مشاهده و مدیریت Hardware Clock:
hwclock

مثلاً:
sudo hwclock --show

→ نمایش ساعت سخت‌افزاری.
برای نمایش دقیق‌تر:
sudo hwclock --verbose



تغییر Hardware Clock
مثلاً:
sudo hwclock --systohc

یعنی:
ساعت System را روی Hardware Clock بنویس.

برعکس:
sudo hwclock --hctosys

یعنی:
ساعت Hardware Clock را روی System Clock تنظیم کن.

🧠 حفظ کن:
systohc
system → hardware

hctosys
hardware → system




————————————

3️⃣ timedatectl
فرمان اصلی مدیریت زمان در سیستم‌های جدید Linux:
timedatectl

وضعیت زمان:
timedatectl status

مثلاً می‌بینی:
Local time
Universal time
RTC time
Time zone
System clock synchronized
NTP service
RTC in local TZ

—————————-

4️⃣ تنظیم Timezone
لیست Timezoneها:
timedatectl list-timezones

مثلاً:
timedatectl list-timezones | grep Tehran

تنظیم:
sudo timedatectl set-timezone Asia/Tehran

بعد:
timedatectl

را بزن.




—————————-

5️⃣ تنظیم دستی ساعت
اگر NTP فعال نباشد می‌توانی ساعت را دستی تنظیم کنی:
sudo timedatectl set-time "18:30:00"

یا:
sudo timedatectl set-time "2026-08-26 18:30:00"

اما در Server معمولاً بهتر است ساعت را دستی تنظیم نکنی و از NTP استفاده کنی.

——————————-

6️⃣ NTP چیست؟
NTP مخفف:
Network Time Protocol

است.
وظیفه‌اش این است که ساعت سیستم را از طریق شبکه با یک Time Server هماهنگ کند.
مثلاً:
Linux Server
↓
NTP Client
↓
NTP Server
↓
زمان دقیق

مثلاً چند سرور:
server1 → 18:30:01
server2 → 18:30:02
server3 → 18:30:01

NTP کمک می‌کند ساعت سیستم‌ها با یک مرجع زمانی هماهنگ بماند.


————————

7️⃣ چرا NTP مهم است؟
فرض کن 100 سرور داری.
اگر هر کدام ساعت متفاوتی داشته باشند:
Server 1 → 12:00
Server 2 → 12:05
Server 3 → 11:58
Server 4 → 12:10

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


—————————————





8️⃣ ntpsec چیست؟
احتمالاً منظورت از nptsec همان:
NTPsec

است.
NTPsec یک پیاده‌سازی مدرن‌تر و سخت‌گیری‌شده‌تر از NTP است که برای امنیت و سادگی بیشتر کد طراحی شده است.
اما در Linuxهای امروزی ممکن است اصلاً NTPsec استفاده نکنی.
دو گزینه بسیار رایج:
chrony
systemd-timesyncd

هستند.
در بسیاری از سرورهای RHEL/Fedora/AlmaLinux، chrony گزینه رایج است.




———————

9️⃣ Chrony چیست؟
Chrony یک مجموعه ابزار برای Synchronization زمان است.
معمولاً شامل:
chronyd
chronyc

است.
chronyd:
سرویس Daemon مربوط به زمان است.

chronyc:
ابزار Command Line برای بررسی و مدیریت Chrony است.

بررسی وضعیت:
chronyc tracking

یا:
chronyc sources



——————-

🔟 فعال کردن NTP با timedatectl
در سیستم‌هایی که سرویس NTP مناسب را فراهم کرده‌اند:
sudo timedatectl set-ntp true

بررسی:
timedatectl status

ممکن است ببینی:
System clock synchronized: yes
NTP service: active

یعنی:
NTP فعال است
↓
ساعت سیستم
↓
با Time Server هماهنگ می‌شود



—————————

1️⃣1️⃣ یک مثال واقعی
فرض کن سرور Ubuntu داری و ساعتش اشتباه است.
اول:
timedatectl

بررسی می‌کنی.
اگر Timezone اشتباه بود:
sudo timedatectl set-timezone Asia/Tehran

بعد:
sudo timedatectl set-ntp true

و دوباره:
timedatectl

بررسی می‌کنی که:
System clock synchronized: yes

باشد.
❤1
خب خب فصل هفت هم تموم شد
.
.
.
از فردا میریم سراغ فصل هشتم الپیک 1 قسمت 102
❤1
فصل هشتم - قسمت هفتاد و سوم 🐧
شبکه در لینوکس
———————
در فصل با قسمت های زیر اشنا میشویم

1 : آشنایی اولیه باشبکه

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

3 : فرمان های اولیه در عیب یابی شبکه

4 : پیکربندی dns در لینوکس
❤1
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و چهارم 🐧
1 : آشنایی اولیه باشبکه
———————
هدف اصلی شبکه خیلی ساده است:
انتقال اطلاعات از یک دستگاه به دستگاه دیگر.

مثلاً وقتی در کامپیوترت می‌زنی:
google.com

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


——————-

1️⃣ چرا شبکه لایه‌ای طراحی شده؟
برای اینکه هر قسمت از ارتباط یک وظیفه مشخص داشته باشد.
مدل معروف:
OSI
دارای ۷ لایه است:
7. Application
6. Presentation
5. Session
4. Transport
3. Network
2. Data Link
1. Physical

در مقابل، مدل TCP/IP معمولاً به ۴ لایه تقسیم می‌شود:
Application
Transport
Internet
Network Access

📌 برای LPIC بیشتر باید مفهوم TCP/IP و وظایف لایه‌ها را بفهمی.


————————

2️⃣ هدر چیست؟
یکی از مهم‌ترین مفاهیم این قسمت همین است.
وقتی برنامه‌ای می‌خواهد اطلاعات بفرستد، داده در مسیر عبور از لایه‌ها، اطلاعات کنترلی دریافت می‌کند.
مثلاً:
Application
↓
Data
↓
Transport
↓
TCP Header + Data
↓
Network
↓
IP Header + TCP Header + Data
↓
Data Link
↓
Ethernet Header + IP Header + TCP Header + Data

به این اطلاعات اضافه‌شده در هر لایه، Header می‌گوییم.


————————

3️⃣ یک مثال واقعی؛ باز کردن Google
فرض کن در مرورگر می‌نویسی:
https://google.com

مرورگر اطلاعات را ایجاد می‌کند.
در لایه Application:
HTTP/HTTPS Data

سپس در Transport مثلاً TCP قرار می‌گیرد:
TCP Header
+
Application Data

بعد در Network:
IP Header
+
TCP Header
+
Application Data

بعد در Data Link:
Ethernet Header
+
IP Header
+
TCP Header
+
Application Data

و در نهایت اطلاعات به صورت Frame/Bits روی شبکه ارسال می‌شوند.
در سمت مقصد این فرآیند برعکس می‌شود و Headerهای مربوط به هر لایه بررسی و کنار گذاشته می‌شوند تا برنامه بتواند داده اصلی را دریافت کند.

————————

4️⃣ لایه Network
یکی از وظایف اصلی این لایه، انتقال Packet بین شبکه‌های مختلف است.
مهم‌ترین پروتکل این لایه:
IP

است.
IP به دستگاه‌ها آدرس می‌دهد و کمک می‌کند Packet بداند باید به کدام مقصد برود.


————

5️⃣ IPv4 و IPv6
دو نسخه اصلی IP داریم:
IPv4
مثلاً:
192.168.1.20

IPv4 دارای آدرس ۳۲ بیتی است.
IPv6
مثلاً:
2001:db8::1

IPv6 دارای آدرس ۱۲۸ بیتی است.
پس:
IPv4 → 32 bit
IPv6 → 128 bit


—————

6️⃣ Netmask چیست؟
Netmask مشخص می‌کند کدام قسمت IP مربوط به Network و کدام قسمت مربوط به Host است.
مثلاً:
IP:
192.168.1.20

Netmask:
255.255.255.0

یا به شکل CIDR:
192.168.1.20/24

در این مثال:
Network → 192.168.1
Host → 20

یعنی دستگاه 20 در شبکه 192.168.1.0/24 قرار دارد.
🧠 خیلی ساده:
Netmask مرز بین Network و Host را مشخص می‌کند.


——————

7️⃣ لایه Transport
این لایه وظیفه ارتباط بین برنامه‌ها و کنترل انتقال داده را بر عهده دارد.
دو پروتکل اصلی:
TCP
UDP

TCP
قابل‌اعتماد است.
ویژگی‌های مهم:
Connection-oriented
ترتیب داده‌ها را حفظ می‌کند
دریافت داده را تأیید می‌کند
در صورت نیاز داده را مجدداً ارسال می‌کند
مثلاً:
Client ───────→ Server
Data 1
Data 2
Data 3

اگر Data 2 گم شود، TCP می‌تواند آن را مجدداً درخواست/ارسال کند.


UDP
ساده‌تر و سریع‌تر است و تضمین تحویل مانند TCP ندارد.
مثلاً:
Client ───────→ Server
Data 1
Data 2
Data 3

اگر Data 2 از بین برود، UDP خودش تضمین نمی‌کند که آن را دوباره ارسال کند.
کاربردهای رایج:
DNS
VoIP
Streaming
Online Gaming

البته بعضی برنامه‌های
———————

8️⃣ Port چیست؟
IP مشخص می‌کند:
کدام دستگاه؟

Port مشخص می‌کند:
کدام سرویس/برنامه؟

مثلاً:
192.168.1.20:22

یعنی:
IP   → 192.168.1.20
Port → 22

پورت 22 معمولاً برای SSH استفاده می‌شود.



———————

9️⃣ Application Layer
اینجا جایی است که سرویس‌ها و پروتکل‌هایی که برنامه‌ها مستقیماً با آن‌ها کار می‌کنند قرار دارند.
مثلاً:
HTTP
HTTPS
DNS
DHCP
SSH
FTP
SMTP

ساختار کلی معمولاً به شکل Client/Server است:
Client
│
│ Request
↓
Server
│
│ Response
↓
Client



————————

🔟 DNS چیست؟
DNS یعنی:
Domain Name System
کارش تبدیل نام دامنه به IP است.
مثلاً:
google.com
↓
DNS
↓
IP Address

چرا؟
چون برای انسان راحت‌تر است بگوید:
google.com

تا اینکه یک IP را حفظ کند.


———————-

1️⃣1️⃣ DNS در عمل چه اتفاقی می‌اندازد؟
فرض کن مرورگر می‌خواهد به:
google.com

وصل شود.
ابتدا سیستم باید IP آن را پیدا کند.
تقریباً:
Browser
↓
DNS Resolver
↓
DNS Server
↓
IP Address
↓
Connection to Server

مثلاً نتیجه DNS می‌تواند یک یا چند IP باشد.
بعد مرورگر با IP مقصد ارتباط برقرار می‌کند.
📌 نکته مهم:
DNS خودش ارتباط HTTP را انجام نمی‌دهد؛ فقط نام را به آدرس تبدیل/Resolve می‌کند.





——————-

1️⃣2️⃣ DHCP چیست؟
DHCP مخفف:
Dynamic Host Configuration Protocol
است.
وظیفه DHCP این است که تنظیمات شبکه را به‌صورت خودکار به Client بدهد.
مثلاً کامپیوتر تازه وارد شبکه می‌شود و هنوز IP ندارد.
DHCP می‌تواند به آن بدهد:
IP Address
Subnet Mask
Default Gateway
DNS Server

————————
1️⃣3️⃣ روند DHCP
چهار مرحله معروف DHCP را حفظ کن:
DORA

D → Discover
Client می‌گوید:
آیا DHCP Serverای در شبکه هست؟

O → Offer
DHCP Server پیشنهاد IP می‌دهد.
R → Request
Client می‌گوید:
این IP را می‌خواهم.

A → Acknowledge
Server تأیید می‌کند:
این IP برای تو ثبت شد.

پس:
Discover
↓
Offer
↓
Request
↓
ACK

🧠 DORA را برای امتحان حتماً حفظ کن.




—————————

| سرویس        |   پورت پیش‌فرض   |
| ------------ | ----------------: |
| FTP Control | 21/TCP |
| FTP Data – Active | 20/TCP |
| SSH | 22/TCP |
| Telnet | 23/TCP |
| SMTP | 25/TCP |
| DNS | 53/TCP/UDP |
| DHCP Server | 67/UDP |
| DHCP Client | 68/UDP |
| HTTP | 80/TCP |
| POP3 | 110/TCP |
| NTP | 123/UDP |
| IMAP | 143/TCP |
| HTTPS | 443/TCP |
| SMB | 445/TCP |




📌 چند مورد مهم‌تر برای LPIC:
22  → SSH
25 → SMTP
53 → DNS
67 → DHCP Server
68 → DHCP Client
80 → HTTP
123 → NTP
443 → HTTPS
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و پنجم 🐧
2 : تنظیم شبکه در لینوکس
———————
اینجا می‌خواهیم یاد بگیریم تنظیمات شبکه در Linux کجا قرار دارند و امروزه چطور آن‌ها را مدیریت می‌کنیم.
نکته مهم این قسمت:
در Linuxهای جدید، NetworkManager نقش اصلی را در مدیریت شبکه دارد.

——————————-

1️⃣ قبلاً تنظیمات شبکه کجا بودند؟
بسته به Distribution فرق داشت.
🔴 Red Hat / CentOS قدیمی
در سیستم‌های قدیمی‌تر فایل‌های Interface معمولاً در:
/etc/sysconfig/network-scripts/

بودند.
مثلاً:
/etc/sysconfig/network-scripts/ifcfg-eth0

داخلش تنظیماتی مثل IP، Gateway و نوع دریافت IP قرار می‌گرفت.
مثلاً:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

——————-
🔵 Debian / Ubuntu قدیمی
در Debian و Ubuntu قدیمی معمولاً:
/etc/network/interfaces

استفاده می‌شد.
مثلاً:
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1




————-
🟢 openSUSE
در openSUSE هم روش‌های مخصوص خودش وجود داشته، اما در نسخه‌های جدیدتر مدیریت شبکه بیشتر به NetworkManager منتقل شده است.


—————

2️⃣ امروزه چه چیزی مهم است؟
امروزه در بسیاری از Distributionهای Desktop و Server:
NetworkManager
↓
مدیریت Network Interface
↓
IP / Gateway / DNS / Connection

ابزار اصلی خط فرمان آن:
nmcli

است.


——————
3️⃣ NetworkManager چیست؟
NetworkManager یک سرویس برای مدیریت اتصال‌های شبکه است.
می‌تواند مواردی مثل:
Ethernet
Wi-Fi
IP
Gateway
DNS
VPN
Connection Profiles
را مدیریت کند.
پس این دو را قاطی نکن:
NetworkManager
→ سرویس مدیریت شبکه

nmcli
→ ابزار Command Line برای کنترل NetworkManager





—————


4️⃣ nmcli
اول وضعیت کلی NetworkManager:
nmcli general status

مثلاً:
STATE      CONNECTIVITY  WIFI-HW  WIFI  WWAN-HW  WWAN
connected full enabled ... enabled ...

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

——————————


5️⃣ نمایش Connectionها
nmcli connection show

این دستور تمام Connection Profileها را نشان می‌دهد.
مثلاً:
NAME    UUID                                  TYPE      DEVICE
eth0 xxxx-xxxx-xxxx-xxxx ethernet eth0



————————-

6️⃣ فقط Connectionهای فعال
دستوری که خودت نوشتی:
nmcli connection show --active

یا کوتاه‌تر:
nmcli con show --active

فقط اتصال‌های فعال را نمایش می‌دهد.


——————————

7️⃣ بالا آوردن Connection
مثلاً:
nmcli connection up eth0

یعنی Connection مربوط به eth0 را فعال کن.
پایین آوردن:
nmcli connection down eth0


—————————-

8️⃣ تغییر IP
اینجا یکی از قسمت‌های مهم nmcli است.
فرض کنیم Connection ما اسمش eth0 است.
می‌خواهیم IP را:
192.168.1.20/24

قرار دهیم.
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.20/24

Gateway:
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1

DNS:
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8"

و مشخص می‌کنیم IP به صورت دستی تنظیم شود:
sudo nmcli connection modify eth0 ipv4.method manual

بعد Connection را دوباره فعال می‌کنیم:
sudo nmcli connection down eth0
sudo nmcli connection up eth0



—————————

9️⃣ DHCP با nmcli
اگر بخواهیم IP را DHCP بگیریم:
sudo nmcli connection modify eth0 ipv4.method auto

بعد:
sudo nmcli connection down eth0
sudo nmcli connection up eth0

حالا DHCP Server برای سیستم IP می‌فرستد.


———————-

🔟 یک مثال واقعی
فرض کن سرور Linux داری.
می‌خواهی:
IP      → 192.168.1.50/24
Gateway → 192.168.1.1
DNS → 8.8.8.8

تنظیم کنیم:
sudo nmcli con mod eth0 ipv4.addresses 192.168.1.50/24
sudo nmcli con mod eth0 ipv4.gateway 192.168.1.1
sudo nmcli con mod eth0 ipv4.dns 8.8.8.8
sudo nmcli con mod eth0 ipv4.method manual

بعد:
sudo nmcli con down eth0
sudo nmcli con up eth0

بررسی:
ip addr
ip route
nmcli connection show




—————————


1️⃣1️⃣ nmtui
یک ابزار جالب دیگر:
nmtui

برخلاف nmcli که Command Line است، nmtui یک رابط متنی تعاملی دارد.
یعنی داخل Terminal یک محیط منویی می‌بینی.
مثلاً:
┌───────────────────────────┐
│ NetworkManager TUI │
│ │
│ Edit a connection │
│ Activate a connection │
│ Set system hostname │
└───────────────────────────┘

برای کسی که نمی‌خواهد تمام Syntaxهای nmcli را حفظ کند، خیلی راحت است.



——————-

1️⃣2️⃣ وضعیت NetworkManager
سرویس:
systemctl status NetworkManager

ری‌استارت:
sudo systemctl restart NetworkManager

⚠️ چیزی که نوشتی:
systemctl restart networkmanager

ممکن است روی بعضی سیستم‌ها به خاطر نام Unit کار کند، اما نام استاندارد سرویس در سیستم‌های مبتنی بر NetworkManager معمولاً:
NetworkManager

است.


———————-

1️⃣3️⃣ /etc/resolv.conf
قبلاً خیلی وقت‌ها مستقیماً:
/etc/resolv.conf

را برای DNS تغییر می‌دادند.
مثلاً:
nameserver 8.8.8.8

اما در سیستم‌های جدید، این فایل ممکن است توسط یکی از سرویس‌های مدیریت شبکه مثل:
NetworkManager
systemd-resolved

مدیریت شود.
بنابراین ممکن است تغییر دستی آن دائمی نباشد.
📌 برای تنظیم DNS بهتر است از ابزار مدیریت شبکه خود سیستم استفاده کنی.
مثلاً با NetworkManager:
nmcli con mod eth0 ipv4.dns 8.8.8.8




—————————

1️⃣4️⃣ mtr چیست؟
mtr یکی از ابزارهای بسیار خوب برای Network Troubleshooting است.
ترکیبی از ایده‌های:
ping + traceroute

است.
مثلاً:
mtr google.com

مسیر Packet را نمایش می‌دهد و همزمان اطلاعاتی درباره Latency و Packet Loss هر Hop می‌دهد.
مثلاً:
HOST              Loss%   Snt   Last   Avg
192.168.1.1 0.0% 20 1ms 1ms
10.x.x.x 0.0% 20 5ms 5ms
...
google.com 0.0% 20 30ms 31ms

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





—————————

1️⃣5️⃣ dhclient چی شد؟
dhclient یک DHCP Client قدیمی و معروف بود.
مثلاً قبلاً ممکن بود ببینی:
dhclient eth0

برای گرفتن IP از DHCP.
اما نکته‌ای که گفتی را این‌طور حفظ کن:
در بسیاری از سیستم‌های جدید که NetworkManager مدیریت شبکه را بر عهده دارد، معمولاً نیازی نیست مستقیماً

dhclient
را اجرا کنیم.

NetworkManager خودش DHCP را مدیریت می‌کند.
مثلاً:
nmcli con mod eth0 ipv4.method auto
nmcli con up eth0


————————

1️⃣6️⃣ Desktop Linux چطور؟
در Desktop معمولاً اصلاً لازم نیست Terminal باز کنی.
مثلاً در GNOME:
Settings
↓
Network
↓
Wired / Wi-Fi
↓
IPv4
↓
Automatic / Manual

و می‌توانی IP، Gateway و DNS را از رابط گرافیکی تنظیم کنی.
در KDE هم تنظیمات شبکه از رابط گرافیکی خودش انجام می‌شود.
اما پشت صحنه، در بسیاری از سیستم‌ها NetworkManager مدیریت اتصال را انجام می‌دهد.
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و ششم 🐧
3 : فرمان های اولیه در عیب یابی شبکه
———————
اینجا وارد بخش Network Troubleshooting می‌شویم؛ یعنی وقتی شبکه مشکل دارد، بتوانیم مرحله‌به‌مرحله بفهمیم مشکل دقیقاً کجاست.

———————


1️⃣ ping — اولین ابزار عیب‌یابی
ping برای بررسی دسترسی و ارتباط IP استفاده می‌شود.
مثلاً:
ping 8.8.8.8

یا:
ping google.com

اگر جواب بگیری:
64 bytes from ...

یعنی ارتباط برقرار است.
مثال واقعی
فرض کن سرور اینترنت ندارد.
اول:
ping 192.168.1.1

اگر Gateway جواب داد، شبکه داخلی احتمالاً سالم است.
بعد:
ping 8.8.8.8

اگر این هم جواب داد، اینترنت از نظر IP در دسترس است.
بعد:
ping google.com

اگر این آخری جواب نداد ولی 8.8.8.8 جواب داد، احتمالاً مشکل DNS است.
🧠 این سه تست خیلی مهم‌اند:
ping Gateway
↓
ping IP Internet
↓
ping Domain


—————————-

2️⃣ traceroute — مسیر Packet را ببین
فرمان:
traceroute google.com

نشان می‌دهد Packet برای رسیدن به مقصد از چه Hopهایی عبور می‌کند.
مثلاً:
1   192.168.1.1
2 10.10.0.1
3 ...
4 ...
5 google.com

هر خط تقریباً یک Router/Hop در مسیر است.
مثال واقعی
فرض کن:
ping google.com

داریم ولی Latency خیلی بالاست.
با:
traceroute google.com

می‌توانیم ببینیم تأخیر از کدام بخش مسیر بیشتر شده است.
📌 در بعضی سیستم‌ها ممکن است لازم باشد نصبش کنی:
sudo apt install traceroute


——————-

3️⃣ dig — بررسی DNS
dig یکی از ابزارهای حرفه‌ای DNS است.
مثلاً:
dig google.com

اطلاعاتی درباره DNS Query و پاسخ DNS نشان می‌دهد.
اگر بخواهی مستقیماً از یک DNS خاص سؤال کنی:
dig @8.8.8.8 google.com

یعنی:
از DNS Server

8.8.8.8
درباره

google.com
سؤال کن.



———————

4️⃣ host
ساده‌تر از dig است:
host google.com

مثلاً:
google.com has address xxx.xxx.xxx.xxx

برای بررسی سریع DNS خیلی کاربردی است.





———————————-

5️⃣ nslookup
یکی دیگر از ابزارهای DNS:
nslookup google.com

مثلاً:
Server: 8.8.8.8
Name: google.com
Address: xxx.xxx.xxx.xxx

پس:
dig
host
nslookup

هر سه برای DNS Troubleshooting کاربرد دارند، ولی dig معمولاً جزئیات بیشتری می‌دهد.



———————————

6️⃣ iftop — چه کسی دارد ترافیک مصرف می‌کند؟
iftop برای مشاهده مصرف شبکه به صورت لحظه‌ای استفاده می‌شود.
مثلاً:
sudo iftop

می‌توانی ببینی:
Client A  → Server
Client B → Server
Client C → Server

و چه مقدار Traffic بین آن‌ها ردوبدل می‌شود.
مثال واقعی
فرض کن سرورت ناگهان اینترنت زیادی مصرف می‌کند.
به جای حدس زدن:
sudo iftop

را اجرا می‌کنی و می‌بینی کدام ارتباط‌ها بیشترین Traffic را دارند.
📌 نصب در Debian/Ubuntu:
sudo apt install iftop



———————

7️⃣ netstat
فرمانی که نوشتی:
natstat

احتمالاً منظورت:
netstat

است.
netstat برای مشاهده اطلاعات شبکه استفاده می‌شد؛ مثل:
Connectionها
Portهای باز
Listening Serviceها
Routing Table
Interface Statistics
مثلاً:
netstat -tuln

یعنی Portهایی که در حال Listen هستند را ببین.
مثلاً:
Proto Local Address
tcp 0.0.0.0:22
tcp 0.0.0.0:80

یعنی سرویس‌هایی روی پورت‌های 22 و 80 در حال Listen هستند.
⚠️ netstat در سیستم‌های جدید تا حد زیادی با ss جایگزین شده است.


——————
8️⃣ ss — نسخه مدرن‌تر
امروزه بیشتر از:
ss

استفاده می‌کنیم.
مثلاً:
ss -tuln

برای مشاهده TCP/UDPهای Listening.
معنی:
-t → TCP
-u → UDP
-l → Listening
-n → نمایش عددی

برای دیدن Connectionهای فعال:
ss -tun

و برای اینکه بفهمیم کدام Process از Port استفاده می‌کند:
sudo ss -tulpn

این یکی را خیلی خوب یاد بگیر. 👌


————————-

9️⃣ nc یا Netcat

Netcat یکی از ابزارهای بسیار کاربردی برای تست Connection و Port است.
مثلاً:
nc -vz 192.168.1.10 22

یعنی:
ببین آیا می‌توانم به پورت 22 این سیستم وصل شوم؟

اگر پورت باز باشد معمولاً چیزی شبیه:
Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!

می‌بینی.
مثال واقعی
فرض کن SSH به سرور وصل نمی‌شود.
اول:
ping 192.168.1.10

بعد:
nc -vz 192.168.1.10 22

اگر Ping جواب دهد ولی nc روی 22 شکست بخورد، احتمالاً مشکل مربوط به SSH Service، Firewall یا Port است.

——————-

🔟 Wireshark
حالا می‌رسیم به یکی از معروف‌ترین ابزارهای Network Troubleshooting:
Wireshark
Wireshark به ما اجازه می‌دهد Packetهای شبکه را Capture و تحلیل کنیم.
مثلاً وقتی:
Computer
↓
Network Card
↓
Packet
↓
Network

اطلاعات ردوبدل می‌شود، Wireshark می‌تواند Packetها را Capture کند.
مثلاً می‌توانی ببینی:
Source IP
Destination IP
Protocol
Port
Packet Size
TCP Flags


——————

1️⃣1️⃣ مثال Wireshark
فرض کن:
ping 8.8.8.8

می‌زنی.
در Wireshark می‌توانی Packetهای:
ICMP Echo Request
ICMP Echo Reply

را ببینی.
یا مثلاً وقتی وارد یک سایت HTTPS می‌شوی، می‌توانی ارتباطات TCP و TLS را مشاهده کنی.
📌 نکته مهم:
Wireshark فقط برای دیدن «اینترنت» نیست؛ برای تحلیل پروتکل‌ها و فهمیدن اینکه واقعاً روی شبکه چه اتفاقی می‌افتد استفاده می‌شود.

—————-

🧠 یک سناریوی واقعی Troubleshooting
فرض کن کاربر می‌گوید:
«سرورم اینترنت نداره.»

تو این ترتیب را برو:
مرحله 1 — Interface
ip addr

مرحله 2 — Gateway
ip route

مرحله 3 — Gateway را Ping کن
ping 192.168.1.1

مرحله 4 — IP اینترنت
ping 8.8.8.8

مرحله 5 — DNS
ping google.com

مرحله 6 — مسیر
traceroute google.com

مرحله 7 — بررسی DNS
dig google.com

مرحله 8 — بررسی Port
nc -vz google.com 443

مرحله 9 — بررسی Connectionها
ss -tulpn

مرحله 10 — اگر هنوز مشکل پیدا نشد
برو سراغ:
Wireshark

و Packetها را بررسی کن.

——————
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و هفتم 🐧
4 : پیکربندی dns در لینوکس
———————
اینجا می‌خواهیم یاد بگیریم لینوکس از کجا می‌فهمد برای تبدیل google.com به IP باید از چه DNS Serverای استفاده کند.

به‌طور کلی دو روش مهمی که در جزوه‌ات گفتی:
روش سنتی با /etc/resolv.conf
استفاده از systemd-resolved

————————

1️⃣ روش سنتی؛ /etc/resolv.conf
فایل:
/etc/resolv.conf

یکی از معروف‌ترین مکان‌های تنظیم DNS در Linux است.
مثلاً:
nameserver 8.8.8.8
nameserver 1.1.1.1

یعنی سیستم برای DNS Query می‌تواند از این Serverها استفاده کند.
مثلاً وقتی می‌زنی:
ping google.com

سیستم ابتدا باید IP google.com را پیدا کند و برای این کار DNS را Query می‌کند.

———————

2️⃣ مشکل روش سنتی چیست؟
در Linuxهای جدید، /etc/resolv.conf ممکن است توسط یک سرویس دیگر مدیریت شود.
مثلاً:
NetworkManager
systemd-resolved

بنابراین ممکن است دستی بنویسی:
nameserver 8.8.8.8

ولی بعد از Restart یا تغییر Connection، تنظیماتت دوباره تغییر کند.
🧠 پس:
resolv.conf
را بشناس، ولی در سیستم‌های جدید بهتر است بفهمی چه سرویسی آن را مدیریت می‌کند.



——————-
3️⃣ systemd-resolved چیست؟
systemd-resolved یک سرویس برای مدیریت و Resolve کردن DNS در سیستم‌های Linux مبتنی بر systemd است.
به زبان ساده:
Application
↓
systemd-resolved
↓
DNS Server
↓
IP Address

مثلاً:
google.com
↓
systemd-resolved
↓
8.8.8.8
↓
IP


—————-

4️⃣ فعال کردن systemd-resolved
دستوری که نوشتی:
systemctl --now enable systemd-resolved

درست است.
این دستور دو کار انجام می‌دهد:
enable
→ سرویس را برای Bootهای بعدی فعال می‌کند.

--now
→ همین الان هم سرویس را Start می‌کند.

می‌توانی وضعیتش را ببینی:
systemctl status systemd-resolved




———————-

5️⃣ تنظیم DNS در systemd-resolved
در سیستم‌های جدید می‌توان تنظیمات را در مسیرهای مربوط به systemd-resolved قرار داد.
یک مسیر مهم:
/etc/systemd/resolved.conf

و برای تنظیمات Drop-in می‌توان از:
/etc/systemd/resolved.conf.d/

استفاده کرد.
مثلاً:
/etc/systemd/resolved.conf.d/dns_servers.conf

————————

6️⃣ مثال تنظیم DNS
مثلاً:
sudo mkdir -p /etc/systemd/resolved.conf.d

بعد:
sudo nano /etc/systemd/resolved.conf.d/dns_servers.conf

و مثلاً:
[Resolve]
DNS=8.8.8.8 1.1.1.1

بعد سرویس را Restart می‌کنیم:
sudo systemctl restart systemd-resolved


—————-

7️⃣ resolvectl

resolvectl

است.
این ابزار برای تعامل با systemd-resolved استفاده می‌شود.
——————-
8️⃣ دیدن DNS فعلی
resolvectl dns

مثلاً ممکن است ببینی:
Link 2 (ens33)
Current Scopes: DNS
DNS Servers: 192.168.1.1

یعنی Interface ens33 از DNS Server مشخص‌شده استفاده می‌کند.

———————

9️⃣ دیدن Domain
فرمان:
resolvectl domain

اطلاعات مربوط به DNS Domainهایی که برای Linkها تنظیم شده‌اند را نشان می‌دهد.
همچنین:
resolvectl status

یکی از بهترین دستورها برای دیدن وضعیت کلی DNS است.
مثلاً:
Global
Protocols: -LLMNR -mDNS
resolv.conf mode: stub

Link 2 (ens33)
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1


————————

🔟 تست DNS با resolvectl
مثلاً:
resolvectl query google.com

یعنی:
google.com
را Resolve کن و IP آن را نشان بده.

این برای Troubleshooting خیلی خوب است.




——————-

1️⃣1️⃣ DNS برای یک Interface خاص
یکی از قابلیت‌های جالب resolvectl این است که می‌توانی DNS را برای یک Interface تنظیم کنی.
مثلاً:
sudo resolvectl dns ens33 8.8.8.8

یعنی DNS مربوط به Interface ens33 را روی:
8.8.8.8

قرار بده.
برای Domain Search هم می‌توان تنظیماتی انجام داد، مثلاً:
sudo resolvectl domain ens33 example.local


————-

1️⃣2️⃣ چرا DNS برای VPN مهم است؟
این قسمت خیلی کاربردی است.
فرض کن VPN وصل شده‌ای و VPN یک DNS داخلی دارد:
10.10.10.10

و شبکه VPN شامل Domainهای داخلی است:
server.company.local

اگر DNS درست تنظیم نشود، ممکن است:
ping server.company.local

کار نکند، حتی اگر خود VPN کاملاً وصل باشد.
پس:
VPN
↓
Network Interface
↓
DNS
↓
Internal Domain

باید درست تنظیم شود.

——————

1️⃣3️⃣ DNS روی Proxy چه ارتباطی دارد؟
اینجا یک نکته مهم وجود دارد:
Proxy و DNS یکی نیستند.
مثلاً Proxy می‌تواند ترافیک HTTP/HTTPS را عبور دهد، اما DNS ممکن است همچنان از DNS معمولی سیستم استفاده کند.
پس باید مشخص کنیم DNS Query کجا انجام می‌شود:
Application
↓
Proxy
↓
Internet

یا:
Application
↓
DNS Query
↓
DNS Server

در بعضی VPNها و Proxyها قابلیت‌هایی برای Remote DNS Resolution وجود دارد؛ یعنی به جای اینکه سیستم خودش نام دامنه را Resolve کند، Query از مسیر Proxy/VPN انجام می‌شود.
این موضوع برای جلوگیری از DNS Leak هم اهمیت دارد.

——————-

🧠 یک مثال واقعی
فرض کن:
VPN Interface → tun0
DNS Server → 10.10.10.1

و یک سایت داخلی داری:
git.company.local

بدون DNS مناسب:
ping git.company.local

ممکن است:
Name or service not known

بدهد.
اما وقتی DNS مربوط به VPN درست تنظیم شود:
git.company.local
↓
10.10.10.1
↓
IP داخلی

سیستم می‌تواند Server را پیدا کند.
❤1