Linux: إدارة المستخدمين والمجموعات — النظام متعدد المستخدمين

لينكس مُصمَّم كنظام تشغيل متعدد المستخدمين من الأساس. سواء كان فريق تطوير يتشارك خادمًا أو تطبيقات مختلفة تحتاج صلاحيات تشغيل معزولة، فإن إدارة المستخدمين والمجموعات هي مهارة أساسية.

📋 المتطلبات المسبقة: يجب إكمال

1. ما ستتعلمه


2. قصة عن أعضاء فريق يتشاركون خادمًا

(1) الألم: زميل جديد يحتاج حسابًا

حصل فريق شياو مينغ على زميل جديد بوب يحتاج حسابًا على خادم التطوير. على ويندوز، كان عليك فتح "إدارة الحاسوب" → "المستخدمون والمجموعات" → نقر باليمين للإنشاء (بالإضافة للتعامل مع التفعيل وسياسات كلمات المرور).

(2) حل لينكس بسطر واحد

BASH
sudo useradd -m -s /bin/bash bob
sudo passwd bob
# Enter bob's password
sudo usermod -aG developers,sudo bob

ثلاثة أوامر، 30 ثانية، انتهى.

(3) الفائدة: أساس التعاون متعدد الأشخاص

بعد إنشاء المستخدم، يمكن لبوب تسجيل الدخول بـssh bob@server، ويمتلك دليله المنزلي الخاص، ويمكنه الوصول إلى دليل مجموعة developers المشتركة، واستخدام sudo لتثبيت البرمجيات.


3. نقاط المعرفة

(1) الملفات المتعلقة بالمستخدمين

BASH
/etc/passwd    # معلومات حسابات المستخدمين
/etc/shadow    # كلمات المرور المشفرة (قابل للقراءة بالجذر فقط)
/etc/group     # معلومات المجموعات

كل سطر في /etc/passwd يتكون من 7 حقول مفصولة بنقطتين:

TEXT

alice:x:1001:1001:Alice Wang:/home/alice:/bin/bash
└───┘ └ └───┘ └───┘ └───────┘ └─────────┘ └─────────
  │   │   │     │       │           │           └── Shell الولوجي
  │   │   │     │       │           └────────────── الدليل المنزلي
  │   │   │     │       └────────────────────────── الاسم الكامل/الوصف
  │   │   │     └────────────────────────────────── معرّف المجموعة (GID)
  │   │   └──────────────────────────────────────── معرّف المستخدم (UID)
  │   └──────────────────────────────────────────── حامل كلمة المرور (كلمة المرور المشفرة الفعلية في shadow)
  └──────────────────────────────────────────────── اسم المستخدم

(2) إنشاء المستخدمين وإدارتهم

BASH
# إنشاء مستخدم (مع دليل منزلي وShell محدد)
sudo useradd -m -s /bin/bash alice

# تعيين كلمة المرور
sudo passwd alice

> ⚠️ ملاحظة: المستخدمون المنشأون حديثًا بكلمات مرور افتراضية أو ضعيفة عُرضة بشكل كبير لهجمات القوة الغاشمة. في الإنتاج، أجبر المستخدمين دائمًا على تغيير كلمة مرورهم عند أول ولوج (`chage -d 0 alice`) واضبط سياسات تعقيد كلمات المرور.

# حذف مستخدم
sudo userdel bob           # الاحتفاظ بالدليل المنزلي
sudo userdel -r bob        # حذف المستخدم والدليل المنزلي

# تعديل معلومات المستخدم
sudo usermod -l newname alice     # تغيير اسم المستخدم

> ℹ️ ملاحظة: أوبونتو لديه أيضًا أمر `adduser`، وهو غلاف تفاعلي حول `useradd` — ينشئ الدليل المنزلي تلقائيًا، ويطلب كلمة المرور، وينسخ قوالب `/etc/skel`. `useradd` أكثر مرونة لكن يتطلب معاملات يدوية؛ `adduser` أكثر ودًا لكن أقل تخصيصًا. استخدم `useradd` في سكريبتات الإنتاج؛ `adduser` جيد للعمليات اليدوية.
sudo usermod -d /home/newhome alice  # تغيير الدليل المنزلي
sudo usermod -L alice              # قفل المستخدم (تعطيل الولوج)
sudo usermod -U alice              # إلغاء قفل المستخدم

