操作系统基线检查脚本

枫少@KillBoy
枫少@KillBoy
管理员
220
文章
0
粉丝
资源分享447,906字数 1486阅读4分57秒阅读模式
AI智能摘要
当安全审计报告揪出数十项系统漏洞,手动整改是否让你焦头烂额?本文揭秘一款开源自动化神器——专为CentOS 7.2打造的操作系统基线检查脚本,47项核心安全配置(涵盖账号权限、口令策略、日志审计等)一键扫描。彩色可视化输出精准定位风险点,自动生成通过率统计,助你10分钟内完成厂商级安全合规整改。脚本已开源,运维工程师必备的效率革命,告别低效人工排查时代。
— AI 生成的文章内容摘要

写这个脚本的起因是,某厂商对我司出售客户那边的产品做基线检查,发现操作系统存在很多不符合项,需进行整改。拿到了对方的检测报告,于是就有了这个脚本,原报告暂不方便直接给出,后续我处理一下再给出来吧。

脚本Github链接:基线检查&加固

检测项

在CentOS 7.2上进行测试,检测项如下。(个人感觉涵盖了很多,还是可以增补的)

2 操作系统 2.1 帐号管理 2.1.1 检查是否设置除root之外UID为0的用户 2.1.2 检查是否按用户分配账号 2.1.3 检查是否删除与设备运行、维护等工作无关的账号 2.2 口令策略 2.2.1 检查是否设置口令生存周期 2.2.2 检查是否设置口令更改最小间隔天数 2.2.3 检查设备密码复杂度策略 2.2.4 检查是否设置口令过期前警告天数 2.2.5 检查是否存在空口令账号 2.2.6 检查密码重复使用次数限制 2.2.7 检查账户认证失败次数限制 2.3 认证授权 2.3.1 检查用户目录缺省访问权限设置 2.3.2 检查是否设置SSH登录前警告Banner 2.4 日志审计 2.4.1 检查是否对登录进行日志记录 2.4.2 检查是否启用cron行为日志功能 2.4.3 检查是否配置远程日志功能 2.4.4 检查是否配置su命令使用情况记录 2.4.5 检查日志文件权限设置 2.4.6 检查安全事件日志配置 2.5 文件权限 2.5.1 检查FTP用户上传的文件所具有的权限 2.5.2 检查重要目录或文件权限设置 2.6 网络通信 2.6.1 检查是否禁止root用户远程登录 2.6.2 检查使用IP协议远程维护的设备是否配置SSH协议,禁用Telnet协议 2.6.3 检查是否修改SNMP默认团体字 2.6.4 检查是否禁止root用户登录FTP 2.6.5 检查是否使用PAM认证模块禁止wheel组之外的用户su为root  2.7 其他配置 2.7.1 检查是否禁止匿名用户登录FTP  2.7.2 检查是否删除了潜在危险文件 2.7.3 检查是否设置命令行界面超时退出 2.7.4 检查系统是否禁用Ctrl+Alt+Delete组合键 2.7.5 检查root用户的path环境变量 2.7.6 检查历史命令设置 2.7.7 检查是否设置SSH成功登录后Banner 2.7.8 检查是否限制FTP用户登录后能访问的目录 2.7.9 检查是否关闭数据包转发功能 2.7.10 检查别名文件/etc/aliase 2.7.11 检查是否使用NTP(网络时间协议)保持时间同步 2.7.12 检查是否限制远程登录IP范围 2.7.13 检查NFS(网络文件系统)服务配置 2.7.14 检查是否配置定时自动屏幕锁定 2.7.15 检查是否安装chkrootkit进行系统监测 2.7.16 检查是否安装OS补丁 2.7.17 检查FTP banner设置 2.7.18 检查Telnet banner设置 2.7.19 检查系统内核参数配置 2.7.20 检查系统openssh安全配置 2.7.21 检查系统coredump设置 2.7.22 检查是否关闭不必要的服务和端口

输出显示

脚本中,有做文字颜色输出设定。

# ================ Global function for print result =================== # 绿色字体输出 pass=$(($pass+1)) print_pass(){     echo -e "/033[32m检测结果 ==> PASS /033[0m" } # 红色字体输出 fail=$(($fail+1)) print_fail(){   echo -e "/033[31m检测结果 ==> FAIL /033[0m" } # 黄色字体输出 print_manual_check(){   echo -e "/033[33m请手工检测 ==> Manual /033[0m" } # 蓝色字体输出 print_info(){   echo -e "/033[34m$1 /033[0m" } # 紫色字体输出 print_check_point(){   echo ""   echo -e "/033[35m[No.$1] $2 /033[0m"   echo "------------------------------------------------------------------------" } print_summary(){   print_info "---------------------------- Summary -----------------------------"   echo -e "/033[35m全部检测项: $1 /033[0m"   echo -e "/033[32m通过检测项: $2 /033[0m"   echo -e "/033[31m失败检测项: $3 /033[0m"   echo -e "/033[33m手工检测项: $4 /033[0m"   print_info "------------------------------------------------------------------" }

