Linux 编写安全巡检脚本

检测/etc/passwd,/etc/shadow文件是否锁定

检测/etc/login.defs配置文件中密码有效期设置是否得当 

检查所有用户账户(非系统账户)中是否存在密码永久有效问题(检查/etc/shadow文件每一行中的密码期限值)

检查系统默认历史命令记录条数(/etc/profile)和管理员帐号的历史命令条数(~/.bash_logout)是否存在安全隐患

检查终端自动注销功能是否启用,自动注销配置文件分为系统配置文件(/etc/profile)和各个用户自己的配置文件(~/.bash_profile)

检查系统默认管理员账号是否为root(用户ID、组ID为0)

检查是否禁用重启热键Ctrl+Alt+Del功能

检查su用户切换认证功能是否启用

检查grub.conf文件中是否开启加密功能“password --md5

检查系统是否有足够的磁盘空间

检查开放的终端个数

系统弱口令检测,调用john

端口扫描功能,调用nmap

###检测/etc/passwd,/etc/shadow文件是否锁定
lock=$(lsattr /etc/passwd /etc/shadow |grep i |wc -l)
if [ $lock -ne ]
then
echo "该系统中的账户和密码配置文件没有锁定,存在安全隐患!"
fi
###检测/etc/login.defs配置文件中密码有效期设置是否得当
day=$(grep "^PASS_MAX_DAYS" /etc/login.defs |awk '{print $2}')
if [ $day -gt ]
then
echo "/etc/login.defs该配置文件中账户有效期设置大于30天,存在安全隐患!"
fi
###检查所有用户账户(非系统账户)中是否存在密码永久有效问题(检查/etc/shadow文件每一行中的密码期限值)
#.首先在/etc/passwd文件中找到所有非系统帐号(uid>500和root账户),导入到一个文件
awk -F: '{if($3>=500|| $3==0) print $1}' /etc/passwd >account.txt
#.循环遍历account.txt文件,过滤/etc/shadow中存在和account.txt文件一样的账户
for i in $(cat account.txt)
do
grep "^$i" /etc/shadow |awk -F: '{if($5>30) print ""$1"" ":账户存在密码有效期大于30天安全隐患!"}'
done
###检查系统默认历史命令记录条数(/etc/profile)和管理员帐号的历史命令条数(~/.bash_logout)是否存在安全隐患
history_num=$(grep "^HISTSIZE" /etc/profile |awk -F= '{print $2}')
num=$(grep "history -c" /root/.bash_logout |wc -l)
if [ $history_num -gt ]||[ $num -eq ]
then
echo "该系统默认历史记录存在安全隐患!"
fi
###检查终端自动注销功能是否启用,自动注销配置文件分为系统配置文件(/etc/profile)和各个用户自己的配置文件(~/.bash_profile)
#.首先检测系统配置文件/etc/profile是否有启用终端自动注销
#.如何系统配置文件没有启用终端自动注销,然后在循环检查各个账户的配置文件是否启用终端自动注销功能
timeout=$(grep "^export TMOUT" /etc/profile)
#-n是判断一个变量是否是否有值
if [ ! -n "$timeout" ]
then
#得到位于/home目录下用户账户的个数,-w 统计单词的个数
cd /home
n=$(ls |wc -w)
#把/home下的所有账户名导入到一个文件
ls >/root/user.txt
for((i=;i<=$n;i++))
do
for j in $(cat /root/user.txt)
do
TMout=$(grep "^export TMOUT" /home/$j/.bash_profile)
if [ ! -n "$TMout" ]
then
echo "账户$j没有启用终端自动注销,存在安全隐患!"
fi
done
break
done
fi
###检查系统默认管理员账号是否为root(用户ID、组ID为0)
awk -F: '{if($3 == 0 && $4 == 0 && $2="root") print "root是默认管理员!" }' /etc/passwd
###检查/etc/passwd文件中是否存在多余的超级用户账号(用户ID、组ID为0)
awk -F: '{if($3 == 0 && $1 != "root") print ""$1"账户具有管理员权限" }' /etc/passwd
###检查/etc/passwd文件中是否有可疑账号(是否存在多余的账号)
#.事先备份一份/etc/passwd文件,然后添加帐号测试,把添加帐号之后/etc/passwd配置文件与之前备份的文件进行逐行逐个对比(每行中每个节点),存在异常,提示哪个帐号有问题
###检查是否禁用重启热键Ctrl+Alt+Del功能
start_shutdown=$(grep "^#start on control-alt-delete" /etc/init/control-alt-delete.conf)
exec_shutdown=$(grep "^#exec /sbin/shutdown" /etc/init/control-alt-delete.conf)
if [ ! -n "$start_shutdown" ]&&[ ! -n "$exec_shutdown" ]
then
echo "该系统没有禁用重启热键,存在安全隐患!"
fi
###检查su用户切换认证功能是否启用
pam_wheel=$(grep "pam_wheel.so use_uid" /etc/pam.d/su)
if [ ! -n "$pam_wheel" ]
then
echo "该系统没有启用su切换用户认证,存在安全隐患!"
else
#NF 当前记录中的字段个数,就是有多少列
num_in_wheel=$(cat /etc/group |grep wheel |awk -F: '{print $4}'|awk -F "," '{print NF}')
if [ $num_in_wheel -gt ]
then
echo "太多用户能切换到root,存在安全隐患!"
fi
fi
###检查grub.conf文件中是否开启加密功能“password --md5
passwd_grub=$(grep "password" /boot/grub/grub.conf)
if [ ! -n "$passwd_grub" ]
then
echo "grub菜单没有开启加密功能,存在安全隐患!"
fi
###检查系统是否有足够的磁盘空间
#该变量用于获取磁盘的已使用空间的百分比值
Usedspace=$(df -hT | grep "/$" | awk '{print $6}' | awk -F% '{print $1}') if [ $Usedspace -gt ]
then
echo "你的磁盘空间已不足,请清理磁盘!"
else
echo "你的磁盘空间很充足!已用空间为$Usedspace%"
fi
###检查开放的终端个数
tty_num=$(grep "^env ACTIVE_CONSOLES" /etc/init/start-ttys.conf|awk -F "-" '{print $2}'|awk -F "]" '{print $1}')
echo "开放$tty_num个终端"
###系统弱口令检测,调用john
#通过find查找john是否存在,存在说明john已经安装
exist_john=$(find / -name john)
if [ ! -n "$exist_john" ]
then
#不存在,编译安装john
tar zxvf /tmp/john-1.8..tar.gz -C /usr/src
cd /usr/src/john-1.8./src
echo "该系统没有安装john,正在安装,请稍等......"
make clean linux-x86- &>/dev/null
echo "该系统已经安装完john"
cd /usr/src/john-1.8./run/
cp /etc/shadow /root
#用自己的字典 --worldlist
./john --wordlist=/root/dict.txt /root/shadow
else
cd /usr/src/john-1.8./run/
cp /etc/shadow /root
#用自己的字典
./john --wordlist=/root/dict.txt /root/shadow
fi
###端口扫描功能,调用nmap
exist_nmap=$(find / -name nmap)
if [ ! -n "$exist_nmap" ]
then
#不存在nmap则安装,通过搭建本地yum仓库安装
mount /dev/sr0 /mnt &>/dev/null
#搭建本地仓库
cd /etc/yum.repos.d
cat >>yuzly.repo<<OK
[yuzly]
name=yuzly
baseurl=file:///mnt
enabled=
gpgcheck=
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
OK
#安装nmap
echo "该系统没有安装nmap,正在安装nmap,请稍等....."
yum -y install nmap &>/dev/null
nmap -p ,,,,,,,, 192.168.133.130
else
nmap -p ,,,,,,,, 192.168.133.130
fi

 

