# فصل ششم: کاربران و گروه‌ها در لینوکس

## Linux Users & Groups

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

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

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

اما برای درک کامل Permissionها، باید بدانیم:

کاربر چیست؟
گروه چیست؟
سیستم چگونه کاربران را مدیریت می‌کند؟

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

---

# مفهوم User در لینوکس

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

هر کاربر دارای اطلاعات مشخصی است:

- نام کاربری
- شناسه کاربر (UID)
- گروه اصلی
- پوشه خانگی
- مجوزهای دسترسی

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

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

---

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

یکی از ویژگی‌های مهم لینوکس، Multi-user بودن آن است.

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

برای مثال:

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

- مدیر سیستم
- توسعه‌دهندگان
- سرویس‌های نرم‌افزاری
- کاربران معمولی

باشد.

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

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

---

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

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

---

# کاربر Root

Root قدرتمندترین کاربر سیستم است.

شناسه آن معمولاً:

    UID = 0

است.

Root می‌تواند:

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

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

---

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

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

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

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

---

# کاربران سیستمی

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

مثال:

- www-data برای وب‌سرورها
- mysql برای پایگاه داده
- sshd برای سرویس SSH

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

---

# مفهوم Group در لینوکس

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

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

مثال:

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

اعضا:

- Ali
- Sara
- Reza

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

    developers

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

حالا می‌توانیم مجوز فایل‌های پروژه را برای کل گروه تنظیم کنیم.

---

# User و Group چگونه با فایل‌ها ارتباط دارند؟

هر فایل در لینوکس دارای:

- مالک (User Owner)
- گروه مالک (Group Owner)

است.

مثال:

    -rw-r--r-- 1 amir developers project.txt

در این مثال:

مالک فایل:

    amir

گروه فایل:

    developers

است.

---

# مشاهده اطلاعات کاربر

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

    id

استفاده می‌کنیم.

مثال:

    id

خروجی:

    uid=1000(amir) gid=1000(amir) groups=1000(amir)

این اطلاعات شامل:

- UID
- GID
- گروه‌های کاربر

است.

---

# مشاهده کاربران وارد شده

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

    who

استفاده می‌شود.

مثال:

    who

---

دستور:

    w

اطلاعات بیشتری نمایش می‌دهد:

- کاربران فعال
- زمان ورود
- فعالیت فعلی

---

# فایل passwd

اطلاعات اصلی کاربران در فایل:

    /etc/passwd

ذخیره می‌شود.

برای مشاهده:

    cat /etc/passwd

هر خط مربوط به یک کاربر است.

نمونه:

    amir:x:1000:1000:Amir:/home/amir:/bin/bash

اطلاعات شامل:

- نام کاربر
- UID
- GID
- مسیر Home
- Shell پیش‌فرض

است.

---

# فایل shadow

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

    /etc/shadow

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

این فایل فقط توسط root قابل مشاهده است.

برای امنیت، رمزها به صورت Hash ذخیره می‌شوند، نه متن ساده.

---

# فایل group

اطلاعات گروه‌ها در:

    /etc/group

قرار دارد.

مشاهده:

    cat /etc/group

---

# ساخت کاربر جدید

برای ساخت کاربر جدید از:

    useradd

استفاده می‌شود.

مثال:

    sudo useradd ali

---

برای ساخت کاربر همراه با پوشه Home:

    sudo useradd -m ali

---

# ساخت کاربر با adduser

در برخی توزیع‌ها مانند Debian و Ubuntu دستور:

    adduser

وجود دارد.

مثال:

    sudo adduser ali

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

---

# تنظیم رمز عبور کاربر

برای تعیین رمز عبور:

    passwd

استفاده می‌شود.

مثال:

    sudo passwd ali

---

# حذف کاربر

برای حذف کاربر:

    sudo userdel ali

---

برای حذف همراه با Home:

    sudo userdel -r ali

---

# تغییر اطلاعات کاربر

برای تغییر تنظیمات کاربر:

    usermod

استفاده می‌شود.

مثال:

تغییر Shell:

    sudo usermod -s /bin/bash ali

---

# ایجاد گروه جدید

برای ساخت گروه:

    groupadd

استفاده می‌شود.

مثال:

    sudo groupadd developers

---

# اضافه کردن کاربر به گروه

مثال:

    sudo usermod -aG developers ali

اکنون کاربر ali عضو گروه developers است.

---

# UID و GID چیست؟

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

## UID

User ID

شناسه کاربر است.

مثال:

    UID=1000

---

## GID

Group ID

شناسه گروه است.

مثال:

    GID=1000

---

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

---

# sudo و مدیریت کاربران

بسیاری از عملیات مدیریت کاربران نیازمند دسترسی root هستند.

به همین دلیل از:

    sudo

استفاده می‌کنیم.

مثال:

    sudo useradd test

---

# امنیت در مدیریت کاربران

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

اصول مهم:

- برای هر شخص حساب جداگانه ایجاد کنید.
- از استفاده دائمی از root خودداری کنید.
- دسترسی‌های غیرضروری را حذف کنید.
- رمزهای قوی استفاده کنید.
- کاربران بلااستفاده را حذف کنید.

---

# تمرین‌های فصل ششم

## تمرین اول

مشاهده اطلاعات کاربر:

    id

---

## تمرین دوم

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

    who

---

## تمرین سوم

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

    sudo adduser testuser

---

## تمرین چهارم

ساخت گروه:

    sudo groupadd linuxusers

---

## تمرین پنجم

اضافه کردن کاربر به گروه:

    sudo usermod -aG linuxusers testuser

---

# جمع‌بندی فصل ششم

در این فصل یاد گرفتیم:

- User در لینوکس چیست.
- Group چه کاربردی دارد.
- تفاوت root و کاربران معمولی چیست.
- چگونه کاربران را مشاهده کنیم.
- چگونه کاربر جدید ایجاد کنیم.
- چگونه گروه‌ها را مدیریت کنیم.
- UID و GID چه هستند.
- فایل‌های مهم مدیریت کاربران کدام‌اند.

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

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

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