我知道该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_audit
:https://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