使用非管理员实现系统事件日志的自动备份与清除

1      场景描述

最近一个客户要对域内所有的域控制器开启日志审核,要审核的内容包括“用户的登录、注销”“活动目录账户管理”。开启审核后,在用户比较多并且登陆比较频繁的情况下,Windows安全日志会快速的增加,Windows安全日志默认的大小为128MB,可以通过修改安全日志最大大小来增加安全日志的存储量,理论上Windows安全日志的最大值可以设定为4GB,但微软官方指出安全日志在实际中最大的限制为300MB,但是即使我们调整日志最大大小为一个较大的值也避免不了长期日志过大达到该限制的情况。当Windwos安全日志满了后,每次用户登陆到域控制器都会提示如下的错误。

鉴于此我们考虑将安全日志每天进行定期的备份与清除,即每天晚上将所有域控制器的安全日志自动备份到文件服务器中,并清空安全日志。默认情况下要清除日志必须要域控Administratos组才可以,但是客户不想给建立的账号那么高的权限,于是我们只好建立一个普通的域用户用来实现此效果。

2      详细操作

2.1    开启审核

通过组策略为所有域控制器开启安全审核


步骤


操作

  1. 1.       

在域控组策略控制台新建一条组策略,组策略名称根据实际情况命名,并打开编辑

  1. 2.       

定位到“计算机配置”>“策略”>“Windows设置”>“安全设置”>“本地策略”>“审核策略”

  1. 3.       

在右侧的详细策略中可根据需求开启相应的审核,windows默认开启了“审核登录事件”,用户在计算机上的登陆与注销都会被记录。在该客户场景中我们需要开启“审核账户管理”来记录管理员对活动目录用户的操作(创建、更改或删除用户帐户或组。重命名、禁用或启用用户帐户。设置或更改密码。)

双击“审核账户管理”,在设置窗口勾选“定义这些策略设置”,在审核这些操作下勾选“成功”“失败”,点击“确定”,关闭组策略编辑器

  1. 4.       

将定义好的组策略,链接到域控制器OU“Domain Controller”

  1. 5.       

在所有域控制器执行GPUPDATE /force强制立即刷新组策略,或者等待90分钟所有域控制器会自动刷新计算机策略应用此更改

  1. 6.       

策略刷新后,使用域管理员打开“Active Directory用户和计算机”管理控制台,进行账户的创建。如下图我在活动目录中创建了一个名为xiaowang的账户,打开安全日志即可看到该账户创建的详细信息,如创建者,创建的用户名,是否启用。


7.


同样删除用户、重置用户密码也会被记录

2.1    日志自动备份

要实现日志的备份与清除必须要执行操作的账户具有读取与删除安全日志的权限。可以通过wevtutil gl security的方式来查看默认对security日志具有操作权限的账户

Windows 安全日志默认的权限如上图中标红的所示。

Windows 日志的操作权限分为:读取、写入、清除。权限与 ACE 字符串的访问权限字段中的以下位对应:

·         1= 读取

·         2 = 写入

·         4 = 清除

安全日志默认有3个用户组具有操作权限:操作权限对应如下表所示:


SDDL(安全描述定义语言)符或SID


操作权限


对应用户组


SY


0xf0005


Local system


BA


0x5(4+1读取、清除)


Built-in administrators


S-1-5-32-573


0x1(只读)


EventReader

Note:微软SDDL与用户组对应列表https://msdn.microsoft.com/zh-CN/library/aa379602.aspx

通过上面的查询可以得出,具有删除安全日志权限的账户组为域控的Administrators组,只有该组的成员可以删除安全日志。如果我们要直接新建一个账户用来删除的话只能是加入到Administrators组中。

同样微软也提供赋予其他用户组删除安全日志权限的功能,我们可以自己新建一个用户组也可以赋予现有用户组来实现,下面的步骤中我将示范赋予Perfmonce Log Users组以清除日志的权限,并新建一个event.admin用户加入到Perfmonce Log Users组中:


步骤


操作

  1. 1.       

查看Perfmonce Log Users组的SID并记录

  1. 2.       

使用管理员身份打开CMD,运行wevtutil gl security,查看现有的channel access的权限列表

  1. 3.

输入

wevtutuil sl security /ca:0BAG:SYD: wevtutil sl Security /ca:O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x7;;;S-1-5-32-559)

其中标红的部分0X7表示赋予(1+2+4)也就是赋予该用户组可读、可写、可清除的权限,后面的SID为Perfmonce Log Users组的SID

赋予成功后可以使用wevtutil gl security进行验证

  1. 4.

新建event.admin域用户,并加入到Perfmonce Log Users组中

  1. 5.

在本地建立一个临时文件夹用来临时存放导出的日志文件,在文件服务器建立一个共享文件夹用来存放导出的日志文件。两个文件夹都赋予event.admin可读、可写权限

  1. 6.

编写自动备份脚本,如下所示,将该脚本放到每个控制器的本地文件夹中,在此处我选择放在C盘根目录,本示例脚本为BAT脚本

如下标红的地方,BACKUP_PATH为本地临时存放日志文件夹

sharepath为共享文件夹路径


rem Script start here

rem Timestamp Generator

set BACKUP_PATH=c:\backup

rem Get the datetime in a format that can go in a filename.

set _my_datetime=%date%_%time%

set _my_datetime=%_my_datetime: =_%

set _my_datetime=%_my_datetime::=%

set _my_datetime=%_my_datetime:/=_%

set _my_datetime=%_my_datetime:.=_%

rem Set Share Path

set sharepath=\\172.10.1.10\share

rem Now use the timestamp by Backup Security EventLog.

wevtutil epl System %BACKUP_PATH%\%Computername%_System_%_my_datetime%.evtx

