Linux记录命令执行的用户IP地址和时间等信息


背景

有时候不知道谁的机器远程执行了什么命令
遇到问题不好分析
上一套监控系统又有一些过于重. 
所以想到一个简单方法进行处理
当然了只防君子不防小人

方式方法

利用history的命令方式进行处理. 
记录远程用户的 ip 时间, 以及执行的命令
记录到一个文本文件中.

需要说明, 暂时为考虑文件大小和被人删除的情况.
仅是进行一下基本的历史记录功能

修改文件

vim /etc/bashrc
# 注意这个文件是控制 bash的显示信息的, 也可以用来执行部分命令

设置 bash 登录时显示 时间和ip地址
export MYIP=$(who -m | awk '{print $NF}' | sed 's/[()]//g')
PS1='[\u@\h \W $(date +"%F %T") $MYIP]\$ '

设置 bash 能够记录 执行命令的先关信息
log_command() {
    local cmd=$(history 1 | { read x y; echo $y; })
    echo "$(whoami) $MYIP $cmd" >> ~/.command_history
}
export PROMPT_COMMAND="log_command"

这样之后可以在特定用户的 ~/.command_history 里面记录
远程用户ip地址, 执行命令的时间 以及记录具体命令.

一键设置

cat >>/etc/bashrc <<'EOF'
export MYIP=$(who -m | awk '{print $NF}' | sed 's/[()]//g')
PS1='[\u@\h \W $(date +"%F %T") $MYIP]\$ '
PROMPT_COMMAND='history -a; history -c; history -r'
log_command() {
    local cmd=$(history 1 | { read x y; echo $y; })
    echo "$(whoami) $MYIP $cmd" >> ~/.command_history
}
export PROMPT_COMMAND="log_command"
EOF

注意, 可以通过给上面的EOF 增加单引号来避免
cat 内部要增加的文件的变量进行替换. 
方法比较高效.

关于配置文件的解释

在 Linux 系统中,.bashrc 和 .vimrc 等文件中的 rc 是指 “run commands” 或 “runtime configuration”。
这些文件用于配置和定制相应的软件或 shell 的行为。以下是对 .bashrc 和 .vimrc 文件的详细解释:

.bashrc
文件位置: 通常位于用户的主目录下,如 ~/.bashrc。
用途: 当用户启动一个交互式的非登录 Shell 时,Bash 会读取并执行 .bashrc 文件中的命令。
这些命令通常用于设置环境变量、定义别名、配置命令提示符和其他 Shell 行为。
示例:
# Set a custom prompt
PS1='[\u@\h \W]\$ '

# Alias definitions
alias ll='ls -la'
alias gs='git status'

.vimrc
文件位置: 通常位于用户的主目录下,如 ~/.vimrc。也可以在 /etc/vimrc(系统范围配置)中找到。
用途: 用于配置 Vim 文本编辑器的行为和外观。
用户可以在 .vimrc 文件中设置各种 Vim 选项、映射快捷键、定义函数等。
示例:
# Enable syntax highlighting
syntax on

# Set line numbers
set number

#  Set tabs to spaces
set expandtab
set tabstop=4
set shiftwidth=4

rc 的历史
rc 的使用可以追溯到 Unix 的早期。
最初的 Unix 系统使用 rc 文件来自动执行一系列初始化命令。
rc 是 “runcom” 的缩写,起源于 MIT 的 CTSS 系统,
在 Unix 世界中被采纳用于指代脚本或配置文件,这些文件在系统启动或程序运行时被执行。

总结
.bashrc: Bash Shell 的配置文件,用于设置 Shell 环境。
.vimrc: Vim 文本编辑器的配置文件,用于定制 Vim 的行为和外观。
rc: “run commands” 或 “runtime configuration” 的缩写,
用于表示这些文件包含的命令或配置将在某个时间点自动执行,通常是程序启动时。