如何默认将每个会话的所有终端输入和输出记录到本地文件?

如何默认将每个会话的所有终端输入和输出记录到本地文件?

我知道该script命令可用于将所有键盘输入和屏幕输出记录到文件中,但每次启动终端会话时都必须调用该命令。我保留 .bash_history 文件的时间戳版本,以便在达到 $HISTSIZE 后旧命令不会丢失。我在 .bashrc 中的 $HISTFILE 语句是HISTFILE=~/.bash_history_$(date '+%Y%m%d_%H_%M_%S_%N').txt。这满足了我创建执行命令日志的需要,但没有将输出记录到文件中。我可以在 .bashrc 或 .profile 中放入一些内容来记录所有 stdin 输入以及 stdout 和 stderr 输出到带时间戳的文件吗?这对于监视用户活动也很方便,但我只需要它作为将来的参考。

编辑: 我发现如果我把

script /ramdisk/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt ; exit

在 ~/.profile 的末尾,对于测试用户来说,这就像我想要的那样。

命令从终端退出;exit后的额外内容。script用户登录时键入“exit”将退出script会话。当它从 ~/.profile 退出时,额外的“退出”就会退出 SSH/终端会话。我计划创建额外的功能,将chown文件发送到 root,chmod 600这样只有 root 才能读取它。从那里,它将被移动到一个安全的位置。

cat此外,使用和可以看到颜色more。在编辑器中打开它会显示用于生成颜色的控制字符。我对此表示同意。

答案1

如果您的目标是监控系统,那么您需要pam_tty_audit.顾名思义,pam_tty_audit是一个帕姆模块如果配置正确,每当用户打开会话(并获取 TTY)时都会调用它。该模块记录所有输入和输出,并将其记录的所有内容发送到审计守护进程。然后,您可以对auditd 守护进程执行查询以查看日志。

RedHat 提供了一个很好的入门指南pam_tty_audithttps://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sec-Configuring_PAM_for_Auditing.html
对于不基于 RedHat 或 Fedora 的发行版,该指南仍然有效,但可能需要对/etc/pam.d/.

请注意,这并非完全万无一失。有多种方法可以在没有 TTY 的情况下执行命令。例如,当通过 ssh 连接时,您可以执行ssh foo.example.com bash -i,并且由于指定了命令,因此不会分配 TTY。尽管您可以采取一些措施来防止这种情况发生。

您还需要确保对日志的访问是安全的。pam_tty_audit记录全部TTY 活动,这包括您输入的密码。

答案2

如果你真的想要,你可以制作一个程序(或shell脚本),它调用script写入带时间戳的“typescript”文件(并依次调用你的真实shell)并进行将您的默认 shell 编程为/etc/passwd.

有一些陷阱:

  • 您可能需要将此程序添加到/etc/shells
  • 这样做会设置SHELL环境变量,该变量有多种使用方式。覆盖它以避免循环(和其他不当行为):
    #!/bin/sh
    外壳=/bin/bash
    出口外壳
    脚本 -c "$SHELL" $HOME/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt

相关内容