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 安全 之命令审计的主要内容,如果未能解决你的问题,请参考以下文章

网络安全审计之CMS代码审计

PHP源代码安全审计工具之wpBullet

Java代码审计之不安全的Java代码

互联网企业安全高级指南读书笔记之代码审计

Ansible 安全 之ssh登录二次验证

安全app之PHP代码审计