سؤال أنا كتبت عن طريق الخطأ كلمة المرور في سطر الأوامر باش


أنا كتبت بطريق الخطأ كلمة المرور الخاصة بي في سطر الأوامر باش ، مخطئا Last login: ... خط ل Wrong password (كنت في عجلة من أمري). ماذا أفعل لتغطية آثاري؟

ما فعلته هو التحرير .bash_history وحذف الخط المسيء (اضطر إلى إعادة تحديد مرة واحدة لرؤية كلمة المرور تظهر في الملف حتى أتمكن من حذفها ، وأعد تسجيل الدخول مرة أخرى لرؤيتها تختفي من المحفوظات المتاحة تحت مفتاح UPARROW).

هل هناك أي مكان آخر يمكن حفظ تاريخ الأوامر فيه؟ النظام هو CentOS 6.5.


182
2018-04-02 06:42


الأصل


فقط قم بتغيير كلمة المرور :) - gronostaj
تغيير كلمة المرور ليس بهذه البساطة ... سأطلب من المشرف إعادة تثبيت مفتاحي العام الجديد على 15 خادمًا مختلفًا - والرجل يشبه /dev/null. - MaDa
إذا كنت لا تستطيع تغيير كلمة المرور الخاصة بك بسهولة في أي وقت ، فقد يكون لديك ثغرة أمنية خطيرة. ماذا ستفعل عندما يحصل شخص ما على كلمة مرورك؟ هل لديك أي وسيلة لإلغاء الوصول إلى النظام على الفور؟ - gronostaj
يمكنك تغيير عبارة المرور لمفتاح ssh دون تغيير المفتاح: ssh-keygen -f id_rsa -p. - jwg
يسقط فقط لذكر ذلك ، على الأقل تحت تسجيلات الدخول الشبكية Windows ، أنت مسقي. المسؤول (في بعض البرج الخادم النبيل) الافتراضي هو تسجيل جميع محاولات تسجيل الدخول ، وبالطبع أسماء المستخدمين هي نص واضح. كل شخص مغامر يجب أن يفعله هو البحث عن سلاسل غير اسم المستخدم ، وربطها مع اسم المستخدم الصحيح التالي (أو محاولة تسجيل الدخول التالية على نفس الجهاز). وليس هناك طريقة بسيطة لحذف ملف سجل المسؤول هذا. لذا يجب عليك تغيير كلمة المرور الخاصة بك. - Carl Witthoft


الأجوبة:


يمكنك إزالة الخط المسيء فقط من bashالتاريخ ، بدلا من تطهير التاريخ بأكمله. ببساطة إزالة الخط مع -d العلم ، ثم حفظ (كتابة) التاريخ الجديد مع -w العلم:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w

177
2018-04-02 12:25



اعلم أن هذا لا يعمل إذا عينت "PROMPT_COMMAND = history -a". مع هذا في مكان مكتوب على الفور الأمر مع كلمة المرور الخاصة بك إلى .bash_history الخاص بك عندما يتم عرض المطالبة بعد إنهاء الأمر. يجب عليك تعديل .bash_history لإزالته. - benrifkah


هنالك جزئين لهذا:

  • bash يخزن التاريخ في ملف ~/.bash_history والذي يتم كتابته افتراضيًا في نهاية الجلسة
  • ال history يتم الاحتفاظ بها في الذاكرة

لكي تكون آمنًا ، يجب عليك مسحها من الجلسة:

history -c

واقتطاع ملف السجل حسب الحاجة:

> ~/.bash_history

إذا كانت الجلسة التي قمت بكتابة كلمة المرور فيها ما زالت مفتوحة ، فهناك طريقة أخرى للقيام بها تغطية أثرك هو ضبط HISTFILE متغير إلى الجهاز الفارغ بحيث لا تتم كتابة المحفوظات ~/.bash_history عندما تخرج الجلسة:

export HISTFILE=/dev/null

120
2018-04-02 07:17