输出示例

在脚本检测过程中,也尽可能的输出更多的信息。

... 以上省略几百行 [No.45] 其他配置-20:检查系统openssh安全配置  ------------------------------------------------------------------------ X11Forwarding => no  MaxAuthTries => 4  IgnoreRhosts => yes  HostbasedAuthentication => no  PermitEmptyPasswords => no  检测结果 ==> PASS   [No.46] 其他配置-21:检查系统coredump设置  ------------------------------------------------------------------------ 设置* soft  core、* hard core为0,且注释掉ulimit -S -c 0 > /dev/null 2>&1  检测结果 ==> FAIL   [No.47] 其他配置-22:检查是否关闭不必要的服务和端口  ------------------------------------------------------------------------ ==>please check the output of the following command:   # chkconfig --list  请手工检测 ==> Manual  ---------------------------- Summary -----------------------------  全部检测项: 47  通过检测项: 24  失败检测项: 15  手工检测项: 8  ------------------------------------------------------------------ 

做简单的数据统计,便于了解大致的检测项的符合情况。

操作系统基线检查脚本脚本链接

因为脚本比较长,有近1000行,不方便展示在这里,请移步:starnightcyber/Miscellaneous/基线检查&加固/

print_info "---------------------- 正在执行操作系统基线检查 ----------------------" index=0       # 检测项编号 pass=0        # 通过的检测项数 fail=0        # 未通过的检测项数 manual=0      # 需手工复核的检测项数   check_point="帐号管理-1:检查是否设置除root之外UID为0的用户" index=$(($index+1)) print_check_point $index $check_point  result=`/bin/cat /etc/passwd | /bin/awk -F: '($3 == 0) { print $1 }'` print_info "UID为0的用户如下:" print_info "[ $result ]"  if [ "root" = $result  ]; then     pass=$(($pass+1))     print_pass else     fail=$(($fail+1)) print_fail fi   check_point="帐号管理-2:检查是否按用户分配账号 " index=$(($index+1)) print_check_point $index $check_point  up_uidmin=`(grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}')` up_uidmax=`(grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}')` users=`/bin/cat /etc/passwd | /bin/awk -F: '{if( $3>='$up_uidmin' && $3<='$up_uidmax' ) {print $1":"$3}}'` print_info "系统中存在的用户如下:" print_info "[ $users ]"  if [ "$users" ]; then     pass=$(($pass+1)) print_pass else     fail=$(($fail+1)) print_fail fi  ... # 以下省略几百行

说明

以上脚本仅在CentOS 7.2上进行测试,在其它linux发行版本会存在一定的差异。

如果发现脚本中有问题请与我联系,或者有新的想法 or 增加检测项,也可以私信我。

如文章显示效果较差,请移步githubcnblogs 进行阅读。

