كيف تستخدم passwd و adduser لإدارة كلمات المرور في لينكس


طريف

تُعتبر كلمات المرور والمصادقة من المفاهيم الأساسية التي يتعامل معها كل مستخدم لبيئة غنو لينكس، إذ تتسع هذه المواضيع لعدد من أدوات وملفات الضبط المختلفة. 

adduser-passwd.thumb.png.3431f185dd47b55

نستكشف في هذا الدرس بعض هذه الملفات الأساسية مثل etc/passwd/ وetc/shadow/ إضافة إلى أدوات ضبط المصادقة مثل passwd و adduser
سنناقش هذه المواضيع ونطبّق الأمثلة على نظام Ubuntu 14.04، إلا أنه سيكون بإمكانك العمل على أي توزيعة لينكس حديثة بطريقة مماثلة تمامًا.

ما هو ملف "etc/passwd/"؟

الملف الأول الذي سنبدأ معه يُدعى etc/passwd/، ورغم اسمه فهو لا يخزّن كلمات المرور في واقع الحال. 
فيما مضى كان هذا الملف يُخزّن كلمات المرور المُشفّرة hashed passwords لكل مُستخدم على النظام، إلا أنّه ولأسباب أمنيّة تم نقل هذه المسؤولية لاحقا إلى ملف منفصل. 
دعونا نلقي نظرة على محتويات الملف etc/passwd/

less /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
. . . 

أول ما يمكننا ملاحظته هو إمكانية الوصول لهذا الملف من قبل المستخدمين العاديين (أي الذين لا يملكون صلاحيات الجذر root)، ولأن الجميع قادر على قراءة هذا الملف فقد تمّ نقل معلومات كلمات المرور إلى ملف آخر.

كيف تقرأ ملف "etc/passwd/"؟

كل سطر في هذا الملف يحتوي على معلومات الولوج لمستخدم فريد على نظام التشغيل، بعض هذه الحسابات قد تكون مُنشأة لاستعمالها من قبل خدمات daemons (الخدمات التي تعمل بالخلفية). 
لنلقي نظرة على أحد هذه الأسطر لنرى ما هي المعلومات التي يحتويها: 

root:x:0:0:root:/root:/bin/bash 

تُفصل حقول المعلومات ضمن هذا السطر بعلامة النقطتين (:)، وهكذا يكون لدينا سبعة حقول في كل سطر من أسطر الملف etc/passwd/، وهي هنا: 

  • root: اسم مستخدم الحساب. 
  • x: تعبير مُرمّز للدلالة على معلومات كلمة المرور والتي يتم الحصول عليها من ملف etc/shadow/
  • 0: هوية المستخدم أو رقم ID الخاص به وهو مُعرفّه على نظام التشغيل. المستخدم الجذر يملك رقم ID مساويًا للصفر على الدوام. 
  • 0: هوية المجموعة أو رقم ID الخاص بالمجموعة التي ينتمي لها المُستخدم بشكل افتراضي. كذلك فإن رقم ID لمجموعة الجذر هو 0 دومًا. 
  • root: حقل الملاحظات، يُستخدم هذا الحقل لوصف المستخدم أو وظيفته، كما يمكن أن يشمل معلومات الاتصال به أو وصف الخدمة التي أُنشئ من قبلها. 
  • root/: الدليل الرئيسي، للمستخدمين القياسيين غالبًا ما يكون هذا الدليل هوhome/username/، أما للمستخدم الجذر فهو root/
  • bin/bash/: يضمّ هذا الحقل مسار الصدفة شِل shell الخاصة بالمستخدم أو الأمر الذي سيُنفّذ عقب ولوج المستخدم. 

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

ما هو ملف "etc/shadow/

تُخزّن البيانات الفعلية لكلمات المرور في ملف يُدعى etc/shadow/
ومع ذلك فهو لا يحتوي على النصّ الصرف لكلمات المرور، بل يستخدم دالة كمفتاح اشتقاق key derivation لإنشاء تشفيرٍ لها، وهو ما يُخزّن فعليًا ضمن الملف. 
مفتاح الاشتقاق هو عبارة عن خوارزمية تُنشئ دومًا تشفيرًا واحدًا عندما تُعطى نفس المُدخل. تُطبّق هذه الخوارزمية على كلمة المرور عندما تُعطى أثناء تسجيل الدخول وتقارن القيمة الناتجة عن ذلك مع القيمة المُخزّنة ضمن هذا الملف. 
يجدر الانتباه إلى أن المُستخدمين الذين لا يملكون صلاحيات الجذر غير قادرين على قراءة محتويات هذا الملف وذلك خلافًا لـ etc/passwd/.

كيف تقرأ ملف "etc/shadow/

لنلقي نظرة على محتويات الملف etc/shadow/ عبر الأمر التالي: 

sudo less /etc/shadow 
root:$6$mJD3Rsj4$xUa7jru6EEGTXnhwTfTT26/j8M5XiQvUl6UH32cfAWT/6W9iSI5IuIw5OOw4khwrsOHPyMwfCLyayfYiVdhAq0:15952:0:99999:7:::
daemon:*:15455:0:99999:7::: 
bin:*:15455:0:99999:7::: 
sys:*:15455:0:99999:7::: 
sync:*:15455:0:99999:7::: 
games:*:15455:0:99999:7::: 
man:*:15455:0:99999:7::: 
. . . 

