Вопрос Я случайно набрал пароль в командной строке bash


Я случайно набрал пароль в командной строке bash, приняв Last login: ... линия для Wrong password (Я торопился). Что я делаю, чтобы покрыть свой след?

Я сделал редактирование .bash_history и удалили строку нарушения (пришлось переписывать один раз, чтобы увидеть пароль в файле, чтобы я мог удалить его, и повторно переустановить его, чтобы он исчез из истории, доступной под ключом UPARROW).

Есть ли другое место, где история команд может быть сохранена? Система CentOS 6.5.


179
2018-04-02 06:42


происхождения


Просто измените пароль :) - gronostaj
Изменение пароля не так просто ... Мне нужно попросить администратора переустановить мой новый открытый ключ на 15 разных серверах - и парень похож /dev/null, - MaDa
Если вы не можете легко изменить свой пароль в любое время, тогда у вас может быть серьезная лазейка безопасности. Что вы будете делать, когда кто-то действительно получит ваш пароль? У вас есть какие-либо средства для немедленного отзыва доступа к системе? - gronostaj
Вы можете изменить кодовую фразу ключа ssh без изменения ключа: ssh-keygen -f id_rsa -p, - jwg
Просто добавьте, чтобы упомянуть, что, по крайней мере, под сетевыми входами Windows, вы попадаете. По умолчанию администратор (в некоторой высокой серверной башне) записывает все попытки входа, и, конечно, имена пользователей являются cleartext. Любому предприимчивому человеку нужно искать строки, отличные от имени пользователя, и сопоставлять их со следующим действительным именем пользователя (или следующей попыткой входа на тот же компьютер). И нет простого способа удалить этот файл журнала администратора. Поэтому вам действительно нужно изменить свой пароль. - Carl Witthoft


ответы:


Вы можете удалить только строку нарушения из bashа не очистить всю историю. Просто удалите строку с помощью -d флаг, затем сохраните (напишите) новую историю с помощью -w флаг:

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

174
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
Pun не предназначен, извините :) Я не смотрел на ваш ник, когда писал свой комментарий. - MaDa
Чтобы быть параноидальным (и все же по какой-то причине все еще не изменяйте свой пароль), не следует ли вам shred файл или иначе перезаписать его много раз? - kojiro
@MaDa Нет проблем. Я даже добавил еще один ответ в ответ, чтобы привести мой ник в картину. - devnull
настройка HISTFILE= достаточно. Из bash(1): Если unset, история команд не сохраняется, когда оболочка завершается. - Lekensteyn


Поскольку bash (по крайней мере, все исторические и текущие версии, о которых я знаю), автоматически не сохраняет историю до выхода, общеприменимая стратегия, когда вы набрали команду, которую вы хотите гарантировать, никогда не будет сохранена, - это немедленно ввести:

kill -9 $$

Это убивает оболочку SIGKILL, который нельзя поймать, поэтому оболочка не имеет возможности ничего сохранить при выходе.

Большинство других подходов включают очистку после факта (т. Е. После того, как данные уже попали на диск), что имеет намного больше шансов на ошибку (отсутствует копия), особенно если система может использовать btrfs или аналогичную.


23
2018-04-02 16:20



+1, а не просто больше шансов на ошибку, это май даже можно восстановить в зависимости от того, было ли / сколько команд выполнено после него - Cruncher
Отсутствует слово «автоматически»? Потому что dotancohen показал способ сохранить историю, не выходя из оболочки. - Ben Voigt
Оболочку можно настроить для сохранения истории после выполнения каждой команды, а не при выходе. - 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. Чувствует себя действительно хоккеем, но на самом деле это работает. Обнаружил это, когда меня раздражало после редактирования неправильной команды в моей истории, а затем разрушило ее, не нажимая ctrl-c, чтобы прервать редактирование. Я думаю, bash поддерживает ревизионистскую историю. ;-)

$ 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
$ 

10
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, размер истории которого установлен на «неограниченный прокрутка», чтобы никогда не отбрасывать какой-либо вывод.


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