(3) إنشاء المجموعات وإدارتها

BASH
# إنشاء مجموعة
sudo groupadd developers
sudo groupadd devops

# حذف مجموعة
sudo groupdel oldteam

# إضافة مستخدم إلى مجموعة
sudo usermod -aG developers alice    # -aG = إلحاق بالمجموعة
sudo gpasswd -a bob developers       # طريقة بديلة

# إزالة مستخدم من مجموعة
sudo gpasswd -d bob developers

# عرض مجموعات مستخدم
groups alice
# Output: alice : alice sudo developers

(4) رفع الصلاحيات بـsudo

sudo يتيح للمستخدمين العاديين تنفيذ أوامر كجذر (أو كمستخدم محدد).

BASH
# تعديل إعدادات sudoers (لا تعدّل /etc/sudoers مباشرة أبدًا)
sudo visudo

> ⚠️ ملاحظة: لا تعدّل `/etc/sudoers` مباشرة بـ`vim` أو `nano` أبدًا! إذا كان هناك خطأ نحوي، سيتعطل `sudo` بالكامل ولن تتمكن من رفع الصلاحيات لإصلاحه. `visudo` يقوم بفحص نحوي تلقائي قبل الحفظ — إنها الطريقة الآمنة الوحيدة للتعديل.

إعدادات شائعة:

BASH
# السماح لكل أعضاء مجموعة sudo باستخدام sudo
%sudo ALL=(ALL:ALL) ALL

# السماح لمستخدم محدد بتشغيل sudo بدون كلمة مرور
alice ALL=(ALL) NOPASSWD: ALL

# التقييد بأوامر محددة فقط
bob ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

(5) ▶ مثال: إنشاء مستخدم وضبط بيئته

BASH
# إنشاء المستخدم alice
sudo useradd -m -s /bin/bash alice

# تعيين كلمة المرور
sudo passwd alice

# إضافة alice إلى مجموعة sudo (لكي تتمكن من رفع الصلاحيات)
sudo usermod -aG sudo alice

# التحقق
id alice
# uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)

# التبديل إلى alice والاختبار
sudo -u alice whoami
# alice

الإخراج:

TEXT
uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)
alice

(6) ▶ مثال: إنشاء مجموعة مشتركة للفريق

BASH
# إنشاء مجموعة التطوير
sudo groupadd developers

# إضافة أعضاء الفريق إلى مجموعة developers
sudo usermod -aG developers alice
sudo usermod -aG developers bob
sudo usermod -aG developers charlie

# عرض أعضاء المجموعة
grep developers /etc/group
# developers:x:1005:alice,bob,charlie

الإخراج:

TEXT
developers:x:1005:alice,bob,charlie

(7) ▶ مثال: ضبط sudo بدون كلمة مرور

BASH
# التعديل بـvisudo (الطريقة الآمنة)
sudo visudo

# أضف في نهاية الملف (بعد سطر %sudo):
alice ALL=(ALL) NOPASSWD: ALL

# أو أنشئ ملفًا مستقلًا
echo "alice ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/alice
sudo chmod 440 /etc/sudoers.d/alice

# التحقق
sudo -l -U alice

الإخراج:

TEXT
User alice may run the following commands on server:
    (ALL) NOPASSWD: ALL

(8) ▶ مثال: عرض المستخدمين المتصلين

TEXT
# المستخدمون المسجلون حاليًا
who
# alice   pts/0        2026-07-07 09:15 (192.168.1.100)
# bob     pts/1        2026-07-07 10:23 (192.168.1.101)

# معلومات أكثر تفصيلًا
w
# 10:30:45 up 2 days,  1 user,  load average: 0.08, 0.03, 0.01
# USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
# alice    pts/0    192.168.1.100     09:15    0.00s  0.23s  0.02s w

# عرض سجلات الولوج الأخيرة
last | head -10

# عدّ المستخدمين المسجلين حاليًا
who | wc -l

الإخراج:

TEXT
alice   pts/0        2026-07-07 09:15 (192.168.1.100)
bob     pts/1        2026-07-07 10:23 (192.168.1.101)
 10:30:45 up 2 days,  1 user,  load average: 0.08, 0.03, 0.01
 USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
 alice    pts/0    192.168.1.100     09:15    0.00s  0.23s  0.02s w
alice    pts/0    192.168.1.100     Mon Jul  7 09:15   still logged in
bob      pts/1    192.168.1.101     Mon Jul  7 10:23   still logged in
2