كما في etc/passwd/ يُعرّف كل سطر معلومات أحد المستخدمين وتفصل علامة النقطتين (:) بين الحقول المختلفة. 
ملاحظة: تُشير علامة النجمة (*) في الحقل الثاني من بعض الأسطر أعلاه إلى أن حساب المستخدم غير قابل لتسجيل الدخول، وهو ما يعني ارتباط الحساب بأحد الخدمات المُثبّتة على النظام. 
دعونا نلقي نظرة على أحد تلك الأسطر: 

daemon:*:15455:0:99999:7:::

لدينا في هذا السطر تسع حقول وهي: 

  • daemon: اسم مُستخدم الحساب. 
  • *: تجد هنا كلمة المرور المُشفّرة (يمكن أن ترى مثالًا عنها في السطر الخاص بالمستخدم الجذر من الملف أعلاه). وكما قلنا للتوّ فإن رمز النجمة تعني أنه لا يمكن استخدام هذا الحساب لتسجيل الدخول، وبالتالي لا يملك كلمة مرور أصلًا. 
  • 15455: آخر مدّة تم تغيير كلمة المرور فيها، تُقاس هذه القيمة بالأيام انطلاقًا من بداية "عصر" يونكس، وهو 1 يناير 1970. 
  • 0: أصغر عُمر لكلمة المرور، وهي المدّة التي يجب أن تفصل بين تحديثين متتابعين لكلمة المرور، القيمة 0 تعني عدم وجود أي قيود. 
  • 99999: أطول عُمر لكلمة المرور، وهي المدة التي يجب أن تُغيّر كلمة المرور بعد انقضائها. القيمة 99999 تعني أنّ كلمة المرور الحالية لا نهائية المدّة. 
  • 7: تُمثّل أيام التحذير قبل انتهاء صلاحية كلمة المرور وذلك في حال كانت الخانة السابقة تحمل قيمةً ما، فإن المُستخدم سيحصل على تنبيه لتغيير كلمة المرور خلال هذه الأيام. 
  • [فارغة]: آخر ثلاث حقول فارغة هنا، يُستخدم الأول للإشارة إلى المُهلة الإضافية التي تلي انتهاء المدة المحدّدة بالخانة السابقة حيث سيلغى تفعيل الحساب بعدها. الحقل الثامن يُمثّل مدّة إلغاء الحساب بالأيام منذ تاريخ بداية نظام يونكس (أي منذ 1-1-1970). الحقل التاسع فارغ دومًا ويُترك لأية استعمالات مستقبلية.

كيف تغير كلمات المرور؟

يمكن تعديل كلمات مرور المستخدمين بواسطة الأداة passwd
وبشكل افتراضي فإن هذا الأمر سيغيّر كلمة مرور حساب المستخدم الحالي دون أن يتطلب ذلك صلاحيات الجذر. 

passwd 

أما إذا رغبت بتعديل كلمة مرور حساب آخر فستحتاج حينها إلى صلاحيات الجذر، حيث يمكنك استخدام الصيغة التالية: 

sudo passwd username 

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

كيف تنشئ مستخدما جديدا؟

يمكن إنشاء حسابات مستخدمين جديدة عن طريق عدد من الأدوات، ولعلّ أسهلها adduser، وفي أنظمة Ubuntu تُشير هذه الأداة إلى سكربت بيرل والذي يتولى عملية إضافة مستخدم جديد. 
يمكن استدعاء السكربت من خلال: 

adduser demo 
Adding user `demo' ... 
Adding new group `demo' (1000) ... 
Adding new user `demo' (1000) with group `demo' ... 
Creating home directory `/home/demo' ... 
Copying files from `/etc/skel' ... 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully 
Changing the user information for demo 
Enter the new value, or press ENTER for the default 
Full Name []: test 
Room Number []: room 
Work Phone []: work phone 
Home Phone []: home phone 
Other []: other 
Is the information correct? [Y/n] 

ستطلب منك الأداة الإجابة على مجموعة من الأسئلة لملئ المعلومات اللازمة عن المستخدم في ملفي etc/passwd/ و etc/shadow/
يمكنك بعد ذلك أن ترى المُدخل الذي تمت إضافته إلى الملف etc/passwd/ عن طريق الأمر: 

tail -1 /etc/passwd 
demo:x:1000:1000:test,room,work phoneme phone,other:/home/demo:/bin/bash 

وكما ترى فقد عُبّئت الحقول كما هو متوقع، باستثناء أننا حصلنا على حقل ملاحظات أكثر فائدة. 
بنفس الطريقة يمكن تنفيذ الأمر التالي لرؤية التعديلات التي أدخلت على ملف etc/shadow/

sudo tail -1 /etc/shadow
demo:$6$XvPCmWr4$HXWmaGSeU5SrKwK2ouAjc68SxbJgUQkQ.Fco9eTOex8232S7weBfr/CMHQkullQRLyJtCAD6rw5TVOXk39NAo/:15952:0:99999:7:::

الخلاصة

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

ترجمة -وبتصرف- للمقال How To Use passwd and adduser to Manage Passwords on a Linux VPS لصاحبه Justin Ellingwood.

حقوق الصورة البارزة: Designed by Freepik.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن