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

Tom*_*mas 6 bash history

只需删除包含的文件即可删除 Bash 历史记录。如何保护历史记录不被清除/删除?

Rin*_*ind 15

你问的可以用......

sudo chattr +a ~$USER/.bash_history
sudo chattr +i ~$USER/.profile
Run Code Online (Sandbox Code Playgroud)

这将设置“仅附加”.bash_history和“不可变位” .profile,甚至 root 也无法删除或截断文件,除非删除该位。第二个命令阻止用户编辑.profile.

接下来把它放在/etc/bash.bashrcor 中/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
Run Code Online (Sandbox Code Playgroud)

这将锁定用户可能做出的最简单的操作来搞砸。但它不会阻止更有经验的用户......

  • 用户可以简单地切换到另一个 shell,你不会看到任何注册。
  • 任何拥有管理员密码的人或任何具有CAP_LINUX_IMMUTABLE能力的进程都可以删除不可变位
  • 默认情况下以空格开头的命令不会存储在历史记录中。
  • 你无法阻止kill -9 $$。该命令将阻止写入历史记录。

所以你问的问题是没有意义的。如果您不信任您的用户,请不要让他们进入您的系统。

如果这个问题是为了追踪黑客的行为而创建的……你可以完全忘记这一点;当它们在您的系统上时,它们不太可能使用 bash,并且此历史记录仅适用于 bash。

一个更好的选择是使用grsecurity或安装acct(GNU 会计实用程序)。

  • 至少不是。您可以通过不让其他人安装 rootkit 来防止它们。坚持使用从 Ubuntu 软件中心获得的软件,不要从网络上随意下载软件。如果您下载软件的来源是可信的,您将永远不会获得 rootkit。 (2认同)

小智 8

这不是您要找的答案,但您真正想要的是 linux 的审计系统,而不是 bash。审计系统是专门为这样的事情设计的,而 shell 历史记录是一个方便的功能,有很多方法可以修改它,或者干脆不使用它,如上面的许多答案所述。


Anw*_*war 4

您无法保护.bash_history文件不被删除。如果将其权限位设置为只读,bash 将无法写入其中。

rm但是,您可以为您创建一个别名~/.bashrc,这样,每次您想要删除某些内容时,它都会问您(y/n)问题

将此行放入您的~/.bashrc文件中。

alias rm="rm -i"
Run Code Online (Sandbox Code Playgroud)

还要确保只有您可以读取/写入该文件。

chmod 600 ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

应该做这项工作。