مهلاً ، إنه المشرف! - Raystafarian
التورية لا يقصد ، آسف :) لم أكن أتطلع إلى نيك عندما كنت أكتب تعليقي. - MaDa
ليكون بجنون العظمة (وحتى الآن لسبب ما لا يزال لا تغيير كلمة المرور الخاصة بك) لا ينبغي لك shred الملف أو الكتابة عليه عدة مرات؟ - kojiro
MaDa لا توجد مشكلة. حتى أنني أضفت طريقة أخرى في الإجابة لإحضار نيكي إلى الصورة. - devnull
ضبط HISTFILE= كفى. من عند bash(1): إذا لم يتم التعيين ، فلن يتم حفظ محفوظات الأوامر عند إنهاء shell. - Lekensteyn


نظرًا لأن bash (على الأقل جميع الإصدارات التاريخية والحالية التي أعلمها) لا يحفظ السجل تلقائيًا حتى يتم الخروج ، فإن إحدى الإستراتيجيات القابلة للتطبيق بشكل عام عند كتابة أمر تريد التأكد من عدم حفظه أبدًا هي كتابة:

kill -9 $$

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

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


23
2018-04-02 16:20



+1 ، وليس مجرد فرصة أكبر للخطأ ، ذلك قد حتى يمكن استردادها اعتمادًا على / عدد الأوامر التي تم تنفيذها بعد ذلك - Cruncher
هل تفتقد الكلمة "تلقائيًا"؟ لأن dotancohen أظهر طريقة لحفظ التاريخ دون الخروج من القشرة. - Ben Voigt
يمكن تكوين shell لحفظ محفوظات بعد تنفيذ كل أمر ، بدلاً من عند الخروج. - Kundor
+1 هذا هو بالضبط ما أردت أن أوصي به! بالإضافة إلى rm ~/.bash_history~ لإزالة ملف النسخ الاحتياطي في حالة OP عندما تم حفظه بالفعل - Tomas
اعلم أن هذا لا يعمل إذا عينت "PROMPT_COMMAND = history -a". مع هذا في مكان مكتوب على الفور الأمر مع كلمة المرور الخاصة بك إلى .bash_history الخاص بك عندما يتم عرض المطالبة بعد إنهاء الأمر. يجب عليك تعديل .bash_history لإزالته. - benrifkah


بعد كتابة شيء ما عن طريق الخطأ لم ترغب في تخزينه في السجل ، يمكنك كتابة: unset HISTFILE

لن تعرف Bash مكان تخزين السجل عند تسجيل الخروج ، وبذلك سيؤدي ذلك إلى تعطيل تسجيل السجل للجلسة بأكملها بفعالية.


11
2018-04-02 18:51



اعلم أن هذا لا يعمل إذا عينت "PROMPT_COMMAND = history -a". مع هذا في مكان مكتوب على الفور الأمر مع كلمة المرور الخاصة بك إلى .bash_history الخاص بك عندما يتم عرض المطالبة بعد إنهاء الأمر. يجب عليك تعديل .bash_history لإزالته. - benrifkah


خداعي المفضل لهذا هو أن تضغط على السهم لأعلى ، مسافة للخلف فوق الأمر ، اكتب شيئًا (قد لا يكون ضروريًا) ، اضغط على السهم لأسفل ، اكتب "ls" ، واضغط على Enter. يشعر حقا hokey ، لكنه يعمل في الواقع. وجدت هذا عندما حصلت على إزعاج بعد تحرير الأمر الخطأ في تاريخ بلدي ، ثم تخريبه من خلال عدم ضرب CTRL-C لإلغاء تحرير. أعتقد أن باش يدعم تاريخ الرجعية. ؛-)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3

يشبه:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 

11
2018-04-03 20:58



