Translation(s): English - Español - Français - Italiano - Русский

(!) ?Discussion


ar/Root > sudo


يتيح الأمر Sudo (اختصارا لـ Super User do) في الأنظمة الشبيهة بيونكس إمكانية إعطاء صلاحيات مستخدم لمستخدم آخر أو مجموعة أخرى من المستخدمين. و الهدف الرئيسي من هذا الأمر هو إعطاء صلاحيات مدير النظام (root) إلى مستخدم آخر أو توزيعها على مجموعة من المستخدمين. و هذا غاية في الأهمية بالنسبة لمدراء الأنظمة حيث أن أي مدير نظام في لينوكس لا يحبذ العمل بحساب الroot لما قد يسبب من خلل في النظام في حال استعمال أمر ما عشوائيا. من جهة أخرى فإنه يسمح أيضا بتفادي الاستعمال المتكرر و الممل للأمر su كلما أراد مدير النظام عمل أمر روتيني مثل تثبيت أو تحديث برنامج مثلا. إلى كل هذه المزايا تنضاف ميزة حفظ أثر (log) عن كل الأحداث في ملف لمعرفة “من فعل و ماذا فعل و متى فعل”..

Sudo ليس مفعل افتراضيا في دبيان

  • عندما تقوم بتنصيب النظام, ستقوم باختيار كلمة مرور لحساب المستخدم الجذر.
  • لتنفيذ الاوامر بصفتك المستخدم الجذر, افتح الطرفية بصفتك المستخدم الجذر. فقط توجه الى:
    • (Applications > Accessories > Root Terminal), او استخدم الامر su.

الأمر sudo موجود في كافة التوزيعات و غالبا ما يكون مثبتا. في حال لم يكن مثبتا فاستعمل مدير الحزم الخاص بتوزيعتك لتثبيته.

يتكون sudo من ثلاثة أجزاء :

سنتحدث اولا عن كيفية استخدام الامر بشكل عام, ثم نتحدث عن تعديله وتجهيزه وتخيرا عن خصائصه.

 sudo ثم الامر

للبرامج الرسومية

gksudo ثم اسم البرنامج

في واجهة كيدي kde (للبرامج الرسومية)

kdesudo ثم اسم البرنامج

فتح ملف الاعداد, والتعديل عليه

visudo

الشكل الافتراضي لملف الإعدادات في دبيان:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL

يقوم هذا الملف بتعريف نوعين من المعلومات : الآلياس (alias) : و هي عبارة عن نوع من المتغيرات دورها تعريف مجموعة من المستخدمين (User alias) أو مجموعة من الأجهزة حسب العنوان IP أو الاسم (Host alias) أو مجموعة من الأوامر (Cmnd alias).

بيانات المستخدمين : و هي أسطر تستعمل الآلياس لتحديد مستخدمين معينين لاستعمال أوامر معينة من أجهزة معينة.

المبدأ هو كالتالي : نقوم بتعيين مجموعة من المستخدمين بواسطة User_Alias (يمكن أن تضم هذه المجموعة أسماء مستخدمين أو أسماء مجموعات من المستخدمين). نقوم بتعيين مجموعة من الأوامر المرغوبة بواسطة Cmnd_Alias. إذا أردنا حصر تنفيذ هؤلاء المستخدمين لهذه الأوامر على أجهزة معينة فإننا نقوم بتعيين هذه الأجهزة بواسطة Host_Alias.

لمزيد من التوضيح نأخذ المثال التالي : لدينا ثلاث مستخدمين عاديين للنظام amine و ahmed و hassan. نريد أن نزيد في بعض صلاحياتهم ليتمكنوا من تثبيت البرامج و تحديثها بواسطة apt-get. و ليتمكنوا من تغيير كلمات السر لأي مستخدم بواسطة passwd.

لفعل ذلك نجعل الملف sudoers كما يلي :

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification
# لاحظ الإضافة
User_Alias   ADMINS=amine,ahmed,hassan

