كيفية استخدام كلمات المرور المشفرة في نصوص Bash

نشرت: 2022-01-29
كمبيوتر محمول يعمل بنظام Linux على غرار Ubuntu.
fatmawati achmad zaenuri / Shutterstock.com

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

كلمات المرور والنصوص

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

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

في السيناريو الخاص بنا ، نحتاج إلى إجراء اتصال عن بعد بجهاز كمبيوتر Fedora Linux من كمبيوتر Ubuntu الخاص بنا. سنستخدم برنامج Bash shell لإنشاء اتصال SSH بجهاز كمبيوتر Fedora. يجب أن يعمل البرنامج النصي دون مراقبة ، ولا نريد وضع كلمة المرور للحساب البعيد في البرنامج النصي. لا يمكننا استخدام مفاتيح SSH في هذه الحالة ، لأننا نتظاهر بأنه ليس لدينا أي حقوق تحكم أو إدارة على كمبيوتر Fedora.

سنستفيد من مجموعة أدوات OpenSSL المعروفة للتعامل مع التشفير وأداة مساعدة تسمى sshpass لتغذية كلمة المرور في أمر SSH.

ذات صلة: كيفية إنشاء وتثبيت مفاتيح SSH من Linux Shell

تثبيت OpenSSL و sshpass

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

في Ubuntu ، اكتب هذا الأمر:

 sudo apt الحصول على opensl 

لتثبيت sshpass ، استخدم هذا الأمر:

 sudo apt تثبيت sshpass 

في Fedora ، تحتاج إلى كتابة:

 sudo dnf تثبيت opensl 

أمر تثبيت sshpass هو:

 sudo dnf تثبيت sshpass 

في Manjaro Linux ، يمكننا تثبيت OpenSSL باستخدام:

 sudo pacman -Sy openssl 

أخيرًا ، لتثبيت sshpass ، استخدم هذا الأمر:

 سودو بكمن sshpass 

التشفير في سطر الأوامر

قبل الدخول في استخدام الأمر openssl مع البرامج النصية ، دعنا نتعرف عليه من خلال استخدامه في سطر الأوامر. لنفترض أن كلمة مرور الحساب على الكمبيوتر البعيد rusty!herring.pitshaft . سنقوم بتشفير كلمة المرور هذه باستخدام openssl .

نحتاج إلى توفير كلمة مرور تشفير عندما نفعل ذلك. يتم استخدام كلمة مرور التشفير في عمليات التشفير وفك التشفير. هناك الكثير من المعلمات والخيارات في الأمر openssl . سنلقي نظرة على كل منهم في لحظة.

 صدى "صدئ! herring.pitshaft" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass: 'pick.your.password' 

نحن نستخدم echo لإرسال كلمة مرور الحساب البعيد عبر أنبوب وصولاً إلى الأمر openssl .

معلمات openssl هي:

  • enc -aes-256-cbc : نوع الترميز. نحن نستخدم معيار التشفير المتقدم 256 بت مع تسلسل كتلة التشفير.
  • -md sha512 : نوع ملخص الرسالة (تجزئة). نحن نستخدم خوارزمية التشفير SHA512.
  • -a : هذا يخبر openssl بتطبيق تشفير Base-64 بعد مرحلة التشفير وقبل مرحلة فك التشفير.
  • -pbkdf2 : استخدام وظيفة اشتقاق المفتاح المستندة إلى كلمة المرور 2 (PBKDF2) يزيد من صعوبة نجاح هجوم القوة الغاشمة في تخمين كلمة مرورك. يتطلب PBKDF2 العديد من العمليات الحسابية لإجراء التشفير. سيحتاج المهاجم إلى تكرار كل تلك الحسابات.
  • -iter 100000 : يحدد عدد العمليات الحسابية التي سيستخدمها PBKDF2.
  • -الملح : استخدام قيمة ملح مطبقة عشوائيًا يجعل الإخراج المشفر مختلفًا في كل مرة ، حتى لو كان النص العادي هو نفسه.
  • -pass pass: 'pick.your.password' : كلمة المرور التي سنحتاجها لفك تشفير كلمة المرور البعيدة المشفرة. استبدل pick.your.password بكلمة مرور قوية من اختيارك.

النسخة المشفرة من كلمة مرور rusty!herring.pitshaft الخاصة بنا مكتوبة في نافذة الجهاز.

كلمة مرور مشفرة مكتوبة على نافذة المحطة

لفك تشفير هذا ، نحتاج إلى تمرير تلك السلسلة المشفرة إلى openssl بنفس المعلمات التي استخدمناها للتشفير ، ولكن مع إضافة الخيار -d (فك التشفير).

 صدى U2FsdGVkX19iiiRNhEsG + wm / uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: 'pick.your.password' 

الإعلانات

تم فك تشفير السلسلة ، ونصنا الأصلي - كلمة المرور لحساب المستخدم البعيد - مكتوب في نافذة المحطة الطرفية.