(9) ▶ مثال: قفل وإلغاء قفل المستخدمين

BASH
# قفل مستخدم (الحسابات المقفولة لا يمكنها الولوج)
sudo usermod -L bob

# التحقق من حالة القفل
sudo grep bob /etc/shadow
# bob:!$6$...    ← العلامة ! قبل حقل كلمة المرور تشير إلى القفل

# محاولة الولوج (يجب أن تُرفض)
ssh bob@localhost
# Permission denied

# إلغاء قفل المستخدم
sudo usermod -U bob

الإخراج:

TEXT
bob:!$6$xyz...:19600:0:99999:7:::
Permission denied, please try again.
bob:$6$abc...:19600:0:99999:7:::

(10) ▶ مثال شامل: إعداد حساب خادم كامل لمطور جديد

BASH
#!/bin/bash
# add-dev-user.sh - إنشاء حساب لمطور جديد

# التحقق من المعاملات
if [ $# -ne 1 ]; then
    echo "Usage: sudo ./add-dev-user.sh <username>"
    exit 1
fi

USERNAME=$1

echo "Creating user $USERNAME..."

# 1. إنشاء المستخدم
sudo useradd -m -s /bin/bash "$USERNAME"

# 2. تعيين كلمة المرور (تفاعلي)
sudo passwd "$USERNAME"

# 3. إضافته إلى مجموعتي developers وsudo
sudo usermod -aG developers,sudo "$USERNAME"

# 4. إنشاء دليل SSH
sudo mkdir -p /home/$USERNAME/.ssh
sudo chmod 700 /home/$USERNAME/.ssh

# 5. نسخ إعدادات القالب
sudo cp /etc/skel/.bashrc /home/$USERNAME/
sudo cp /etc/skel/.profile /home/$USERNAME/

# 6. تعيين الصلاحيات الصحيحة
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME/

echo "User $USERNAME created!"
echo "Please run manually: sudo passwd $USERNAME to set password"

❓ أسئلة شائعة

س: ما الفرق بين الجذر والمستخدم العادي؟ ج: \1

س: لماذا نستخدم sudo بدلًا من الولوج كجذر مباشرة؟ ج: الأمان + التدقيق: الأوامر المنفذة بـsudo تُسجَّل (/var/log/auth.log)، لذا يمكنك تتبع من نفذ ماذا ومتى. الولوج المباشر كجذر لا يميّز بين المشغلين.

س: ماذا يحذف userdel -r؟ ج: الدليل المنزلي للمستخدم وبريده. بدون -r، يُحتفظ بالدليل المنزلي — مفيد عندما تحتاج الاحتفاظ بالبيانات (مثلًا أثناء التسليمات).

س: لماذا لا يمكن للمستخدمين العاديين قراءة /etc/shadow؟ ج: لأنه يخزّن تجزئات كلمات المرور المشفرة. رغم أن التجزئات لا يمكن عكسها مباشرة، يمكن للمهاجمين استخدام جداول قوس قزح لهجمات القوة الغاشمة. لهذا ملف shadow له صلاحيات 600، قابل للقراءة بالجذر فقط.

س: هل يتسبب اتصال عدة مستخدمين عبر SSH في نفس الوقت في تعارضات؟ ج: لا. كل اتصال SSH جلسة مستقلة بعملية Shell خاصة بها. لكن الكتابة في نفس الملف في وقت واحد قد تسبب تعارضات (استخدم أقفال الملفات لحل ذلك).


📖 ملخص


📝 تمارين

  1. أساسي (صعوبة ⭐): أنشئ مستخدمًا جديدًا student1، عيّن كلمة مرور، أنشئ دليلًا منزليًا، ثم استخدم who وw لعرض معلومات المستخدمين المسجلين حاليًا
  2. متوسط (صعوبة ⭐⭐): أضف student1 إلى مجموعة sudo وتحقق من عمل sudo، ثم أنشئ مجموعة مشتركة team وأضف مستخدمين إليها
  3. متقدم (صعوبة ⭐⭐⭐): استخدم sudo -l -U student1 لفحص صلاحيات sudo لذلك المستخدم، ثم أنشئ ملف إعدادات تحت /etc/sudoers.d/ لتقييد student1 بتشغيل sudo apt وsudo systemctl فقط
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%