Yanlışlıkla bash komut satırına şifre yazdım.


189

Parolamı yanlışlıkla bash komut satırına yazdım, Last login: ...satırın karşılığını Wrong passwordyazdım (Acelem vardı). İzlerimi örtmek için ne yapayım?

Yaptığım .bash_history, rahatsız edici çizgiyi düzenlemek ve silmekti (şifrenin dosyada göründüğünü görmek için bir kez yeniden girmek zorunda kaldım, böylece onu silebildim ve yeniden UPARROW tuşunun altındaki geçmişden kaybolduğunu görmek için yeniden relogin).

Komut geçmişinin kaydedilebileceği başka bir yer var mı? Sistem CentOS 6.5'tir.


59
Sadece şifreyi değiştirin :)
gronostaj

96
Şifreyi değiştirmek o kadar kolay değil ... yöneticiden yeni ortak anahtarımı 15 farklı sunucuya yeniden yüklemesini istemeliyim - ve adam aynı /dev/null.
MaDa

71
Parolanızı istediğiniz zaman kolayca değiştiremezseniz, ciddi bir güvenlik boşluğunuz olabilir. Birisi şifrenizi gerçekten aldığında ne yapacaksınız? Sistem erişimini derhal iptal etmek için herhangi bir yolunuz var mı?
gronostaj

42
Bir ssh tuşunun parolasını, anahtarı değiştirmeden değiştirebilirsiniz ssh-keygen -f id_rsa -p.
jwg

6
Sadece, en azından ağa bağlı Windows girişleri altında, hortumlandığını söylemek için uğradım. Admin (bazı yüksek kaliteli sunucu kulelerinde) varsayılanı tüm giriş denemelerini kaydetmektir ve elbette kullanıcı adları açık metindir. Bazı girişimci kişilerin yapması gereken, username-ish dizgilerini aramak ve bunları bir sonraki geçerli kullanıcı adıyla (veya aynı makinede bir sonraki giriş yapma denemesi) ilişkilendirmektir. Ve bu yönetici günlük dosyasını silmek için basit bir yolu yoktur. Yani gerçekten şifrenizi değiştirmelisiniz.
Carl Witthoft,

Yanıtlar:


184

bashGeçmişin tamamını silmek yerine, yalnızca rahatsız edici çizgiyi geçmişinden kaldırabilirsiniz . -dBayrakla çizgiyi kaldırın , sonra bayrakla yeni geçmişi kaydedin (yazın) -w:

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

1
"PROMPT_COMMAND = history -a" ayarladıysanız, bunun çalışmadığını unutmayın. Bu işlem yerinde, komut sona erdikten sonra komut istemi görüntülendiğinde şifrenizle komut hemen. Çıkarmak için .bash_history'nizi düzenlemeniz gerekecektir.
benrifkah

1
Ayrıca, satır rehine dosyasında yazılmışsa ve daha sonra birden fazla kabuk (terminal penceresi) açılmışsa, TÜM bu kabukların orada tarihçesi olacak! Ya tüm bu mermileri kaldırmanız gerekecek, ya da en azından kapattığınız geçmiş kabuğundan! Kullanılan kabuğun varlığından önce alması daha iyi. Çoklu mermilerle uğraşırken tarih bir kabusa dönüşebilir.
anthony

121

Bunun iki kısmı var:

  • bashgeçmişi ~/.bash_history, varsayılan olarak oturumun sonuna yazılan bir dosyaya depolar.
  • bu historybellekte tutulur

Güvende olmak için, oturumu silmeniz gerekir:

history -c

ve geçmiş dosyasını gerektiği gibi kısaltın:

> ~/.bash_history

Şifreyi yazdığınız oturumunuz hala açık ise, o başka bir yolu da iz kapak ayarlamaktır HISTFILEtarih yazılır olmaz böylece boş cihaza değişkeni ~/.bash_historyzaman oturumu çıkışlarında:

export HISTFILE=/dev/null

205
Hey bak, bu yönetici!
Raystafarian

5
Pun amaçlanmadı, üzgünüm :) Yorumumu yazarken nickinize bakmıyordum.
MaDa

7
Paranoyak olmak (ve yine de bir nedenden dolayı şifrenizi hala değiştirmemek) shreddosyanın size yazılmaması veya üzerine defalarca yazılmaması gerekir mi?
kojiro

