只需删除包含以下内容的文件即可删除 Bash 历史记录。如何保护历史记录不被清除/删除?
答案1
您所要求的事情可以通过...来完成。
sudo chattr +a ~$USER/.bash_history
sudo chattr +i ~$USER/.profile
这将设置 的“仅追加”.bash_history
和 的“不可变位”,.profile
并且即使 root 也不能删除或截断文件,除非删除该位。第二个命令阻止用户编辑 的设置.profile
。
接下来将其放入/etc/bash.bashrc
或/etc/.profile
:
# #Prevent unset of histfile, /etc/profile
HISTFILE=~/.bash_history
HISTSIZE=10000
HISTFILESIZE=999999
# Don't let the users enter commands that are ignored# in the history file
HISTIGNORE=""
HISTCONTROL=""
readonly HISTFILE
readonly HISTSIZE
readonly HISTFILESIZE
readonly HISTIGNORE
readonly HISTCONTROL
export HISTFILE HISTSIZE HISTFILESIZE HISTIGNORE HISTCONTROL
这将锁定用户可能进行的大多数简单操作,从而阻止其发生故障。但这无法阻止更有经验的用户...
- 用户可以简单地切换到另一个 shell,而您将看不到任何注册。
- 任何拥有管理员密码的人或任何
CAP_LINUX_IMMUTABLE
有能力的进程都可以删除不可变位 - 默认情况下以空格开头的命令不会存储在历史记录中。
- 您无法停止
kill -9 $$
。该命令将阻止写入历史记录。
所以你问的毫无意义。如果你不信任你的用户,就不要让他们进入你的系统。
如果这个问题是为了追踪黑客的行为而提出的......你完全可以忘记这件事;当他们在你的系统上时,他们不太可能使用 bash,而且这个历史记录只适用于 bash。
一个更好的选择是使用grsecurity或安装帐户(GNU 会计实用程序)。
答案2
这不是您想要的答案,但您真正想要的是 Linux 的审计系统,而不是 Bash。审计系统是专门为此类事情设计的,而 Shell 历史记录是一种便利功能,有很多方法可以修改它或根本不使用它,如上面的许多答案所述。
答案3
您无法保护.bash_history
文件不被删除。如果您将其权限位设为只读,bash 将无法写入其中。
rm
但是,你可以在你的中创建一个别名,~/.bashrc
这样,每次你想删除某些东西时,它都会问你(y/n)
问题
将此行放入您的~/.bashrc
文件中。
alias rm="rm -i"
还要确保只有您可以读取/写入该文件。
chmod 600 ~/.bashrc
应该可以完成这个工作。
答案4
您可以设置/etc/skel/.bashrc
或每个用户的~/.bashrc
readonly HISTFILE
readonly HISTFILESIZE
readonly HISTSIZE
readonly HISTCMD
readonly HISTCONTROL
readonly HISTIGNORE