用户
搜索
  • TA的每日心情
    开心
    2018-9-11 11:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]经常看看I

    i春秋-核心白帽

    Rank: 4

    80

    主题

    105

    帖子

    1153

    魔法币
    收听
    0
    粉丝
    19
    注册时间
    2016-6-6
    发表于 2018-10-17 14:40:09 111274

    安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,类比木桶原理的那块最短的木板,安全基线其实是系统最低安全要求的配置,常见的安全基线配置标准有ISO270001、等级保护2.0等,也有某些企业自己的标准。

    安全基线检查涉及操作系统、中间件、数据库、甚至是交换机等网络基础设备的检查,面对如此繁多的检查项,自动化的脚本可以帮助我们快速地完成基线检查的任务。一般来说基线检查基本上需要root权限,并且网上大部分的基线加固脚本都是脚本直接对系统进行操作,但是即使基线检查之前做了充分的备份和保存快照等,一旦有不可逆的操作导致生产系统的中断造成的影响是巨大的。

    因此斗哥设计通过shell脚本以基线配置标准为检查项去获取当前系统基线配置的整体情况,然后再对比基线标准数据库,根据得出对比结果分析评估是否修正基线,再着手进行基线修正,完成基线修正配置后,再进行基线核查,直至系统达到预期基线配置标准。

    01.jpg

    搬好小板凳,下面斗哥将简单总结在shell脚本编写过程中的小知识~

    准备工作: centos7 、先知上某大佬分享的基线检查项
    由于不涉及具体的系统命令操作,基线核查脚本可以说非常的简单只需要将需要的数据取出即可。

    1.判断文件是否存在

    linux操作系统中不管是系统服务还是应用软件最终都是以文件的形式进行存储,不同的系统会安装不同的目录,因此需要判断文件是否存在。shell脚本有一个test命令可以用来对文件进判断,在if判断里面可以去掉test关键字:[ -e + 文件名 ] 文件存在则输出为真(true),文件不存在则输出为假。ps:不用纠结是0还是1因为容易搞乱。

    搞乱.webp.jpg

    2.布尔运算符和字符串运算符

    shell脚本的与或非不仅可以用常见的&&、|| 、! 表示,还可以用-o 、-a来表示 。
    那他们有什么区别吗?其实他们是可以互为替换的比如下图,两者之间的效果是一样的,挑个喜欢的熟练使用的即可~

    可 1.webp.jpg

    可 2.webp.jpg

    3.获取特定的字符串

    善用grep和awk,grep筛选到具体的行,awk取该行的具体列数,awk默认空格划分列数到的分隔符,另外还可通过-F指定具体分隔符,NR!是awk对行实行进阶版的操作比grep更灵活。NR!=1意思的除去第一行root不显示,1代表具体的行数。最后通过${变量名:a:b}截取要匹配的字符串。

    31.webp.jpg

    32.webp.jpg

    4.判断字符串是否为空

    test命令还可以用来判断字符串,-n可用来判断字符串是否为空,不为空则为真,为空则为假,当然也可以通过-z参数来判断,逻辑是相反的,-z判断字符串时,为空则输出为真,不为空则输出为假,斗哥建议只需要记住一个习惯用的即可,不然容易弄乱。

    弄乱.webp.jpg

    5.查看命令是否执行成功

    $? 可用来判断命令执行是否成功,0表示命令执行成功,1表示命令执行出错,比如执行cat /etc/lilo.conf 如果这个文件存在echo $?则输出为0,不存在则输出为1,注意这里$? 返回的0和1不代表真假,如果直接if[ $? ]作为判断的条件则结果恒为真,因此需修改判断条件为[ $? -eq 0 ] 来对最后一次执行的命令结果进行判断。

    判断.webp.jpg

    6. systemcyl和service

    redhat类的系统常见的有用service和systemctl用来启动、停止、重启各种服务,目前centos7之后的版本已经大部分都切换到systemctl命令体系,查看服务的返回状态可结合$?的返回值,当返回值为3表示服务未开启。
    开启 1.webp.jpg

    开启 2.webp.jpg

    7.配置文件

    在写中间件、数据库等应用软件的基线配置脚本的时候,由于安装方式的不同导致对应的默认配置文件存在不同的系统目录,因此在这里我们首先需要判断系统是通过何种方式安装应用软件,进而才能在基线检查的时候找到对应的配置文件。

    Centos(redhat类)常见的软件安装方式有三种(这里以apache为例):

    [PHP] 纯文本查看 复制代码
    yum安装 
    
    apache配置目录: 
    
    服务目录 /etc/httpd 
    
    主配置文件 /etc/httpd/conf/httpd.conf 
    
    网站数据目录 /var/www/html 
    
    访问日志 /var/log/httpd/access_log 
    
    错误日志 /var/log/httpd/error_log


    [PHP] 纯文本查看 复制代码
    rpm安装 
    
    rpm与yum安装的配置文件目录是一致的,但是RPM包安装的服务可以使用系统服务命令(service/systemctl)来管理。 
    
    例如rpm安装的apache的启动方法就是: 
    
    service httpd start或者systemctl start httpd.service


    [PHP] 纯文本查看 复制代码
    源码安装 
    
    如果采用源代码安装,常见的一般都安装在/usr/local/apache2目录下,主要还是依赖于安装的时候设定的安装目录。


    8. ”find: ‘/run/user/1000/gvfs’:权限不够“的问题

    在已经是root权限的时候,使用find命令查找文件的时候出现如上报错可使用如下命令对该文件进行删除。

    [PHP] 纯文本查看 复制代码
    [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的格式。

    91.webp.jpg

    92.webp.jpg

    受限于格局和视角的不同,大概总结就想到这么多,当然进无止境斗哥后期也会继续加以完善,欢迎有兴趣的小伙伴一起参与进来并且批评指正。另外斗哥还搜到一款开源的linux的基线脚本检查的工具lynis:https://github.com/CISOfy/lynis/ 感觉非常的强大,有兴趣的小伙伴可以去深入研究哟。

    qrcode_for_gh_223e082fe8a7_344.jpg

    上的v阿三v啊
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册