#检测/etc/passwd文件中是否和root用户的uid相同,或者是否同时存在两个uid一样的用户
echo "帐号存在安全隐患,该账户为root账户:"
awk -F: '{if($3 == 0 && $1 != "root") print $1 }' /etc/passwd #检测/etc/passwd文件中,是否存在密码占位符(x)被修改
echo "帐号存在安全隐患,该帐号存在密码占位符(x)被修改!:"
awk -F: '{if($2!="x" && $3>=500) print $1}' /etc/passwd #检测账户是否存在未设密码
#检测哪些账户空口令(账户被锁定)
echo "账户没有密码!:"
awk -F: '{if($2=="!!") print $1}' /etc/shadow #检测那些账户是空密码账户
echo "空密码账户:"
awk -F: '{if($2=="") print $1}' /etc/shadow
#检测失效时间
echo "以下账户密码没有失效时间:"
awk -F: '{if($7=="") print $1}' /etc/shadow
#检测密码是否永久有效
echo "下面密码是否永久有效,存在安全风险:"
awk -F: '{if($5==99999) print $1}' /etc/shadow #检测系统内置账户中以/bin/bash结尾的账户是否被锁定
grep "/bin/bash$" /etc/passwd | awk -F: '{print $1}' >>account1.txt
Name=$(cat account1.txt)
cat /etc/shadow |grep "^$Name" |awk '{print $1}'>>account2.txt
cat account2.txt | awk -F: '($2~/^!!/){print ""$1"" ":是以/bin/bash结尾已被锁定的账户"}'

