如何使 Bash 历史记录不可删除?

如何使 Bash 历史记录不可删除?

只需删除包含以下内容的文件即可删除 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

相关内容