مقدمة
تعتبر أنظمة لينكس أكثر أمانا من غيرها من الأنظمة. بالطبع هي ليست آمنة بنسبة 100%. لكن بالنظر لبنيتها وسياسة الصلاحيات عليها، فجانب الأمان يمثل نقطة قوة لهذه الأنظمة. ولتطبيق فلسفة لينكس المتعلقة بالأمان فقد وُجدت صلاحيات مختلفة لأنواع مختلفة من المستخدمين وباستعمال أوامر مختلفة.
تعتبر sudo و su من أكثر الأوامر استعمالا من قبل مديري أنظمة لينكس، وأيضا من قبل المستخدمين العاديين. وإن كنت مستخدما للطرفية في لينكس فمن المؤكد أنك قد احتجت إلى استعمال هذه الأوامر أثناء تعاملك مع النظام. وإن كنت مستخدما مبتدئا فمن الممكن أنك قد ارتبت حول الأمر الأنسب للاستعمال. سنتعرف في هذا المقال على هذين الأمرين والفرق بينهما ومتى ينصح باستعمال كل واحد منهما.
صلاحيات المستخدمين على لينكس
عندما نتحدث عن إدارة أنظمة لينكس فنحن نتحدث عن صلاحيات تختلف حسب اختلاف نوع المستخدم. وذلك من أجل ضمان استقرار وثبات النظام وعدم تعرضه للأخطار الأمنية التي قد تحدث بسبب الأخطاء أو بسبب وصول الشخص غير المناسب للصلاحيات المؤثرة على النظام.
بسبب ما سبق فإن بعض العمليات على لينكس تتطلب صلاحيات إدارية تمكن المستخدم من أداء مهام لا يمكن أداؤها بصلاحيات المستخدم العادي. وذلك ما يفسر وجود المستخدم الخارق (Super user) والمستخدم الجذر (Root). ومن أجل الوصول إلى هذه الصلاحيات يستعمل المستخدم أوامر مثل su و sudo.
ماهو su ؟
كلمة su هي اختصار لعبارة super user أو substitute user أو switch user. وكما يظهر من آخر عبارة فإن هذا الأمر يسمح بالتغيير من الحساب الحالي إلى حساب آخر يسمى الحساب المستهدف. وتشمل الحسابات المستهدفة حساب المستخدم الجذر التي تمكن صلاحياته المستخدم من أداء جميع المهام باختلاف أنواعها ودرجة حساسيتها. يتم التبديل بين هذه الحسابات عبر جلسة الطرفية دون الحاجة لتسجيل الخروج من الحساب الحالي وإعادة الدخول للحساب الآخر.
طريقة تنفيذ هذا الأمر تكون بكتابة الأمر su متبوعا باسم حساب المستخدم المستهدف.
su [username]
حيث يُستبدل [username] باسم حساب المستخدم المراد التبديل إليه والوصول إلى صلاحياته. إذا فرضنا أن اسم المستخدم هو linuxaw يكون الأمر كالتالي:
su linuxaw
بعد ذلك يطلب النظام من المستخدم إدخال كلمة السر الخاصة بهذا المستخدم المستهدف. وبدءا من لحظة إدخال كلمة السر الصحيحة يبدأ المستخدم في استعمال الحساب المستهدف بشكل افتراضي إلى أجل غير محدد إلى أن يقوم المستخدم بالخروج من Shell.
إذا كان الحساب المستهدف هو حساب الجذر فيكفي كتابة أمر su فقط دون كتابة أي شيء بعده.
su
وبالتأكيد فإن كلمة السر المطلوبة في الحالة السابقة هي كلمة سر حساب الجذر.
ماهو sudo ؟
كلمة sudo هي اختصار لعبارة super user do أو substitute user do. يقوم هذا الأمر بترقية صلاحيات المستخدم الحالي إلى صلاحيات الجذر المعطاة له بصفة مؤقتة دون الحاجة لتسجيل الدخول إلى حساب الجذر.
يعمل هذا الأمر من خلال كتابة كلمة sudo قبل أي أمر يتطلب صلاحيات الجذر.
sudo [command]
حيث تمثل [command] الأمر المراد تنفيذه. وكلمة السر المطلوبة في هذه الحالة هي كلمة سر المستخدم الحالي وليس كلمة سر حساب الجذر.
إضافة المستخدمين لقائمة sudoers
كي يتمكن أي مستخدم للنظام من استعمال الأمر sudo والاستفادة من صلاحيات الجذر المعطاة له؛ يجب أن يكون هذا المستخدم ضمن قائمة sudoers. وليتحقق ذلك يجب أن يضيف المستخدم الجذر أو من يملك صلاحيات sudo المستخدم المقصود إلى قائمة sudoers. ويتم ذلك عبر الأمر التالي:
usermod -aG sudo [username]
حيث يُستبدل [username] باسم حساب المستخدم المراد إضافته لقائمة sudoers. مع التأكيد على أن الأمر السابق يتم باستعمال جلسة الجذر أو باستخدام صلاحية مستخدم sudo (إضافة sudo قبل الأمر السابق). إذا فرضنا أن اسم المستخدم هو linuxaw يكون الأمر كالتالي:
usermod -aG sudo linuxaw
يمكن التأكد من إضافة المستخدم لقائمة sudoers أو الاطلاع على المستخدمين في هذه القائمة من خلال الأمر التالي:
sudo getent group sudo
لحذف مستخدم معين من قائمة sudoers يُستخدم الأمر التالي:
sudo deluser [username] sudo
الفرق بين su و sudo
الفرق الجوهري بين الأمرين أن su يطلب كلمة سر الحساب المستهدف ويعطي المستخدم صلاحيات هذا الحساب. أما sudo فيطلب كلمة سر الحساب الحالي ويرقي صلاحياته إلى صلاحيات الجذر.
بالنسبة للأمر su فهو يعطي المستخدم صلاحيات الحساب المستهدف بشكل دائم حتى يقرر المستخدم إغلاق جلسة Shell. بحيث لا يحتاج مستخدم جلسة الطرفية بعد ذلك إلى استعمال su مرة أخرى أو إدخال كلمة السر من جديد. وتستخدم الأوامر التي تلي العملية الأولى صلاحيات الحساب المستهدف بشكل تلقائي. بينما يعطي الأمر sudo صلاحية الجذر للمستخدم لتنفيذ أمر محدد واحد والذي يأتي بعد sudo فقط. ويجب إعادة كتابة sudo قبل أي أمر بعد ذلك. مع الأخذ بعين الاعتبار أنه بعد تنفيذ أول أمر sudo فإن النظام يقوم بطلب إدخال كلمة سر الحساب الحالي في المرة الأولى ثم يعفي المستخدم من إعادة إدخالها في الأوامر التي تلي ذلك، ولكن لمدة معينة من الزمن. بعد انتهاء هذه المدة يعيد النظام طلب إدخال كلمة السر لتجديد صلاحيات الجذر.
بالنسبة للصلاحيات فالأمر su المستعمل للدخول إلى حساب الجذر يعطي المستخدم جميع صلاحيات الجذر الموجودة على النظام دون استثناء. أما الأمر sudo فيعطي المستخدم صلاحيات أشبه بصلاحيات الجذر لكنها ليست كاملة بل محددة حسب ما يرغب به المستخدم الرئيسي الذي يعطي الصلاحيات التي يحتاجها باقي المستخدمين لتنفيذ مهامهم فقط (الصلاحيات محددة في ملف sudoers).
الأوامر su و sudo حسب فلسفة التوزيعات
تعتبر su خيارا أشمل وأقدم من sudo وبسبب الأخطار الأمنية التي قد تنجم عن استعمال الأمر su أو تسجيل الدخول بحساب الجذر مباشرة. فإنه ينصح باستخدام sudo بدل su. لذلك فبعض الأنظمة مثل Debian و Ubuntu ومابني عليها مثل Linux Mint تقوم بتعطيل حساب الجذر ولا تقوم بإعداد كلمة سر حسابه افتراضيا. لذلك يضطر مستخدم هذه الأنظمة لاستعمال sudo أو إلى إعداد حساب الجذر يدويا إن أراد استعماله واستعمال الأمر su مستقبلا. وهذه العملية الأخيرة لا ينصح بها بما أن sudo قد يكون أكثر من كاف في أغلب الأحيان.
بعض التوزيعات الأخرى مثل Redhat و Fedora تقوم بإعداد حساب الجذر افتراضيا لذلك فهي تطلب من المستخدم أثناء عملية التثبيت كلمتي مرور مختلفتين: كلمة سر حساب الجذر وكلمة سر حساب المستخدم العادي. عكس Ubuntu ومابني عليها والتي تطلب فقط تعيين كلمة سر حساب المستخدم العادي. وبالتالي فإن استخدام الأمر su في التوزيعات الردهاتية ممكن افتراضيا دون إعدادات إضافية.
تفعيل حساب الجذر وتعطيله
يمكن لمستخدمي التوزيعات التي تعطل حساب الجذر افتراضيا تفعيل هذا الحساب من أجل استخدامه مستقبلا ومن أجل استعمال الأمر su. وذلك عبر تعيين كلمة السر الخاصة بالجذر عبر الأمر التالي:
sudo passwd root
ويطبيعة الحال فسيطلب النظام من المستخدم إدخال كلمة سر حسابه الحالي من أجل تنفيذ الأمر السابق. بعدها يطلب النظام إدخال كلمة السر المراد تعيينها لحساب الجذر ثم إعادة إدخالها من جديد. وفي النهاية يخبر المستخدم بإتمام عملية تحديث كلمة السر.
إن أراد المستخدم تعطيل حساب الجذر يمكنه فعل ذلك من خلال الأمر التالي:
sudo passwd -dl root
ما يُنصح باستخدامه ومتى؟
بالنظر إلى شرحنا للأمرين su و sudo وإلى الفروقات بينها والتي ذكرناها في الفقرات السابقة. فإن su يقوم بتسجيل الدخول إلى الحساب المستهدف أما sudo فيقوم فقط بمنح صلاحية المستخدم الجذر مؤقتا للمستخدم الحالي وبالنظر إلى أن صلاحيات الجذر تعتبر خطيرة نوعا ما ومؤثرة على مستوى أمان النظام فإنه ينصح باستخدام الأمر sudo بدل su للمستخدمين المبتدئين أو لمن يرتاب أو يخشى ارتكاب الأخطاء العرضية أو يخشى نسيان حقيقة أنه يعمل حاليا باستخدام صلاحيات الجذر وليس صلاحيات حسابه الشخصي. أما بالنسبة للمستخدمين المتمكنين ومديري الأنظمة فالأمر su هو الأمر الذي يفضلونه بما أنهم يعرفون بالضبط ما يفعلونه. وبما أنهم يفضلون اختصار الجهد والوقت أثناء أداء مهامهم على الأنظمة.
في حال وجود عدة مستخدمين للنظام الواحد، فإنه من غير الآمن أن يتشارك جميع هؤلاء المستخدمين كلمة سر الجذر ويطلعوا عليها من أجل استخدامها عند استعمال الأمر su كل مرة يحتاجون لذلك. لأن ذلك يؤدي إلى سوء استغلال صلاحيات الجذر عبر تمكينهم من القيام بمهام خاصة بالجذر لا يرغب المستخدم الرئيسي في وصولهم إليها. وأيضا تعتبر عملية مشاركة كلمة سر الجذر مع المستخدمين غير عملية بما أن المستخدم الرئيسي سيضطر إلى إعادة مشاركة كلمة السر هذه مع المستخدمين كل مرة يغيرها فيها. و لذلك فاستعمال الأمر sudo هو الأنسب في هذه الحالة بما أن كلمة سر الجذر تبقى مخفية عن باقي المستخدمين، وبما أن sudo تمنح هؤلاء المستخدمين الصلاحيات التي يحتاجونها فقط (والتي يعينها المستخدم الرئيسي حسب رغبته في ملف sudoers) دون المغامرة بصلاحيات المستخدم الجذر.
الأمر sudo su والأمر sudo -i
بالنسبة للمستخدم الذي يرغب في استعمال جلسة الجذر. والذي لا يرغب في تكرار استخدام sudo كل مرة وتكرار عملية إدخال كلمة السر .وبالنسبة لمستخدم التوزيعات التي تعطل حساب الجذر افتراضيا، والذي لا يرغب بتعيين واستخدام كلمة سر حساب الجذر؛ هؤلاء المستخدمون يمكنهم استعمال الأمرين sudo su و sudo -i بدل sudo المنفردة وبدل su. وبذلك فهم يستطيعون الدخول إلى جلسة الجذر لكن دون الحاجة لكلمة مرور الجذر بما أن sudo يطلب كلمة مرور المستخدم الحالي.
sudo su
sudo -i
من حيث الصلاحيات والتغييرات على الجلسات وأيضا من حيث المهام فالأوامر su و sudo -i و sudo -s متشابهة إلى حد كبير بما أنها تتيح استخدام صلاحيات الجذر. لكن مع بعض الاختلافات التي يجب مراعاتها من قبل مديري الأنظمة والمستخدمين المتقدمين.
الخلاصة
كان هذا مقالا ركزنا فيه على تبسيط مفهوم الأمرين su و sudo وتوضيح الفرق بينهما ومتى يفضل استخدام أحدهما بدل الآخر. من أجل تكوين فكرة مبسطة ومفهومة لدى الزائر ومساعدته على أداء مهامه بالخيار المناسب مع أخذ جانب محدودية الصلاحيات وجانب الأمان وجانب العملية بعين الاعتبار. ونعود للتأكيد على أنه ينصح باستخدام sudo كلما استطاع المستخدم ذلك. نرجو منك أن تشاركنا معلومات أكثر عن هذا الموضوع. وأيضا أن تشاركنا تجاربك في استعمال الصلاحيات على لينكس في التعليقات على هذا المقال.