为什么 bash 历史记录会重写 IP 和用户数据

为什么 bash 历史记录会重写 IP 和用户数据

我像这样使用 HISTTIMEFORMAT:

HISTFILESIZE=4000
HISTSIZE=4000
USER_IP="`echo $SSH_CLIENT | awk '{ print $1}'`"
USER_FIO=($USER_RYBAV $USER_TROVL)
HISTTIMEFORMAT="%d/%m/%y %T $USER_IP:$USER_FIO | "
export HISTTIMEFORMAT

并在 .ssh/authorized_keys 中

environment="USER_TROVL=torvalds.linux" ssh-rsa AAAAB3N....
environment="USER_RYBAV=rybafing.valing" ssh-rsa AAAAB3....

当我用 1 rsa 登录时,我进入了历史记录:

  178  22/07/22 16:48:07 10.100.19.204:torvalds.linux exit
  179  22/07/22 16:48:12 10.100.19.204:torvalds.linux lsblk 
  180  22/07/22 16:48:14 10.100.19.204:torvalds.linux history

当我用 2 rsa 登录时:

  178  22/07/22 16:48:07 10.100.19.204:rybafing.valing exit
  179  22/07/22 16:48:12 10.100.19.204:rybafing.valing lsblk 
  180  22/07/22 16:48:14 10.100.19.204:rybafing.valing history
  181  22/07/22 16:48:18 10.100.19.204:rybafing.valing exit
  182  22/07/22 16:48:30 10.100.19.204:rybafing.valing lsblk 

如何在具有不同密钥和环境的任何连接上从 .bash_profile 重写中看到 $USER_FIO。

我希望不会重写用户登录:

  178  22/07/22 16:48:07 10.100.19.204:**torvalds.linux** exit
  179  22/07/22 16:48:12 10.100.19.204:**torvalds.linux** lsblk 
  180  22/07/22 16:48:14 10.100.19.204:**torvalds.linux** history
  181  22/07/22 16:48:18 10.100.19.204:rybafing.valing exit
  182  22/07/22 16:48:30 10.100.19.204:rybafing.valing lsblk 

答案1

您似乎正在尝试用作.bash_history审核日志文件。

历史bash记录不是审核日志:它的设计目的只是帮助用户回忆和重复以前的命令,而不是用作记录已完成操作的可靠记录,即使在单个会话中也是如此。

bash当 shell 会话开始时将读取历史文件。它将在会话期间将历史记录保存在 RAM 中,并在会话结束时将其写回到文件中。由于您没有设置histappendshell 选项,因此 shell 将重写整个文件,而不仅仅是为每个新命令添加一行。由于在写入历史文件时所有历史时间戳都从内部 Unix 时间戳格式转换为人类可读的日期,因此更改HISTTIMEFORMAT将导致所有历史行上的时间戳格式发生更改,包括属于过去会话的历史行。这就是为什么bash'sHISTTIMEFORMAT不适合您的目的。

如果您使用“良好”的 SSH 会话登录,然后使用第二个“邪恶”会话登录,在“邪恶”会话中执行操作,然后首先注销“邪恶”会话,然后注销“良好”会话,生成的bash历史文件可能根本不显示“邪恶”会话的命令。根据 shell 设置,可以通过在命令前添加空格字符来从历史文件中省略命令。bash这些是历史文件不适合用作审核日志的更多原因。

其他 shell 会以不同的方式执行此操作,但尝试使用 shell 历史文件作为审核日志仍然是一个坏主意,因为用户将能够操纵历史文件的内容。

sudo如果您需要在共享帐户上记录谁做了什么,则仅允许通过或类似方式在共享帐户上使用一组受限制的命令会更可靠。如果必须允许用户在共享帐户上运行 shell,则可能需要设置会话记录器。现代版本sudo可以做到这一点: seelog_inputlog_outputin man 5 sudoers,也man 8 sudo_logsrvd可以通过网络在另一台主机中接收此类会话记录。

如果您尝试对帐户执行此操作root,则必须假设具有 root 访问权限的用户将能够操作本地存储的任何日志。您需要设置日志记录,以便一旦生成审核日志消息,它将被发送到第一台主机的用户无法访问的另一台主机(或其他一些记录机制)。

如果你要求可靠的审计日志,你需要做对。如果您不这样做,安全审核员(或法庭上的专家证人)将能够轻松反驳您日志的有效性,从而使它们失去作为证据的价值。

相关内容