Apa yang bisa menyebabkan riwayat bash saya dihapus secara tidak terduga?


16

Hari ini saya perhatikan bahwa sejarah bash saya dihapus sepenuhnya. Saya belum menjalankan history -catau menghapus .bash_historyfile. Selain menghapus .bash_historyfile dan history -c, bagaimana riwayat bash dapat dihapus?


2
Itu bisa saja terjadi misalnya >.bash_history. Mungkin seseorang ada di akun Anda dan mencoba menyembunyikan jejaknya. Periksa waktu masuk yang tidak biasa dengan last, cari melalui /var/log/auth.log(tergantung pada sistem Anda).
ott--

Jawaban:


17

Saat menutup beberapa instance bash pada saat yang sama, ada kondisi ras yang diketahui yang dapat menyebabkan riwayat dihapus. Ini terjadi karena tidak ada penguncian yang digunakan ketika file riwayat bash ditulis.

Chet Ramey (pengelola bash saat ini) memberikan ringkasan yang bagus tentang kondisi untuk masalah ini:

Kode saat ini (bash-4.3-devel) berfungsi seperti ini, dengan asumsi tidak ada kesalahan (lib / readline / histfile.c: history_do_write ()):

  • ganti nama (histfile, histfile ~)
  • buka file dengan O_CREAT | O_TRUNC
  • malloc buffer cukup besar untuk menampung semua data histori
  • tulis semua entri riwayat dalam satu panggilan (2) panggilan
  • tutup file
  • batalkan tautan (histfile ~)

Kode bash-4.2 bekerja dengan cara yang sama kecuali bahwa itu tidak membuat cadangan file histori. Setiap shell melakukan hal yang sama ketika keluar, dengan asumsi histappend tidak diatur, seperti pada konfigurasi Anda.

Ada beberapa cara file histori dapat berakhir nol panjang: malloc bisa gagal, atau penulisan bisa gagal. Di bash-4.2, sudah terlambat untuk melakukan apa pun tentang file histori terpotong pada saat itu. Di bash-4.3, file riwayat sebelumnya akan dipulihkan.

Utas milis ini dari bug-bash berisi diskusi yang layak tentang masalah, kemungkinan solusi, dan masalah seputar ini.

Ada juga beberapa kemungkinan lain:

  • Pada titik tertentu, Anda HISTSIZEatau HISTFILESIZEdiatur ke 0
  • Pada titik tertentu, readline Anda history-sizedisetel ke 0
  • Seseorang, baik secara sengaja atau tidak, menghapus riwayat bash (via > "$HISTFILE"atau serupa)

Dalam kasus terakhir, Anda mungkin ingin memeriksa bahwa seseorang belum mengakses akun Anda dan mencoba menyembunyikan jejak mereka dengan cara yang kasar. Lihatlah last, /var/log/auth(atau /var/log/securepada CentOS / RHEL), dan jika Anda memilikinya, semua proses akuntansi dan / atau perangkat lunak audit yang mungkin telah Anda instal.


1

Bagaimana saya tidak sengaja menghapus riwayat pesta saya:

Saya memutar skrip readline terminal alternatif saya sendiri dari prinsip pertama: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

dan kemudian mengujinya di terminal. GNU Readline memiliki ukuran sejarah dan instruksi pelestarian sejarah yang terpasang di dalamnya, sehingga ukuran hist dapat di-default, dan dengan demikian semua riwayat Anda terhapus.

Pemulihan sejarah jika dibiarkan dalam memori:

Jika Anda menangkapnya sebelum reboot, atau jika terminal dibiarkan terbuka dari sebelum clear, Anda mungkin dapat menemukan riwayat Anda dalam memori. Jalankan history | cut -c 8- > histback_user1.txtpada semua terminal yang dibiarkan terbuka dan untuk setiap pengguna. Jika itu menghasilkan file dengan histori panjang Anda, maka Anda dapat menggantinya ~/.bash_historydengan histback_user1.txt. Periksa juga riwayat semua pengguna yang baru-baru ini masuk ke sistem serta riwayat root. Sangat mudah untuk secara tidak sengaja menghapus riwayat bash dalam banyak keadaan, jadi jika Anda ingin memastikan tidak ada kehilangan riwayat, Anda memerlukan skrip cadangan harian.


Terima kasih . Saya tidak tahu apa yang terjadi, tetapi sejarah saya dipindahkan kemarin dan baru sekarang saya menyadarinya. Tapi, beruntung saya, saya tidak punya satu terminal terbuka, tapi 10 (!). Semuanya baik sekarang.
Marc.2377
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.