Linux 编写安全巡检脚本的更多相关文章

  1. linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本

    红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...

  2. Linux/hp unix/AIX日常巡检脚本(转)

    以下为Linux/hp unix/AIX日常巡检脚本,大家可以参考着进行改写,用于自己的服务器. #!/usr/bin/ksh syserrdate=`date +"%m/%d"` ...

  3. linux日常巡检脚本

    ######################以下是脚本内容开始部分###################################### #!/bin/bash #set -x2012-02-2 ...

  4. Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  5. Linux如何编写自启动shell脚本

    1.需求分析 在很多情况下,程序员都做着重复枯燥的工作,虽然这些工作也是必须的,其实这些重复性的工作可以执行脚本替代:今天笔者就如何编写自启动shell脚本减少程序员开启服务器后的环境开启工作: 2. ...

  6. linux编写.sh脚本并赋权限

    今日打包编译项目时,发现缺少一个git pull更新项目的脚本,所以在linux编写了一个gitpull.sh脚本,能够实现更新项目的需求. 1.首先vi  gitpull.sh或者使用vim编辑器. ...

  7. linux编写脚本检测本机链接指定IP段是否畅通

    linux编写脚本检测本机链接指定IP段是否畅通,通过ping命令检测指定IP,检测命令执行结果,若为0表示畅通,若为1表示不通,以此判断网络是否畅通,但是指定机器禁用ping命令除外.代码如下: # ...

  8. windows下的java项目打jar分别编写在windows与linux下运行的脚本( 本人亲测可用!)

    前言: 最近公司做了一个工具,要将这个工具打包成一个可运行的程序,编写start.bat和start.sh在windows和linux下都可以运行. 在网上找了很多资料,最后终于找到一个可靠的资料,记 ...

  9. 小麦苗数据库巡检脚本,支持Oracle、MySQL、SQL Server和PG等数据库

    目录 一.巡检脚本简介 二.巡检脚本特点 三.巡检结果展示 1.Oracle数据库 2.MySQL数据库 3.SQL Server数据库 4.PG数据库 5.OS信息 四.脚本运行方式 1.Oracl ...

随机推荐

  1. 如何Catalog磁带库中的备份集

    在NBU备份的环境中,可以使用以下步骤来Catalog磁带库中的备份集. 1. 查找需要Catalog的备份集名称 可以使用两种方法查找Oracle备份集. 方法一是使用RMAN的list命令查找,例 ...

  2. No result defined for action action.LoginAction and result success 问题解决

    转自:https://blog.csdn.net/dongzhout/article/details/43699699 搭建好SSH2框架,写一个简单的登陆功能,提交表单的时候遇到这个问题: 配置文件 ...

  3. 浅谈Android四大组建之一Service---Service的创建

    Service是安卓四大组件之一,个人觉得Service的使用还是比较简单的额,可以理解为看不见的Activity,因为Service的使用和Activity十分接近.启动啊,生命周期等,都十分简单. ...

  4. hibernate学习笔记(4)表单操作

    User.hbm.xml的表单配置: ①主键 <id name="id" type="java.lang.Integer"> <column ...

  5. findall查找 ^$*+?{ }{m,n}[].[.] \w \s \d \b \D \W

    #!/usr/bin/env python import re r = "aasa da.5a5dfgfda ada" ret = re.findall('a',r) print( ...

  6. 【总结整理】openlayer加载搜狗地图,qq地图,mapabc

    qq    http://www.cnblogs.com/gisvip/archive/2012/11/01/2750493.html mapabc    http://www.cnblogs.com ...

  7. cocos2d-js动作模块使用(自用,只有代码)

    // var UIBase = require("src/views/ui/UIBase.js")// cc.loader.loadJs("src/views/ui/UI ...

  8. C++实现筛选法

    筛选法 介绍: 筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-194年)发明的,又称埃拉托斯特尼筛子. ...

  9. ASCII\UNICODE编码的区别

    前几天,Google给我Hotmail邮箱发了封确认信.我看不懂,不是因为我英文不行,而是"???? ????? ??? ????"的内容让我不知所措.有好多程序员处理不好编码问题 ...

  10. 20.LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

    转载:https://www.cnblogs.com/panfeng412/archive/2011/10/20/library_path-and-ld_library_path.html LIBRA ...