# Cmnd alias specification
# لاحظ الإضافة
Cmnd_Alias   ADMINTASKS=/usr/bin/apt-get,/usr/bin/passwd

# User privilege specification
root    ALL=(ALL) ALL
# لاحظ الإضافة
ADMINS  ALL=ADMINTASKS

لاحظ الإضافات. الشرح :

User_Alias   ADMINS=amine,ahmed,hassan

هنا قمنا بتحديد ألياس لمجموعة من المستخدمين الثلاث الذين ستكون لهم صلاحيات مشتركة. لاحظ اسم آلياس المجموعة ADMINS يمكن تسميته كيف شئنا، المهم أنه يجب أن يكون دائما مكتوبا بأحرف كبيرة و هكذا جميع أسماء الألياس يجب أن تكتب بأحرف كبيرة.

Cmnd_Alias   ADMINTASKS=/usr/bin/apt-get,/usr/bin/passwd

هنا قمنا بتحديد آلياس لمجموعة من الأوامر سميناه ADMINTASKS

ADMINS  ALL=ADMINTASKS

هذا معناه أن أعضاء مجموعة ADMINS بإمكانهم تنفيذ الأوامر المعرفة ب ADMINTASKS من جميع الأجهزة ALL. للمعلومة فإنه يمكن أيضا الاستغناء عن الألياس هنا و استعمال الأسماء مباشرة مثلا :

amine    ALL=/usr/bin/apt-get,/usr/bin/passwd

هذا يعطي لamine صلاحية تنفيذ apt-get و passwd

لحصر هذه الصلاحيات على أجهزة معينة (مثلا localhost و 192.168.0.1) نضيف السطر التالي إلى الملف :

Host_Alias   HOSTS= localhost, 192.168.0.1

هنا قمنا بعمل آلياس سميناه HOSTS عرفنا من خلاله مجموعة من الأجهزة. نقوم أيضا بتعديل سطر بيانات المستخدم بتبديل ALL ب HOSTS ليصبح الملف كما يلي :

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification
# لاحظ الإضافة
Host_Alias   HOSTS= localhost, 192.168.0.1

# User alias specification
User_Alias   ADMINS=amine,ahmed,hassan

# Cmnd alias specification
Cmnd_Alias   ADMINTASKS=/usr/bin/apt-get,/usr/bin/passwd
# User privilege specification
root    ALL=(ALL) ALL
# لاحظ الإضافة
ADMINS  HOSTS=ADMINTASKS

ملاحظة : بعد حفظ الملف يمكنك التأكد من صحته بواسطة الأمر :

visudo -c

لتجربة ما قمنا بعمله نفتح شل بواسطة أحد المستخدمين الذين أعطيناهم الصلاحيات (مثلا amine) و ننفذ الأمر التالي الذي يعطي قائمة بالأوامر المتاحة :

sudo -l

سيطلب منك كلمة السر. يجب إدخال كلمة السر الخاصة بالمستخدم العادي :

amine@pc-amine:~$ sudo -l

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:
User amine may run the following commands on this host:
    (root) /usr/bin/apt-get, /usr/bin/passwd
amine@pc-amine:~$

ثم نقوم بتجربة أحد الأوامر الذي قمنا بالسماح لamine بتنفيذها (مثلا apt-get update) لو نفذنا الأمر بالطريقة العادية فإن النتيجة تكون كما يلي :

amine@pc-amine:~$ apt-get update
E: Could not open lock file /var/lib/apt/lists/lock - open (13 Permission denied)
E: Unable to lock the list directory

إذن فالطريقة الصحيحة للتنفيذ هي التالية :

amine@pc-amine:~$ sudo apt-get update

ملاحظة : إذا كان وقت تنفيذ sudo أقل من 15 دقيقة على تنفيذ سابق له فإنه لن يطلب منك كلمة السر. أما إذا كان أكثر فإنه سيطلبها منك. سنرى فيما بعد كيف نغير قيمة ال15 دقيقة

الكلمة المفتاحية ALL هذه الكلمة المفتاحية كما يدل اسمها فإنها تعني الكل و لمعرفة دورها فإني أضرب ثلاث أمثلة :

