Когда я вхожу через ssh на сервер Linux(Ubuntu), я замечаю, что все команды bash, выполненные другими пользователями на сервере, сохраняются в истории команд. Есть ли способ, который позволит мне скрыть команды, которые я ввел в командной строке, от других пользователей на сервере?
решение1
Есть много способов скрыть историю команд, но полностью отключать историю — плохая идея, так как она очень полезна. Вот три хороших способа временно ее отключить.
Самое быстрое решение: Тип
unset HISTFILE
Это предотвратит сохранение всех команд, запущенных в текущем сеансе входа, в файл .bash_history при выходе из системы. Обратите внимание, что HISTFILE будет сброшен при следующем входе в систему, поэтому история будет сохранена как обычно. Также обратите внимание, что это удаляетвсекоманды из сеанса, включая те, которые были запущены до того, как вы ввели unset HISTFILE, что может быть не тем, что вам нужно. Другим недостатком является то, что вы не можете быть уверены, что сделали все правильно, пока не выйдете из системы, так как bash все равно позволит вам использовать стрелку вверх, чтобы увидеть предыдущие команды.
Лучшее решение: введите пробел перед командой
Попробуйте, а затем нажмите стрелку вверх, чтобы увидеть, добавилось ли это в вашу историю. На некоторых сайтах это уже настроено, так что такие команды не сохраняются. Если это не сработает, добавьте строку
export HISTCONTROL=ignoreboth
в ваш файл .bashrc. При входе в систему в будущем команды, начинающиеся с пробела, будут немедленно забыты.Самый простой для запоминания: Тип
sh
Это запустит подоболочку с оригинальной оболочкой Bourne. Любые команды, написанные в ней (до вас
exit
), не будут сохранены в вашей истории. Любой, кто просматривает ваш файл истории, сможет увидеть, что вы запустили sh (что подозрительно), но не увидит, что вы запустили после этого.
Есть много других способов сделать это. Вы даже можете указать bash, какие команды никогда не следует запоминать (HISTIGNORE). Посмотрите страницу руководства bash(1) и найдите HIST, чтобы увидеть множество возможностей.
решение2
История командной строки для bash
сеансов оболочки хранится в ~/.bash_history
файле. Если этот файл не существует, он создается без прав на чтение для других пользователей.
Вы можете изменить количество команд, bash
сохраняемых в этом файле, установив HISTFILESIZE
переменную окружения. Установка ее в ноль приведет к усечению файла истории до нулевого размера. Значение по умолчанию — 500. Отмена установки переменной HISTFILE
( unset HISTFILE
) также предотвратит сохранение команд в файле истории.
Однако текущая настройка сервера, которую вы описываете (в комментариях), просто неверна.
Не должно быть никаких причин разрешать нескольким пользователям входить в систему и использовать интерактивную оболочку на root
аккаунте. Рассмотрите возможность использования sudo
вместо этого, с несколькими частными учетными записями пользователей!
История команд для root
, будь то для интерактивных сеансов или при использовании sudo
, чрезвычайно ценна,особенноесли у вас есть несколько пользователей с root
доступом к системе.
Ваша команда захочет знатьточночто root
делал пользователь с момента любых неверных настроек или других ошибок, совершенных этим пользователем, лучше всего расследовать и исправить. С историей командной строки гораздо проще найти, почему что-то пошло не так. Утилита sudo
дополнительно регистрирует каждый вызов в syslog по этой причине, с временными метками и с полной командной строкой, а также с именем пользователя, выполняющего sudo
.
РЕДАКТИРОВАТЬ: Недавно у нас начались проблемы с оптоволоконной сетью на кластере машин Linux на работе. Оказалось, что некоторые драйверы или другие были заменены на неправильную версию, когда глупый пользователь с sudo
доступом сделал неосторожное обновление пакета. Мы смогли обнаружить это, просмотрев системные журналы и sudo
временные метки в них. «Глупым пользователем» оказался никто иной, как я сам!
решение3
После входа в систему выполните следующую команду:
HISTFILE=
Это заблокирует запись любых последующих команд в файл истории.