1. مقدمة: ما هو sudo؟
المعنى الأساسي ودور sudo
في أنظمة Linux وUnix، يعتبر أمر sudo أحد أهم الأوامر الأساسية.
كلمة sudo اختصار لـ superuser do، وهي أداة تتيح تشغيل الأوامر بصلاحيات المدير (root) مؤقتاً. بشكل افتراضي، لا يُسمح للمستخدم العادي بإجراء عمليات تؤثر على النظام ككل (مثل تثبيت الحزم أو تغيير الإعدادات). ولكن باستخدام sudo
، يمكن تنفيذ هذه العمليات الحساسة بشكل محدود.
على سبيل المثال، لتنفيذ أمر apt بصلاحية root:
sudo apt update
بهذه الطريقة، يعمل sudo كنظام يوازن بين الأمان وسهولة الإدارة، مما يجعل إدارة النظام آمنة وسهلة في نفس الوقت.
الفرق بين sudo و su
هناك أمر مشابه يُدعى su
، لكن بينهما فروق واضحة:
su
هو اختصار لـ “substitute user”، ويُستخدم للتبديل إلى مستخدم آخر (عادةً root). عند استخدام su، تصبح الجلسة بالكامل للمستخدم الآخر.- أما
sudo
، فهو يمنح صلاحيات المدير بشكل مؤقت للأمر فقط، مع بقاء المستخدم كما هو.
بمعنى آخر، su
يغير المستخدم على مستوى الجلسة، أما sudo
يرفع الصلاحيات على مستوى الأمر فقط. لهذا السبب، sudo
أكثر أماناً وأسهل في تتبع السجلات، لذا فهو الافتراضي في توزيعات Linux الحديثة.
توزيعات Linux التي تعتمد على sudo
العديد من توزيعات Linux تستخدم sudo
بشكل افتراضي، وأبرزها:
- عائلة Ubuntu (Ubuntu, Linux Mint, …)
→ لا يمكن تسجيل الدخول مباشرةً كـ root؛ تتم إدارة النظام عبر sudo فقط. - عائلة Debian
→ غالباً ما يتم تفعيل sudo لاحقاً لأسباب أمنية. - Fedora, CentOS, Red Hat
→ يمكن استخدام root، ولكن يُوصى غالباً باستخدام sudo.
خاصةً في Ubuntu، حساب root مُعطل افتراضياً وكل العمليات الإدارية تتم عبر sudo. لذلك، فهم sudo ضروري لكل مستخدمي Ubuntu.
لماذا يبحث البعض عن “sudo sudo”؟
كلمة “sudo sudo” قد تبدو مكررة، لكنها تُستخدم غالباً في الحالات التالية:
- المبتدئون يبحثون عن معنى واستخدام sudo ويكتبون الكلمة مرتين للتأكيد.
- عند مواجهة مشاكل باستخدام sudo (مثال:
sudo: sudo: command not found
). - عند رؤية استخدام مزدوج لـ sudo في السكريبتات أو خطوط الأوامر، مما يثير التساؤل.
في الأقسام القادمة، سنشرح الاستخدام الصحيح لـ sudo
، كيفية الإعداد، وحل المشاكل الشائعة.
2. الاستخدام الأساسي لأمر sudo
البنية الأساسية لـ sudo
بنية أمر sudo
بسيطة جداً:
sudo [خيارات] الأمر
مثال لتحديث معلومات الحزم:
sudo apt update
يعني أن أمر “apt update” سيتم تنفيذه بصلاحية root.
آلية طلب كلمة المرور والتخزين المؤقت
عند استخدام sudo
لأول مرة أو بعد مدة زمنية، سيطلب منك النظام إدخال كلمة مرور المستخدم. هذه الخطوة لتعزيز الأمان ومنع الاستخدام غير المصرح به.
بعد إدخال كلمة المرور، سيتم تذكرها (cache) لفترة قصيرة (افتراضياً 5 دقائق في Ubuntu). يمكن تعديل هذه الفترة في ملف sudoers
.
خيارات sudo الشائعة الاستخدام
يقدم sudo
العديد من الخيارات لتسهيل ومرونة التحكم. من أهمها:
-u (تشغيل كـ مستخدم آخر)
بشكل افتراضي، يمنحك صلاحية root، لكن مع خيار -u
يمكنك تشغيل أمر باسم مستخدم آخر:
sudo -u www-data whoami
سيكون الناتج www-data
، أي أن الأمر تم تشغيله كمستخدم www-data.
-s (فتح shell بصلاحية root مؤقتاً)
لتشغيل shell مؤقتاً كـ root:
sudo -s
يُنصح بالحذر عند العمل في هذا الوضع.
-i (تسجيل الدخول كـ root بشكل كامل)
لتبديل البيئة بالكامل إلى root:
sudo -i
-l (عرض الأوامر المسموح بها)
لعرض الأوامر التي يمكنك تشغيلها باستخدام sudo:
sudo -l
نصائح مهمة للمبتدئين
- يجب ترك مسافة بعد
sudo
(مثال:sudoapt
خطأ). - لتنفيذ عدة أوامر دفعة واحدة، استخدم علامات الاقتباس أو افصلها بفاصلة منقوطة.
- تشغيل تطبيقات واجهة المستخدم الرسومية (GUI) مع sudo قد يؤدي إلى تلف الملفات، مثل
sudo gedit
.
3. ملف sudoers والتحكم في الوصول
ما هو ملف sudoers؟
ملف إعدادات /etc/sudoers
يتحكم في كيفية عمل أمر sudo
، ويحدد من يمكنه تشغيل أي أوامر باستخدام sudo.
مثال: يمكن السماح لمستخدم بتنفيذ أمر محدد فقط باستخدام sudo.
هذه المرونة تحقق مبدأ أقل الصلاحيات الضرورية (Least Privilege).
تعديل sudoers بأمان باستخدام visudo
لا يجب تعديل /etc/sudoers
مباشرة عبر محرر نصوص عادي.
لأن أي خطأ في الصياغة قد يؤدي إلى تعطل sudo، مما يصعب إصلاحه. استخدم دائمًا visudo
للتعديل، فهو يتحقق من الصياغة قبل الحفظ.
sudo visudo
البنية الأساسية وأمثلة التكوين
بنية ملف sudoers
:
اسم_المستخدم اسم_الجهاز = (المستخدم_المنفذ) الأوامر_المسموحة
مثال:
alice ALL=(ALL:ALL) ALL
يعني أن المستخدم alice يمكنه تنفيذ أي أمر على أي جهاز كأي مستخدم.
لتقييد صلاحيات أمر معين:
bob ALL=(ALL) /usr/bin/systemctl restart nginx
يسمح هذا فقط للمستخدم bob بإعادة تشغيل nginx باستخدام sudo.
التحكم عبر المجموعات: مجموعة sudo
في Ubuntu وتوزيعات أخرى، المستخدمون ضمن مجموعة sudo
لديهم صلاحية استخدام sudo:
%sudo ALL=(ALL:ALL) ALL
لإضافة مستخدم للمجموعة:
sudo usermod -aG sudo اسم_المستخدم
استخدام خيار NOPASSWD (بدون كلمة مرور) وتحذيرات
يمكنك إلغاء طلب كلمة المرور عند تشغيل أوامر معينة باستخدام NOPASSWD
:
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
لكن هذا يُضعف الأمان، لذلك يُوصى بتحديد الأوامر المسموحة فقط وعدم استخدام ALL.
4. استخدامات متقدمة لـ sudo
تشغيل أوامر كمستخدم آخر
يمكن لـ sudo
تشغيل الأوامر بصلاحية مستخدم معين (وليس فقط root):
sudo -u www-data whoami
هذه الميزة مفيدة لفحص البيئة أو صلاحيات المستخدمين المختلفين.
استخدام sudo مع إعادة التوجيه والأنابيب
غالبًا ما يواجه المبتدئون مشاكل عند استخدام sudo
مع إعادة التوجيه >
أو الأنابيب |
.
مثال غير صحيح:
sudo echo "test" > /etc/test.conf
في هذا المثال، echo تعمل بصلاحية sudo لكن الكتابة تتم بصلاحية المستخدم العادي، مما يؤدي لفشل العملية.
الصحيح:
echo "test" | sudo tee /etc/test.conf
وبذلك، الكتابة تتم فعلياً بصلاحية sudo.
استخدام sudo في السكريبتات
عند كتابة سكريبت يتطلب صلاحيات إدارية، أضف sudo فقط قبل الأوامر التي تحتاج لذلك. تجنب تشغيل السكريبت بالكامل بـ sudo.
مثال (install.sh):
#!/bin/bash
echo "Installing package..."
sudo apt install -y nginx
يمكنك أيضاً التحقق من صلاحية root في بداية السكريبت:
if [ "$EUID" -ne 0 ]; then
echo "يجب تشغيل هذا السكريبت كـ root"
exit 1
fi
أوامر مفيدة شائعة الاستخدام
sudo !!
→ إعادة تنفيذ آخر أمر بصلاحية sudo. مثال:
apt update
sudo !!
نفس النتيجة كـ sudo apt update
.
sudo -k
→ مسح التخزين المؤقت لكلمة المرور يدويًا.sudo -v
→ تمديد صلاحية جلسة sudo أثناء العمل لفترات طويلة.
5. الأمان وأفضل الممارسات
الالتزام بمبدأ أقل الصلاحيات
الهدف الرئيسي من sudo
هو تشغيل النظام بأقل صلاحيات ممكنة، أي عدم التحول الدائم إلى root بل الحصول على الصلاحيات عند الحاجة فقط.
الأفضل:
- السماح فقط بالأوامر الضرورية لكل مستخدم (مثال:
systemctl restart nginx
) - تقليل استخدام NOPASSWD قدر الإمكان
- إدارة الصلاحيات للمستخدمين ذوي الامتيازات عبر المجموعات
تسجيل السجلات والمراقبة
يسجل sudo
جميع الأوامر المنفذة عبره في سجلات النظام، ما يساعد في تتبع من قام بتنفيذ ماذا ومتى.
أهم مواقع السجلات:
/var/log/auth.log
(Ubuntu, Debian)journalctl
(توزيعات systemd)
مثال لاستعراض سجل sudo في Ubuntu:
grep 'sudo' /var/log/auth.log
أو:
journalctl _COMM=sudo
هذا ضروري لإدارة الأنظمة وخاصةً الخوادم.
ثغرات أمنية شهيرة في sudo (CVE-2021-3156)
رغم موثوقية sudo
، ظهرت في الماضي ثغرات خطيرة.
أشهرها CVE-2021-3156 (Baron Samedit) التي كانت تسمح باختراق النظام من خلال مدخلات معينة.
لحماية النظام:
- تأكد دائماً من تحديث sudo للحفاظ على الأمان
- تحقق بشكل دوري من المصادر الرسمية وقواعد بيانات الثغرات الأمنية
بدائل sudo: التعرف على doas
بعض التوزيعات الخفيفة أو المهتمة بالأمان تستخدم doas كبديل لـ sudo.
doas
هو أداة بسيطة وسهلة الإعداد قادمة من OpenBSD.
مثال:
doas apt update
يتم إعداد doas في ملف /etc/doas.conf
:
permit nopass :wheel
لكن doas قد لا يتوفر افتراضياً في كل توزيعة Linux.
6. الأخطاء الشائعة وحلولها
خطأ “المستخدم ليس ضمن ملف sudoers”
اسم_المستخدم is not in the sudoers file. This incident will be reported.
يظهر هذا الخطأ عندما لا يكون للمستخدم صلاحية استخدام sudo، وغالباً مع المستخدمين الجدد غير المضافين لمجموعة sudo.
الحل:
- تسجيل الدخول بحساب لديه صلاحيات root
- إضافة المستخدم إلى مجموعة sudo
sudo usermod -aG sudo اسم_المستخدم
بعدها سجل الخروج ثم الدخول مجدداً.
خطأ “Permission denied” مع إعادة التوجيه أو الأنابيب
Permission denied
يحدث عندما تتم عملية الكتابة أو التحويل خارج صلاحيات sudo.
خاطئ:
sudo echo "test" > /etc/test.conf
صحيح:
echo "test" | sudo tee /etc/test.conf
أو لأكثر من سطر:
sudo bash -c 'echo "line1" > /etc/test.conf'
تعطل sudo بسبب خطأ في تحرير ملف sudoers
إذا حررت ملف sudoers
بشكل خاطئ، فقد يتوقف sudo عن العمل.
الحل:
- تسجيل الدخول كـ root (في Ubuntu حساب root معطل افتراضياً)
- استخدام الأوامر التالية للإصلاح:
pkexec visudo
إذا لم يعمل pkexec، استخدم وضع الاستعادة (recovery mode) لإصلاح ملف sudoers.
لحماية النظام دائماً عدل الملف باستخدام:
sudo visudo
خطأ “sudo: command not found”
sudo: command not found
يحدث إذا لم يكن sudo مثبتًا أو خارج PATH.
الحل:
- سجّل الدخول كـ root وثبّت sudo:
apt update
apt install sudo
- أو نفّذ sudo عبر المسار الكامل:
/usr/bin/sudo ls
7. الأسئلة الشائعة حول sudo
س1. ما الفرق بين sudo و su؟
ج:
sudo
يمنح صلاحيات المدير لأمر واحد فقط، بينما su
يبدل المستخدم بالكامل (غالباً إلى root).
sudo
: يبقى المستخدم الحالي ويرفع صلاحيات أمر واحدsu
: يبدل المستخدم للجلسة بأكملها
من حيث الأمان وتسجيل العمليات، ينصح باستخدام sudo.
س2. عند استخدام sudo، هل أحتاج كلمة مرور root؟
ج:
لا، تُدخل كلمة مرور المستخدم الحالي، وليس root.
وهذا يقلل خطر تسرب كلمة مرور root، ويسهل تتبع العمليات.
س3. أين يتم تسجيل عمليات sudo؟
ج:
يتم تسجيل عمليات sudo في أماكن مختلفة حسب التوزيعة:
- Ubuntu/Debian:
/var/log/auth.log
- RHEL/CentOS:
/var/log/secure
- بيئة systemd:
journalctl _COMM=sudo
وهذا يسهل تتبع أي عمليات خاطئة أو غير مصرح بها.
س4. ماذا أفعل إذا أخطأت في تحرير ملف sudoers؟
ج:
قبل التعديل، استخدم sudo visudo
دائماً.
إذا تعطل sudo بسبب خطأ، جرب الحلول التالية:
- تسجيل الدخول كـ root وإصلاح الملف بـ visudo
- الدخول لوضع الاستعادة (recovery mode) في Ubuntu
- استخدام
pkexec visudo
(إذا كان polkit متوفر)
تأكد دائماً من صحة الصياغة قبل الحفظ.
س5. هل يمكنني الحصول على صلاحية root بدون sudo؟
ج:
ممكن ولكن غير مستحسن لأسباب أمنية:
- استخدام أمر
su
مع كلمة مرور root - تسجيل الدخول مباشرةً كـ root (معطل في Ubuntu افتراضياً)
يفضل معظم التوزيعات الحديثة استخدام sudo.
س6. هل من الآمن تشغيل تطبيقات GUI باستخدام sudo؟
ج:
عادةً لا يُنصح بذلك، مثل sudo gedit
، فقد يؤدي لتلف الإعدادات.
إذا احتجت لتشغيل تطبيق GUI بصلاحية إدارية، استخدم pkexec
(إذا كان متوفرًا):
pkexec gedit
8. الخلاصة
فهم دور sudo بشكل صحيح
في هذا المقال، شرحنا كل ما يتعلق بأمر sudo
في أنظمة Linux/Unix: الأدوار الأساسية، طرق الاستخدام، الإعدادات، الاستخدام المتقدم، الأمان، الأخطاء الشائعة، والأسئلة المتكررة.
sudo
ليس مجرد أمر يسبق الأوامر، بل هو مفتاح لحماية النظام وإدارته بشكل سليم.
الاستخدام الصحيح يحميك من المشاكل
اتبع هذه النقاط لاستخدام sudo
بأمان:
- العمل بأقل صلاحيات ممكنة
- استخدم visudo لتحرير الإعدادات بأمان
- راجع السجلات بانتظام
- انتبه عند استخدام الأنابيب أو إعادة التوجيه مع sudo
- تجنب استخدام sudo لتشغيل تطبيقات الواجهة الرسومية (GUI)
عدم الانتباه قد يؤدي لمشاكل في الملفات أو تعطيل sudo أو حتى فقدان إمكانية الإدارة.
اختر أسلوب الإدارة المناسب لك
Linux نظام مرن للغاية. يمكنك استخدام sudo
أو أدوات بديلة مثل doas
حسب سياسة الأمان واحتياجاتك.
أخيرًا
فهم sudo
هو خطوتك الأولى لفهم Linux.
استخدمه كأداة لحماية النظام، وكن على دراية بكيفية استخدامه بشكل صحيح لتحافظ على أمان نظامك وثباته.
نتمنى لك التوفيق في استخدام Linux بثقة واحترافية.