ADMINS ALL=ADMINTASKS رأينا سابقا أن ALL هنا يعني جميع الأجهزة

amine HOSTS=ALL و هذا معناه أن amine له كافة صلاحيات ال root على الأجهزة المعرفة ب HOSTS.

ALL ALL=ALL الكل له كل الصلاحيات. افعل هذا إذا كانت تريد التعجيل بتخريب نظامك.

إدخال مجموعات بدل أسماء المستخدمين قد تحتاج إلى جعل مجموعة كاملة من مجموعات نظامك تملك صلاحيات معينة. سيكون الأمر صعبا لو أًضفت كل اسم على حدة. لذا يمكنك إضافة اسم المجموعة كما يلي (نفترض وجود مجموعة اسمها devel في النظام) :

User_Alias   DEVELOPERS=amine,%devel

الألياس DEVELOPERS سيضم amine بالإضافة إلى كافة أعضاء المجموعة devel.

مثال آخر (الاستخدام هنا مباشر دون مرور بالألياس) :

%devel   ALL=/usr/bin/reboot

علامة النفي (!) يمكن استخدام علامة النفي لمنع تنفيذ أمر ما مع خيارات معينة. و أفضل مثال هو ما رأيناه في بداية الشرح حيث أعطينا لمجموعة من المستخدمين صلاحية استعمال الأمر passwd بحقوق root و هذا يمكنهم من تغيير أي كلمة سر بما فيها كلمة سر الroot نفسه. لمنع ذلك فإننا نعدل سطر ال Cmnd_alias كما يلي :

Cmnd_Alias   ADMINTASKS=/usr/bin/apt-get,/usr/bin/passwd,!/usr/bin/passwd root

تنفيذ أوامر بصلاحيات مستخدم آخر غير root نضيف اسم المستخدم بين قوسين قبل الأوامر :

amine    ALL=(ahmed)/usr/bin/whoami

amine يمكنه الآن تنفيذ whoami تحت اسم ahmed بالطريقة التالية :

amine@pc-amine:~$ sudo -u ahmed whoami
ahmed

لإعطاء amine كافة صلاحيات ahmed :

amine   ALL=(ahmed)ALL

الآن amine يستطيع تنفيذ ما يريد بصلاحيات ahmed بما فيه حذف مجلده الشخصي مثلا :

sudo -u ahmed rm -rf /home/ahmed

إلغاء طلب كلمة السر عند تنفيذ sudo لإلغاء طلب كلمة السر عند تنفيذ أوامر معينة باستعمال sudo نضيف الكلمة المفتاحية NOPASSWD. مثال :

ADMINS  ALL=NOPASSWD:ADMINTASKS
amine   ALL=(ahmed)NOPASSWD:/usr/bin/whoami

تعديل مدة الانتظار الافتراضية للمطالبة بإعادة إدخال كلمة السر كما قلت سابقا فإن مستخدم sudo يطالب بإدخال كلمة السر الخاصة به كلما مرت 15 دقيقة (في حالة عدم استخدام NOPASSWD). يمكن تغيير هذه القيمة الافتراضية بإضافة ما يلي إلى ملف الإعدادات :

Defaults        timestamp_timeout=30

هنا جعلنا مدة الانتظار ثلاثين دقيقة. إذا جعلنا هذه القيمة 0 فإن كلمة السر ستطلب دائما و إذا جعلناها سلبية فإن المدة ستكون لا منتهية. بمعنى أن المستخدم لن يطالب بإدخال كلمة السر ثانية إلا بعد تنفيذ الأمر sudo -k.

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset
Defaults        timestamp_timeout=45

# Host alias specification

# User alias specification
User_Alias      ADMINS=amine

# Cmnd alias specification
Cmnd_Alias      ADMINTASKS=/usr/bin/apt-get,/usr/bin/passwd

# User privilege specification
root    ALL=(ALL) ALL
ADMINS  ALL=ADMINTASKS

روابط خارجية

صفحة sudo