هذا عجيب. عيب واحد هو أنه يبدو أنك تعرف أنك قمت بتحرير التاريخ ، لذلك قد يكون هناك طريقة لاستعادة الإصدار القديم؟ - MadTux
MadTux - تمامًا ، ولكن .bash_history هو مجرد ملف نصي عادي. لذلك يمكنك القيام بالمثال أعلاه ، الخروج ، وإعادة الاتصال. عندما تقوم بعرض المحتويات الكاملة لملف .bash_history ، لا يوجد شيء هناك يميزها عن ما إذا كنت قد قمت بتشغيل "cd" ، لذلك يكون المسار نظيفًا. - Mark Jerde
اعلم أن هذا لا يعمل إذا عينت "PROMPT_COMMAND = history -a". مع هذا في مكان مكتوب على الفور الأمر مع كلمة المرور الخاصة بك إلى .bash_history الخاص بك عندما يتم عرض المطالبة بعد إنهاء الأمر. يجب عليك تعديل .bash_history لإزالته. - benrifkah


بالإضافة إلى الإجابات الأخرى ، قد يكون من الملائم العثور على كلمة المرور أيضًا في المخزن المؤقت التمريري الطرفي - تاريخ النص المعروض - الآن ، وأكثر من مشكلة ، ربما على القرص الصلب ، إذا كان المحاكي الطرفي قد حفظ التاريخ على القرص. يحدث هذا في KDE konsole أنه يتم تعيين حجم التاريخ على "scrollback غير محدود" ، لعدم تجاهل أي إخراج.


10
2018-04-03 19:58





مع $<space> command، لا يتم إضافة الأمر إلى التاريخ ، وأحيانًا يكون مفيدًا

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep

5
2018-04-02 14:07



في حين أنه من المثير للاهتمام ، فإنه ليس من الواضح كيف يكون هذا مفيدًا في السيناريو الموضح. هل تقترح أن كل كلمة مرور يجب أن تبدأ بمسافة؟ - Ben Voigt
لا ، ما يقترحه هو أنه في هذا المكان ، يجب كتابة أي سطر تكتبه لا تريد الالتزام بالتاريخ باستخدام مساحة رائدة. على سبيل المثال: "ls" يصبح "ls" ولا يظهر هذا السطر أبدًا في السجل أو في قائمة السهم لأعلى لجلسة جلسات العمل. - Bryan C.
لاحظ أن هذه الخدعة الرائدة تعمل فقط إذا كان HISTCONTROL $ يحتوي على ignorespace. - Bernd Jendrissek
@ jris198944 من الممكن أن يؤدي تقديم كلمة مرور عبر وسيطة سطر أوامر إلى تعريضها لأي شخص يعمل على النظام ps. - jamesdlin
وعلى أي حال ، في حين أن هذه الخدعة مفيدة إذا كنت تخطط للمستقبل ، فهذا لا يساعد في السيناريو الأصلي حيث يوجد شخص ما من غير قصد دخلت كلمة مرور على سطر الأوامر. - jamesdlin


بديل آخر لتجنب الحفظ إلى ملف السجل (قبل تسجيل الخروج) هو ببساطة إلى chmod 444 ~ / .bash_history ثم تسجيل الخروج. تسجيل الدخول مرة أخرى وإعادة تعيين الأذونات (أو لا ، اعتمادا على كيفية بجنون العظمة أنت!).


4
2018-04-03 09:08





أرى مرارا وتكرارا

يجب أن تدرك أن هذا لا يعمل إذا قمت بتعيين "PROMPT_COMMAND = history -a" [..] سيكون عليك تحرير .bash_history لإزالته.

الجزء الأول هو بالتأكيد صحيح ، ولكن ليس من الضروري اللجوء إلى التحرير اليدوي .bash_history لإصلاحه. إذا جمعت بين الأمرين على سطر واحد ، فستعمل بشكل جيد تمامًا:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352 ; history -w

1
2017-12-07 14:03



هل يمكن أن توضح ما الذي يجعل هذه الطريقة تعمل بالضبط؟ - Kamil Maciorowski
يتم تنفيذ PROMPT_COMMAND فقط قبل عرض موجه الأوامر التالي. المشكلة مع إدخال الأوامر -d و -w على خطوط منفصلة هو أن PROMPT_COMMAND سينفذ الأمر -a في التاريخ بين. إذا قمت بتنفيذ كلا -d و -w على سطر أوامر واحد ، فإنه يتم تنفيذه فقط بعد ذلك - Floris Kruisselbrink