Ansible 安全 之命令审计
Posted 我的紫霞辣辣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible 安全 之命令审计相关的知识,希望对你有一定的参考价值。
Ansible 安全 之【命令审计】
实现该功能要求如下:
1. 接受审计的登录用户默认shell必须为bash 2. bash版本至少3.00或以上
需要该要求的原因是实现功能的方法需要用到history命令的HISTTIMEFORMAT变量和PROMPT_COMMAND变量。
配置命令审计
1.创建一个审计日志文件
mkdir /var/log/shell_audit
touch /var/log/shell_audit/audit.log
2.将日志文件所有者赋予一个最低权限的用户
chown nobody:nobody /var/log/shell_audit/audit.log
3.给该日志文件赋予所有人的写权限
chmod 002 /var/log/shell_audit/audit.log
4.设置文件权限,使所有用户对该文件只有追加权限
chattr +a /var/log/shell_audit/audit.log
5.编辑/etc/profile在末尾添加下面内容
vim /etc/profile
...
HISTSIZE=2048
HISTTIMEFORMAT="%Y/%m/%d %T ";export HISTTIMEFORMAT
export HISTORY_FILE=/var/log/shell_audit/audit.log
export PROMPT_COMMAND='{ code=$?;thisHistID=`history 1|awk "{print \\\\$1}"`;lastCommand=`history 1| awk "{\\\\$1=\\"\\" ;print}"`;user=`id -un`;whoStr=(`who -u am i`);realUser=${whoStr[0]};logDay=${whoStr[2]};logTime=${whoStr[3]};pid=${whoStr[5]};ip=${whoStr[6]};if [ ${thisHistID}x != ${lastHistID}x ];then echo -E `date "+%Y/%m/%d %H:%M:%S"` $user\\($realUser\\)@$ip[PID:$pid][LOGIN:$logDay $logTime] --- [$PWD]$lastCommand [$code];lastHistID=$thisHistID;fi; } >> $HISTORY_FILE'
6. 刷新/etc/profile文件
source /etc/profile
查看命令审计
# 查看日志记录的命令信息
tail -f /var/log/shell_audit/audit.log
# 2021/10/27 10:01:27 root(root)@(192.168.15.1)[PID:17909][LOGIN:2021-10-27 10:01] --- [/root] 2021/10/27 10:01:27 hostname [0]
# 2021/10/27 10:05:03 root(root)@(192.168.15.1)[PID:17787][LOGIN:2021-10-27 09:51] --- [/root] 2021/10/27 10:05:03 pwd [0]
2021/10/27 10:01:27 记录时间/命令执行完成时间
root(root) 执行命令的用户(最初登录的用户)
@(192.168.15.1) 登录的IP
[PID:17909] 最初登录时的LOGIN产生的PID
[LOGIN:2021-10-27 10:01] 命令执行开始的时间
[/root] 命令执行的当前目录
2021/10/27 10:01:27 命令执行开始的时间
hostname 执行的命令
[0] 命令返回的状态码
设置audit.log的日志轮换
# 配置日志切割
vim /etc/logrotate.d/shell_audit
/var/log/shell_audit/audit.log {
weekly
missingok
dateext
rotate 100
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/shell_audit/audit.log
endscript
sharedscripts
postrotate
/bin/touch /var/log/shell_audit/audit.log
/bin/chmod 002 /var/log/shell_audit/audit.log
/bin/chown nobody:nobody /var/log/shell_audit/audit.log
/usr/bin/chattr +a /var/log/shell_audit/audit.log
endscript
}
# 执行以下命令,会对日志做切割,并在/var/log/shell_audit目录下生成一个audit.log-20211027格式的文件
logrotate -vf /etc/logrotate.d/shell_audit
# reading config file /etc/logrotate.d/shell_audit
# Allocating hash table for state file, size 15360 B
# Handling 1 logs
# rotating pattern: /var/log/shell_audit/audit.log forced from command line (100 rotations)
# empty log files are rotated, old logs are removed
# considering log /var/log/shell_audit/audit.log
# log needs rotating
# rotating log /var/log/shell_audit/audit.log, log->rotateCount is 100
# dateext suffix '-20211027'
# glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
# glob finding old rotated logs failed
# running prerotate script
# renaming /var/log/shell_audit/audit.log to /var/log/shell_audit/audit.log-20211027
# running postrotate script
客户端记录日志
我们在使用xshell的时候,可以设置日志记录。
重新连接,在xshell窗口输入命令,该该窗口的所有信息都会记录到日志文件中。
以上是关于Ansible 安全 之命令审计的主要内容,如果未能解决你的问题,请参考以下文章