สิ่งใดอาจทำให้ประวัติทุบตีของฉันถูกล้างอย่างไม่คาดคิด


16

วันนี้ฉันสังเกตเห็นว่าประวัติทุบตีของฉันถูกล้างออกอย่างสมบูรณ์ ฉันไม่ได้ดำเนินการhistory -cหรือลบ.bash_historyไฟล์ นอกเหนือจากการลบ.bash_historyไฟล์history -cแล้วจะล้างประวัติทุบตีได้อย่างไร?


2
>.bash_historyมันอาจจะเกิดขึ้นโดยการเช่น อาจมีบางคนอยู่ในบัญชีของคุณและพยายามซ่อนเส้นทางของเขา ตรวจสอบเวลาเข้าสู่ระบบที่ผิดปกติด้วยlastค้นหาผ่าน/var/log/auth.log(ขึ้นอยู่กับระบบของคุณ)
ott--

คำตอบ:


17

เมื่อปิดอินสแตนซ์ bash หลายรายการในเวลาเดียวกันมีเงื่อนไขการแข่งขันที่เป็นที่รู้จักซึ่งอาจทำให้ประวัติถูกล้าง สิ่งนี้เกิดขึ้นเนื่องจากไม่มีการล็อคเมื่อใช้ไฟล์ประวัติทุบตี

Chet Ramey (ผู้ดูแลการทุบตีในปัจจุบัน) ได้สรุปเงื่อนไขที่ดีสำหรับปัญหานี้:

โค้ดปัจจุบัน (bash-4.3-devel) ทำงานคล้ายนี้โดยไม่มีข้อผิดพลาด (lib / readline / histfile.c: history_do_write ()):

  • เปลี่ยนชื่อ (histfile, histfile ~)
  • เปิดไฟล์ด้วย O_CREAT | O_TRUNC
  • บัฟเฟอร์ malloc มีขนาดใหญ่พอที่จะเก็บข้อมูลประวัติทั้งหมด
  • เขียนรายการประวัติทั้งหมดด้วยการเรียก write (2) ครั้งเดียว
  • ปิดไฟล์
  • ยกเลิกการเชื่อมโยง (histfile ~)

รหัส bash-4.2 ทำงานในลักษณะเดียวกันยกเว้นว่าจะไม่สำรองไฟล์ประวัติ แต่ละเชลล์ทำสิ่งเดียวกันเมื่อออกจากระบบโดยไม่ได้ตั้งค่า histappend เช่นเดียวกับในการกำหนดค่าของคุณ

มีสองวิธีที่ไฟล์ประวัติสามารถจบด้วยความยาวเป็นศูนย์: malloc สามารถล้มเหลวหรือการเขียนอาจล้มเหลว ใน bash-4.2 มันสายเกินไปที่จะทำทุกอย่างเกี่ยวกับไฟล์ประวัติที่ถูกตัดทอนในตอนนั้น ใน bash-4.3 ไฟล์ประวัติก่อนหน้านี้จะถูกกู้คืน

เธรดรายการจดหมายนี้จากข้อผิดพลาดทุบตีมีการอภิปรายที่ดีของปัญหาการแก้ปัญหาที่เป็นไปได้และความกังวลรอบนี้

นอกจากนี้ยังมีความเป็นไปได้อื่น ๆ :

  • ในบางจุดคุณHISTSIZEหรือHISTFILESIZEถูกตั้งค่าเป็น 0
  • ในบางจุด readline ของคุณhistory-sizeถูกตั้งค่าเป็น 0
  • ใครบางคนไม่ว่าจะโดยเจตนาหรือไม่ตั้งใจเช็ดประวัติทุบตี (ผ่าน> "$HISTFILE"หรือคล้ายกัน)

ในกรณีหลังคุณอาจต้องการตรวจสอบว่ามีบางคนที่ไม่ได้เข้าถึงบัญชีของคุณและพยายามซ่อนเส้นทางของพวกเขาอย่างไม่เหมาะสม ลองดูที่last, /var/log/auth(หรือ/var/log/secureบน CentOS / RHEL) และถ้าคุณมีมันกระบวนการใด ๆ บัญชีและ / หรือซอฟแวร์การตรวจสอบคุณอาจติดตั้ง


1

ฉันจะลบประวัติทุบตีของฉันโดยไม่ตั้งใจได้อย่างไร:

ฉันเปิดใช้สคริปต์ readline ของเทอร์มินัลทางเลือกของตัวเองจากหลักการแรก: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

แล้วทำการทดสอบในเทอร์มินัล GNU Readline นั้นมีขนาดประวัติและคำแนะนำในการเก็บรักษาประวัติเพื่อให้ขนาดฮีสสามารถเป็นค่าเริ่มต้นได้และประวัติทั้งหมดของคุณจะถูกพัดหายไป

การกู้คืนประวัติถ้าทิ้งไว้ในหน่วยความจำ:

หากคุณจับมันก่อนที่จะรีบูตเครื่องหรือถ้าเทอร์มินัลถูกเปิดทิ้งไว้ก่อนหน้าเคลียร์คุณอาจสามารถค้นหาประวัติของคุณในหน่วยความจำ เรียกใช้history | cut -c 8- > histback_user1.txtในทุกขั้วเปิดทิ้งไว้และสำหรับผู้ใช้ทุกคน หากที่ผลิตไฟล์ที่มีประวัติของการขยายของคุณแล้วคุณสามารถแทนที่ด้วย~/.bash_history histback_user1.txtตรวจสอบประวัติของผู้ใช้ทั้งหมดที่เข้าสู่ระบบเมื่อเร็ว ๆ นี้เช่นเดียวกับประวัติของรูท เป็นเรื่องง่ายที่จะล้างประวัติ bash โดยไม่ตั้งใจในหลาย ๆ สถานการณ์ดังนั้นหากคุณต้องการแน่ใจว่าไม่มีการสูญเสียประวัติคุณต้องมีสคริปต์สำรองรายวัน


ขอบคุณ ฉันไม่รู้ว่าเกิดอะไรขึ้น แต่ประวัติของฉันได้ถูกตั้งถิ่นฐานใหม่เมื่อวานนี้และมันก็ไม่เป็นเช่นนั้นจนกระทั่งฉันสังเกตเห็น แต่โชคดีที่ฉันไม่ได้เปิดหน้าต่างเทอร์มินัลเดียว แต่ 10 (!) ตอนนี้ก็ดีแล้ว
Marc.2377
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.