1
@ MaDa Sorun değil. Nickimi resme getirmek için cevabımdan başka bir yol daha ekledim.
devnull

5
Ayar HISTFILE=yeterli. Kimden bash(1): Ayarlanmamışsa, bir kabuk çıkarken komut geçmişi kaydedilmez.
Lekensteyn

23

Bash (en azından farkında olduğum tüm tarihi ve şu anki sürümler) çıkana kadar otomatik olarak geçmişi kaydetmediğinden, asla kaydedilmemesini istediğiniz bir komutu yazdığınızda genel olarak uygulanabilir bir strateji hemen yazmaktır:

kill -9 $$

Bu SIGKILL, yakalanamayan kabuğunu öldürür , böylece kabuğun çıkışta hiçbir şey kaydetme yolu yoktur.

Diğer pek çok yaklaşım, özellikle sistem btrfs veya benzeri kullanıyorsa, hata olasılığının çok daha fazla olduğu (bir kopyanın eksik olması durumunda) (yani verilerin diske çarpmasından sonra) fırçalamayı içerir.


2
1, hatanın sadece şans daha, bu olabilir hatta kaç komutları sonra infaz edildi / if bağlı kurtarılabilir
Cruncher

"Otomatik olarak" kelimesini mi kaçırıyorsunuz? Çünkü dotancohen kabuktan çıkmadan tarihi kurtarmanın bir yolunu göstermiştir.
Ben Voigt

3
Kabuk, çıkış yerine her komut çalıştırıldıktan sonra geçmişi kaydetmek üzere yapılandırılabilir.
Nick Matteo,

1
+1 Bu kesinlikle önermek istediğim şeydi! rm ~/.bash_history~OP'nin davasında zaten kaydedilmiş olan yedekleme dosyasını kaldırmanın yanı sıra
Tomas

"PROMPT_COMMAND = history -a" ayarladıysanız, bunun çalışmadığını unutmayın. Bu işlem yerinde, komut sona erdikten sonra komut istemi görüntülendiğinde şifrenizle komut hemen. Çıkarmak için .bash_history'nizi düzenlemeniz gerekecektir.
benrifkah

11

Yanlışlıkla geçmişinde saklamak istemediğiniz bir şeyi yazdıktan sonra, şunu yazabilirsiniz: unset HISTFILE

Bash, oturumu kapattığınızda geçmişin nereye kaydedileceğini bilmeyecek, bu nedenle etkin bir şekilde tüm oturum için geçmiş günlüğünü devre dışı bırakacaktır.


"PROMPT_COMMAND = history -a" ayarladıysanız, bunun çalışmadığını unutmayın. Bu işlem yerinde, komut sona erdikten sonra komut istemi görüntülendiğinde şifrenizle komut hemen. Çıkarmak için .bash_history'nizi düzenlemeniz gerekecektir.
benrifkah

11

Bunun için en sevdiğim püf noktası yukarı oka basmak, komutun üstüne geri gitmek, bir şeyler yazmak (gerekli olmayabilir), aşağı oka basmak, "ls" yazıp enter tuşuna basmaktır. Gerçekten hokey hissediyor, ama gerçekten işe yarıyor. Bunu, tarihimdeki yanlış komutu düzenledikten ve sonra düzenlemeyi iptal etmek için ctrl-c tuşlarına basmayarak mahvetmeden rahatsız ettiğimde öğrendim. Sanırım bash revizyonist tarihi destekliyor. ;-)

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

Şuna benziyor:

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

Bu garip . Dezavantajı, tarihi düzenlediğinizi biliyor gibi görünmesidir, bu nedenle eski sürümü geri yüklemek için bir yol olabilir mi?
MadTux

@MadTux - Tamamen, ancak .bash_history sadece düz bir metin dosyasıdır. Böylece yukarıdaki örneği yapabilir, çıkıp yeniden bağlanabilirsiniz. .Bash_history dosyasının tam içeriğini görüntülediğinizde, "cd" yi çalıştırdıysanız, onu ayıran hiçbir şey yok, bu yüzden iz temiz.
Mark Jerde

"PROMPT_COMMAND = history -a" ayarladıysanız, bunun çalışmadığını unutmayın. Bu işlem yerinde, komut sona erdikten sonra komut istemi görüntülendiğinde şifrenizle komut hemen. Çıkarmak için .bash_history'nizi düzenlemeniz gerekecektir.
benrifkah

