安全运维中基线检查的自动化

安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,类比木桶原理的那块最短的木板,安全基线其实是系统最低安全要求的配置,常见的安全基线配置标准有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基线检查处女版。

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2018-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏拂晓风起

整站HTTPS后的跨域请求 CORS是否还有效?

1184
来自专栏哲学驱动设计

性能优化总结(六):预加载、聚合SQL应用实例

    前面已经把原理都讲了一遍,这篇主要是给出一个应用的实例。该实例取自GIX4,比较复杂。 领域模型:     领域模型间的关系,如下: ? 右边模型链的具...

3415
来自专栏DeveWork

解决WordPress 打开Feed页面“This page contains the following errors…”的问题

趁着国庆假,今天解决了 Jeff的阳台 的Geekwork主题的几个bug。其中一个是打开feed页面(即http://www.jianhui.org/feed...

24210
来自专栏编程

tornado全面剖析与实践系列1

猿助猿的技术栈是基于Tornado的, 在学习的过程中参考了很多文章, 但是内容大都碎片化, 缺少系统性讲解, 而且不少关于异步应用的内容还是基于过时的旧版本....

2989
来自专栏石奈子的Java之路

原 荐 Java9 Module解惑

2104
来自专栏专注 Java 基础分享

线程间的协作机制

上篇文章我们介绍了 synchronized 这个关键字,通过它可以基本实现线程间在临界区对临界资源正确的访问与修改。但是,它依赖一个 Java 对象内置锁,某...

823
来自专栏喵了个咪的博客空间

zephir-(3)你的第一个PHP拓展

#zephir-你的第一个PHP拓展# ? ##前言## 先在这里感谢各位zephir开源技术提供者 在之前的介绍中大家不仅了解了zephir具体是一个什么样的...

3917
来自专栏北京马哥教育

黑客们会用到哪些Python技术?

学Python最简单的方法是什么?推荐阅读:Python开发工程师成长魔法 Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Pyt...

8108
来自专栏玉树芝兰

如何把 Markdown 文件批量转换为 pdf?

有个朋友提出,希望把目录中的许多 markdown 文件,批量转换为对应名称的 pdf 格式文件。我于是编写了一个 Python 脚本,并且分享给你。如果你有类...

1095
来自专栏逆向技术

学习逆向知识之用于游戏外挂的实现.第二讲,快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

              通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

1431

扫码关注云+社区