wevtutil epl Security %BACKUP_PATH%\%Computername%_Security_%_my_datetime%.evtx

rem Now Copy the Log Bak To SharePatch

net use %sharepath% [email protected] /user:[email protected]

xcopy %BACKUP_PATH% %sharepath% /E /H /k /Y

rem Clear Security File

wevtutil cl Security

  1. 7.

打开任务计划,建立一个计划任务,在常规页面,按照如下图中进行设置,注意一定要选择“不管用户是否登录都要运行”和“使用最高权限运行”

  1. 8.

触发器页面设置执行计划的时间与频率,此处我设置为,每天15:20执行一次

  1. 9.
  1. 10.

设置完成后点击“确定”,会提示要让你输入event.admin的密码,输入即可。

  1. 11.

根据如上操作为其他控制器做同样的任务计划

  1. 12.

如下图为自动执行计划后,共享文件夹存在的日志

2.2    为什么要用Perfmonce Log Users

看到上面的操作有的人估计会问了,为什么要使用Perfmonce Log Users组?

其实主要原因是任务计划执行脚本的时候需要赋予用户以脚本方式登录的权限。在本地组策略和域组策略都可以设置,默认有4个用户组可以作为批处理作业登陆,位置如下图所示:

我测试过通过组策略将一个新建的用户组加入到该设置中,并且为新建的用户组赋予了清除日志的权限,但是任务计划总是不生效,为了省事我就直接加入到Perfmonce Log Users组中了

时间: 2024-10-01 22:03:59

使用非管理员实现系统事件日志的自动备份与清除的相关文章

查看系统事件日志

Win8查看系统事件日志的方法如下: 1.按快捷键win+Q打开应用界面,选择控制面板,进入控制面板,点击“系统和安全”. 2.点击“查看事件日志”. 3.进入事件查看器的第二种方法:在桌面“计算机”图标上面点击右键,选择“管理”. 4.在计算机管理界面选择“事件查看器”. 5.进入事件查看器界面,在此可查看系统事件日志. 6.点击windows日志. 7.将windows日志展开后可以查询到详细信息.

事件日志

方法一: 方法二:系统事件日志 方法三:使用log4net工具

Nginx(二) Nginx主机配置、日志分割、日志自动备份

Nginx主机配置.日志分割.日志自动备份 一 主机配置以及按主机分割日志文件 1.在目录/usr/local/nginx/conf下 修改nginx.conf文件的server节点,并添加一个新的server节点 2.因为使用了Nginx默认的全局日志格式(main),这个日志格式默认是注释掉的,需要再nginx.conf中放开. 3.创建www.solr.com以及www.hadoop.com两个主机欢迎页面根节点文件夹以及文件. 切换到Nginx的安装目录下,复制Nginx默认的欢迎页面根

使用EventLog类写Windows事件日志

在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中.在C#3.0中可以使用EventLog类将各种信息直接写入Windows日志.EventLog类在System.Diagnostics命名空间中.我们可以在“管理工具” > "事件查看器“中可以查看我们写入的Windows日志,如下图所示: 下面是一个使用EventLog类向应用程序(Application)写入日志的例子,日志类型使用EventLogEntryType枚举类型指定. Code highlighting

Windows事件日志写入SQL Server并PowerBI统计分析

在这里我准备了2台系统,一个Windows Server 2012 R2的域控服务器DC01,一台SQL on CentOS7的SQL数据库服务器 首先我使用SQL Manager Studio连接到SQL数据库服务器创建需要存放Windows转发事件日志的数据库"EventCollections" CREATE DATABASE EventCollections GO USE EventCollections GO -- the table name loosely relates

Linux中的系统默认日志

/var/log/cron 记录了系统定时任务相关的日志 /var/log/cups 记录了打印信息的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,可以通过dmesg命令直接查看 /var/log/btmp 记录错误登录的日志,不能直接查看,是二进制文件,使用lastb命令查看 /var/log/lastlog 记录系统中所有用户最后一次登录时间,不能直接查看,是二进制文件,使用lastlog命令查看 /var/log/mailog 记录邮件信息 /var/log/mes

Linux系统的日志服务器syslogd

系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以监控系统中发生的事件.用户可以通过它来检查错误发生的的原因,或者寻找受到攻击时攻击者留下的痕迹. Windows的事件查看器就是一个日志系统.Linux的日志系统则是通过安装sysklogd这个软件包形成了两个服务: /sbin/klogd 针对硬件(针对内核所产生的,很多和硬件相关) /sbin/syslogd 针对软件(系统的日志服务器) 查看硬件方面的日志: [[email protected] ~]# dmesg |grep -i

Linux系统学习日志Day01

Day01   Linux系统学习日志 (一)  Linux历史 创始人:林纳斯·托瓦兹 时间:1991 年10 月5 日(对外公开时间) 现状:多版本,有redhat.centos.Ubuntu.fedora (二)  Linux认证 管理员:RHCSA 需要掌握的知识: Linux的命令和日常维护,包括安装操作系统.构建网络连接.管理物理存储和执行基础安全管理. 工程师:RHCE 需要掌握的知识: RH124红帽企业Linux基础 RH134红帽企业Linux系统管理 RH254红帽企业Li

【转】 windows进程创建 事件日志

审核进程创建 打开"本地组策略(gpedit.msc)",左侧列表打开"计算机配置--Windows 设置--安全设置--高级审核策略配置--系统审核策略--详细跟踪",右侧双击"审核进程创建",把配置"成功"和"失败"勾上.至此,审核进程创建已经配置完毕. 查看日志 打开"计算机管理("计算机"右键"管理",或compmgmt.msc)",左侧&