تم فك تشفير كلمة المرور إلى نافذة المحطة

هذا يثبت أنه يمكننا تشفير كلمة مرور حساب المستخدم البعيد بشكل آمن. يمكننا أيضًا فك تشفيرها عندما نحتاج إليها باستخدام كلمة المرور التي قدمناها في مرحلة التشفير.

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

لإرسال الإخراج من أمر التشفير إلى ملف ، يمكننا استخدام إعادة التوجيه. يسمى الملف ".secret_vault.txt." لقد قمنا بتغيير كلمة مرور التشفير إلى شيء أكثر قوة.

 صدى "صدئ! herring.pitshaft" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass: 'secret # vault! password'> .secret_vault.txt 

لا يحدث شيء مرئي ، ولكن يتم تشفير كلمة المرور وإرسالها إلى ملف “.secret_vault.txt”.

يمكننا اختبار أنه يعمل من خلال فك تشفير كلمة المرور في الملف المخفي. لاحظ أننا نستخدم cat هنا وليس echo .

 cat .secret_vault.txt | opensl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt-pass pass: 'secret # vault! password' 

الإعلانات

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

 chmod 600 .secret_vault.txt
 ls -l .secret_vault.txt 

يؤدي استخدام قناع أذونات 600 إلى إزالة كل الوصول لأي شخص بخلاف مالك الملف. يمكننا الآن الانتقال إلى كتابة السيناريو الخاص بنا.

ذات صلة: كيفية استخدام الأمر chmod على Linux

استخدام OpenSSL في برنامج نصي

نصنا واضح ومباشر:

 #! / بن / باش

# اسم الحساب البعيد
REMOTE_USER = مهووس

# كلمة المرور للحساب البعيد
REMOTE_PASSWD = $ (cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass: 'secret # vault! password')

# حاسب يستخدم عن بعد
REMOTE_LINUX = فيدورا -34 محلي

# الاتصال بالكمبيوتر البعيد ووضع طابع زمني في ملف يسمى script.log
sshpass -p $ REMOTE_PASSWD ssh -T $ REMOTE_USER @ $ REMOTE_LINUX << _remote_commands
صدى $ USER "-" $ (التاريخ) >> /home/$REMOTE_USER/script.log
_الأوامر
  • قمنا بتعيين متغير يسمى REMOTE_USER على "geek".
  • ثم قمنا بتعيين متغير يسمى REMOTE_PASSWD على قيمة كلمة المرور التي تم فك تشفيرها والتي تم سحبها من ملف “.secret_vault.txt” ، باستخدام نفس الأمر الذي استخدمناه منذ لحظة.
  • يتم تخزين موقع الكمبيوتر البعيد في متغير يسمى REMOTE_LINUX .

باستخدام هذه المعلومات ، يمكننا استخدام الأمر ssh للاتصال بجهاز الكمبيوتر البعيد.

  • الأمر sshpass هو الأمر الأول في خط الاتصال. نستخدمه مع خيار -p (كلمة المرور). يتيح لنا ذلك تحديد كلمة المرور التي يجب إرسالها إلى الأمر ssh .
  • نستخدم الخيار -T (تعطيل تخصيص المحطة الزائفة) مع ssh لأننا لسنا بحاجة إلى تخصيص TTY الزائف لنا على الكمبيوتر البعيد.
كيفية استخدام "Here Documents" في Bash على Linux
ذات صلة كيفية استخدام "مستندات هنا" في Bash على Linux

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

يقوم الأمر المرسل إلى الكمبيوتر البعيد بتسجيل اسم حساب المستخدم والطابع الزمني لملف يسمى "script.log".

انسخ النص والصقه في محرر واحفظه في ملف يسمى "go-remote.sh". تذكر تغيير التفاصيل لتعكس عنوان الكمبيوتر البعيد الخاص بك وحساب المستخدم البعيد وكلمة المرور للحساب البعيد.

استخدم chmod لجعل النص قابل للتنفيذ.

 chmod + x go-remote.sh 

الإعلانات

كل ما تبقى هو تجربتها. دعنا نشعل السيناريو الخاص بنا.

 ./go-remote.sh 

نظرًا لأن البرنامج النصي الخاص بنا عبارة عن نموذج مبسط لنص غير مراقب ، فلا يوجد إخراج إلى الجهاز. ولكن إذا تحققنا من ملف “script.log” على كمبيوتر Fedora ، يمكننا أن نرى أن الاتصالات البعيدة قد تم إجراؤها بنجاح وأن ملف “script.log” قد تم تحديثه بالطوابع الزمنية.

 القط script.log 

كلمة المرور الخاصة بك خاصة

لم يتم تسجيل كلمة مرور حسابك البعيد في البرنامج النصي.

وعلى الرغم من أن كلمة مرور فك التشفير ، في البرنامج النصي ، لا يمكن لأي شخص آخر الوصول إلى ملف ".secret_vault.txt" الخاص بك لفك تشفيره واسترداد كلمة مرور الحساب البعيد.