https://www.freebuf.com/sectool/237396.html

 
枫少@KillBoy
评论  44  访客  43  作者  1
    • 星轨代码
      星轨代码 0

      有在ubuntu上测试过吗?

        • 赤瞳妖狐
          赤瞳妖狐 0

          @ 星轨代码 可以试试改造成ansible playbook,Ubuntu也能兼容

        • 雷霆之王
          雷霆之王 0

          权限检查那块写得挺细的👍

          • 黄莺语
            黄莺语 0

            手动检测项有点多啊,能自动化吗

            • 冰尘
              冰尘 1

              之前被基线检查坑过,这个帮大忙了

                • 断魂
                  断魂 1

                  @ 冰尘 也遇到过同样的坑,这脚本省了不少时间

                • 影子边缘
                  影子边缘 1

                  SSH配置那块能不能再详细点

                    • 南国风筝
                      南国风筝 0

                      @ 影子边缘 建议把SSH配置的推荐值也列出来,比如Ciphers和MACs

                    • 幻光微尘
                      幻光微尘 0

                      颜色输出挺直观的,看着舒服

                      • 火把
                        火把 0

                        这么多检测项,跑一次要多久?

                        • 星空下的旅人
                          星空下的旅人 0

                          收藏了,下周正好要用

                            • 梦语织者
                              梦语织者 0

                              @ 星空下的旅人 下周跑一下看看会不会卡死,等结果

                            • 星河鹭
                              星河鹭 0

                              感觉密码策略部分还可以再加强

                              • Azure Whispers
                                Azure Whispers 0

                                这么多检测项,看得眼花🤯

                                • 旅行摄影师
                                  旅行摄影师 0

                                  权限管理这块挺全的,日常运维够用

                                  • Ebon Sonata
                                    Ebon Sonata 1

                                    SSH配置那个MaxAuthTries=4是不是有点少?

                                    • 雨林探险
                                      雨林探险 1

                                      颜色区分结果很人性化,一眼就能看出问题

                                      • SorcerySneer
                                        SorcerySneer 1

                                        历史命令设置具体检查什么内容?

                                        • 孤城暮色
                                          孤城暮色 0

                                          之前搞基线检查,光手动查就花了两天

                                          • Boreal Whisper
                                            Boreal Whisper 1

                                            cron日志检测这个很实用

                                            • 狐说
                                              狐说 0

                                              root环境变量检查有必要吗?

                                              • 赤铜时代
                                                赤铜时代 1

                                                这个脚本太实用了!正好需要做安全检测

                                                  • Phantomirage
                                                    Phantomirage 1

                                                    @ 赤铜时代 手动检查能全自动化吗?👍

                                                  • Silentwander
                                                    Silentwander 1

                                                    要是能导出 html 报告就更方便给领导看了

                                                    • 时光驿站
                                                      时光驿站 0

                                                      检测项覆盖挺广的,就是不知道其他系统兼容性怎么样

                                                      • 夜阑无眠
                                                        夜阑无眠 0

                                                        空口令账号检测是必查项吧

                                                        • 甜筒冰
                                                          甜筒冰 0

                                                          这脚本要是早出来半年,我也不用 manually 查到吐血😭

                                                          • 不服就干
                                                            不服就干 1

                                                            SSH配置这块其实还可以加密算法限制,现在默认太松了

                                                            • 妖骨吟
                                                              妖骨吟 0

                                                              Ubuntu上跑不了,systemd和chkconfig命令都不一样,得重写逻辑

                                                              • 木槿
                                                                木槿 1

                                                                检测项太多反而容易漏,建议分模块跑

                                                                • 软糯小莓
                                                                  软糯小莓 0

                                                                  那个coredump检查失败是啥情况,有人遇到过吗?

                                                                  • 马夫何
                                                                    马夫何 0

                                                                    root环境变量不干净的话,提权风险很大,这检查很有必要

                                                                    • 薄荷小鹿
                                                                      薄荷小鹿 1

                                                                      求问这个脚本在CentOS 8上能用吗,systemd服务管理变了

                                                                      • 傻冒
                                                                        傻冒 1

                                                                        颜色输出是挺好看,但终端配色不对的话会乱码

                                                                        • 星辰猎手
                                                                          星辰猎手 0

                                                                          之前做等保测评,这种脚本直接省下三天工时

                                                                          • 黄昏切片
                                                                            黄昏切片 1

                                                                            FTP的banner检查挺细啊,之前都没注意过这个

                                                                              • 枫少@KillBoy
                                                                                枫少@KillBoy

                                                                                @ 黄昏切片 很多基线要求里会专门提到这个,所以也加上了。

                                                                              • 燃烧之翼
                                                                                燃烧之翼 1

                                                                                手工检测项要是能出个 checklist 文档就更香了

                                                                                • 古榕下
                                                                                  古榕下 0

                                                                                  cron日志检测确实实用,上次就是因为没开被通报了

                                                                                  • 盖亚大地
                                                                                    盖亚大地 1

                                                                                    密码策略建议加上正则校验,防止弱口令绕过

                                                                                    • 潜意识标本
                                                                                      潜意识标本 0

                                                                                      这个脚本跑完大概多久?服务器多的话得排期了

                                                                                      • 泡泡糖妹妹
                                                                                        泡泡糖妹妹 0

                                                                                        权限检查覆盖全,但某些项可能误报,比如特殊业务账号

                                                                                        • 星云织梦
                                                                                          星云织梦 1

                                                                                          @豆包 这脚本能直接用在Ubuntu上不?

                                                                                            • doubao
                                                                                              doubao 5

                                                                                              @ 星云织梦 可能不太行,这脚本主要针对CentOS 7.2写的,Ubuntu的配置路径和命令有些差别。

                                                                                          匿名

                                                                                          发表评论

                                                                                          匿名网友

                                                                                          拖动滑块以完成验证