10

Diğer cevaplara ek olarak, parolanın terminal kaydırma tamponunda - görüntülenen metnin geçmişi - şimdi ve terminal emülatörü kaydetmişse, muhtemelen sabit diskte daha fazla sorun bulunmasıyla ilgili olabilir. diskin geçmişi. Bu, KDE konsole'de, herhangi bir çıktıyı asla atmamak için geçmiş boyutunun "sınırsız kaydırma" olarak ayarlandığını gösterir.


6

İle $<space> command, bazen bir yararlı tarihe bir komut eklenmez

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

2
İlginç olsa da, açıklanan senaryoda bunun ne kadar yararlı olduğu belli değil. Her şifrenin bir boşlukla başlaması gerektiğini mi söylüyorsun?
Ben Voigt

1
Hayır, önerdiği şey, bunun yerinde olmasıyla, tarihe bağlı olmasını istemediğiniz herhangi bir satırın, öncü bir boşlukla yazılması gerektiğidir. örneğin: "ls", "ls" olur ve bu çizgi hiçbir zaman tarihte veya oturumlar yukarı ok listesinde gösterilmez.
Bryan C.

4
Bu önde gelen alan numarasının yalnızca $ HISTCONTROL ignorepace içeriyorsa işe yaradığını unutmayın.
Bernd Jendrissek,

2
@ jris198944 Komut satırı argümanı yoluyla bir parola sağlamak, onu çalışan sistemdeki herkese maruz bırakabilir ps.
jamesdlin

2
Her neyse, bu hüner, önceden planlama yapmakta fayda varsa, bu, birinin komut satırına yanlışlıkla bir şifre girdiği orijinal senaryoya yardımcı olmaz .
jamesdlin

4

Geçmiş dosyasına kaydetmemek için başka bir alternatif (oturumu kapatmadan önce)

chmod 400 ~/.bash_history 

ve sonra oturumu kapatın. Geçmişi dosyaya yazmayı durdur (dosya salt okunur olduğu için) böylece tüm bash oturumu atılır ve önceki geçmiş korunur.

Tekrar giriş yapın ve izinleri sıfırlayın 600(ne kadar paranoyak olduğunuza bağlı olarak!).


1

Defalarca bahsettiğimi görüyorum

"PROMPT_COMMAND = history -a" [..] ayarladıysanız, bunun işe yaramayacağını unutmayın.

İlk kısım kesinlikle doğrudur, ancak düzeltmek için .bash_history'yi elle düzenlemeye başvurmanıza gerek yoktur. İki komutu bir satırda birleştirirseniz, mükemmel çalışıyor:

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

Bu yöntemin tam olarak neyin işe yaradığını açıklayabilir misiniz?
Kamil Maciorowski

PROMPT_COMMAND sadece bir sonraki komut istemini göstermeden önce çalıştırılır. -D ve -w komutlarını ayrı satırlara girme sorunu PROMPT_COMMAND öğesinin -a komutunu arada çalıştırmasıdır. Bir komut satırında hem -d hem de -w komutunu çalıştırırsanız, daha sonra çalıştırılır
Floris Kruisselbrink

0

Buradaki cevapların çoğu, söz konusu komutu yazılmadan önce para birimi bash oturumunun geçmişinden kaldırmayı dener $HISTFILE(varsayılan olarak ~ / .bash_history). Ancak, PROMPT_COMMAND=history -a komutu şifrenizle ayarladıysanız $HISTFILE, komut sona erdikten sonra bilgi istemi görüntülendiğinde derhal size yazılır . $HISTFILEKaldırmak için sizi düzenlemeniz gerekecek .

Bu ayar genellikle birden fazla açık bash oturumundan gelen komutları serpiştirmek için kullanılır .


-3

Ayrıca syslog günlüklerini de kontrol etmek isteyeceksiniz. Geçersiz girişler genellikle syslog'a kaydedilir.

/ var / log / messages veya işletim sisteminiz için eşdeğeri.


1
Sorun yanlış bir şifre girmesi değil, zaten giriş yapmış ve şifresini hemen girip şifresini girmesi değil. Bu mesaj dosyasında gösterilmez.
MaQleod
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.