كيفية استخدام كلمات المرور المشفرة في نصوص Bash
نشرت: 2022-01-29إذا كنت مضطرًا إلى استخدام برنامج نصي من 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 الزائف لنا على الكمبيوتر البعيد.
نحن نستخدم مستندًا قصيرًا هنا لتمرير أمر إلى الكمبيوتر البعيد. يتم إرسال كل شيء بين _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" الخاص بك لفك تشفيره واسترداد كلمة مرور الحساب البعيد.