安全运维中基线检查的自动化
安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,类比木桶原理的那块最短的木板,安全基线其实是系统最低安全要求的配置,常见的安全基线配置标准有ISO270001、等级保护2.0等,也有某些企业自己的标准。
安全基线检查涉及操作系统、中间件、数据库、甚至是交换机等网络基础设备的检查,面对如此繁多的检查项,自动化的脚本可以帮助我们快速地完成基线检查的任务。一般来说基线检查基本上需要root权限,并且网上大部分的基线加固脚本都是脚本直接对系统进行操作,但是即使基线检查之前做了充分的备份和保存快照等,一旦有不可逆的操作导致生产系统的中断造成的影响是巨大的。
因此斗哥设计通过shell脚本以基线配置标准为检查项去获取当前系统基线配置的整体情况,然后再对比基线标准数据库,根据得出对比结果分析评估是否修正基线,再着手进行基线修正,完成基线修正配置后,再进行基线核查,直至系统达到预期基线配置标准。
搬好小板凳,下面斗哥将简单总结在shell脚本编写过程中的小知识~
准备工作: centos7 、先知上某大佬分享的基线检查项 由于不涉及具体的系统命令操作,基线核查脚本可以说非常的简单只需要将需要的数据取出即可。
1.判断文件是否存在
linux操作系统中不管是系统服务还是应用软件最终都是以文件的形式进行存储,不同的系统会安装不同的目录,因此需要判断文件是否存在。shell脚本有一个test命令可以用来对文件进判断,在if判断里面可以去掉test关键字:[ -e + 文件名 ] 文件存在则输出为真(true),文件不存在则输出为假。ps:不用纠结是0还是1因为容易搞乱。
2.布尔运算符和字符串运算符
shell脚本的与或非不仅可以用常见的&&、|| 、! 表示,还可以用-o 、-a来表示 。 那他们有什么区别吗?其实他们是可以互为替换的比如下图,两者之间的效果是一样的,挑个喜欢的熟练使用的即可~
3.获取特定的字符串
善用grep和awk,grep筛选到具体的行,awk取该行的具体列数,awk默认空格划分列数到的分隔符,另外还可通过-F指定具体分隔符,NR!是awk对行实行进阶版的操作比grep更灵活。NR!=1意思的除去第一行root不显示,1代表具体的行数。最后通过${变量名:a:b}截取要匹配的字符串。
4.判断字符串是否为空
test命令还可以用来判断字符串,-n可用来判断字符串是否为空,不为空则为真,为空则为假,当然也可以通过-z参数来判断,逻辑是相反的,-z判断字符串时,为空则输出为真,不为空则输出为假,斗哥建议只需要记住一个习惯用的即可,不然容易弄乱。
5.查看命令是否执行成功
$? 可用来判断命令执行是否成功,0表示命令执行成功,1表示命令执行出错,比如执行cat /etc/lilo.conf 如果这个文件存在echo $?则输出为0,不存在则输出为1,注意这里$? 返回的0和1不代表真假,如果直接if[ $? ]作为判断的条件则结果恒为真,因此需修改判断条件为[ $? -eq 0 ] 来对最后一次执行的命令结果进行判断。
6. systemcyl和service
redhat类的系统常见的有用service和systemctl用来启动、停止、重启各种服务,目前centos7之后的版本已经大部分都切换到systemctl命令体系,查看服务的返回状态可结合$?的返回值,当返回值为3表示服务未开启。
7.配置文件
在写中间件、数据库等应用软件的基线配置脚本的时候,由于安装方式的不同导致对应的默认配置文件存在不同的系统目录,因此在这里我们首先需要判断系统是通过何种方式安装应用软件,进而才能在基线检查的时候找到对应的配置文件。
Centos(redhat类)常见的软件安装方式有三种(这里以apache为例):
yum安装
apache配置目录:
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
网站数据目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log
rpm安装
rpm与yum安装的配置文件目录是一致的,但是RPM包安装的服务可以使用系统服务命令(service/systemctl)来管理。
例如rpm安装的apache的启动方法就是:
service httpd start或者systemctl start httpd.service
源码安装
如果采用源代码安装,常见的一般都安装在/usr/local/apache2目录下,主要还是依赖于安装的时候设定的安装目录。
8. ”find: ‘/run/user/1000/gvfs’:权限不够“的问题
在已经是root权限的时候,使用find命令查找文件的时候出现如上报错可使用如下命令对该文件进行删除。
[root@root]# umount /run/user/1000/gvfs
[root@root]# rm -rf /run/user/1000/gvfs
9.结果输出
linux的操作命令可以说是非常的全,输出文件可以用时间+IP的命名规则来做唯一标识,考虑到有些最小化系统安装没有ifconfig等查看ip的命令,因此直接通过ip配置文件来获取IP;时间可通过data命令来获取。最后将结果重定向到tmp目录下,考虑为了后面数据处理方便输出的结果写成json的格式。
受限于格局和视角的不同,大概总结就想到这么多,当然进无止境斗哥后期也会继续加以完善,欢迎有兴趣的小伙伴一起参与进来并且批评指正。另外斗哥还搜到一款开源的linux的基线脚本检查的工具lynis:https://github.com/CISOfy/lynis/ 感觉非常的强大,有兴趣的小伙伴可以去深入研究哟。
ps :在公众号对话框中,回复基线自动化运维可获取Centos7_v1.0.sh基线检查处女版。
- 使用NUnit在.Net编程中进行单元测试
- 在CentOS上使用Jexus托管运行 ZKEACMS
- PowerDesigner生成Access数据库
- TechEmpower 13轮测试中的ASP.NET Core性能测试
- 反馈型神经网络
- (Head First 设计模式)学习笔记(1)
- [c#]Webservice中如何实现方法重载(overload)以及如何传送不能序列化的对象作参数
- Web.Config文件配置小记
- [原创]web application中使用Profile应该注意的问题
- MRTG FOR WINDOWS 安装指南
- 几种常见复合sql查询语句的linq写法[继续补充中]
- [原创]在msmq3.0中使用http协议发送消息
- 微信小程序开发探索之路
- 前端周记 2017 年终总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LinkedList - 203. Remove Linked List Elements
- LinkedList - 83. Remove Duplicates from Sorted List
- LinkedList - 19. Remove Nth Node From End of List
- LinkedList - 92. Reverse Linked List II
- LinkedList - 328. Odd Even Linked List
- LinkedList - 25. Reverse Nodes in k-Group
- LinkedList - 24. Swap Nodes in Pairs
- LinkedList - 141. Linked List Cycle
- LinkedList - 206. Reverse Linked List
- Array - 188. Best Time to Buy and Sell Stock IV
- Tree - 112. Path Sum
- 首个无tricks的情况下将ResNet-50提高到80%+!CMU开源MEAL V2
- Tree - 257. Binary Tree Paths
- Tree - 226. Invert Binary Tree
- Tree - 101. Symmetric Tree