Linux 编写安全巡检脚本
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 编写安全巡检脚本的更多相关文章
- linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本
红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...
- Linux/hp unix/AIX日常巡检脚本(转)
以下为Linux/hp unix/AIX日常巡检脚本,大家可以参考着进行改写,用于自己的服务器. #!/usr/bin/ksh syserrdate=`date +"%m/%d"` ...
- linux日常巡检脚本
######################以下是脚本内容开始部分###################################### #!/bin/bash #set -x2012-02-2 ...
- Linux shell编写端口扫描脚本
Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...
- Linux如何编写自启动shell脚本
1.需求分析 在很多情况下,程序员都做着重复枯燥的工作,虽然这些工作也是必须的,其实这些重复性的工作可以执行脚本替代:今天笔者就如何编写自启动shell脚本减少程序员开启服务器后的环境开启工作: 2. ...
- linux编写.sh脚本并赋权限
今日打包编译项目时,发现缺少一个git pull更新项目的脚本,所以在linux编写了一个gitpull.sh脚本,能够实现更新项目的需求. 1.首先vi gitpull.sh或者使用vim编辑器. ...
- linux编写脚本检测本机链接指定IP段是否畅通
linux编写脚本检测本机链接指定IP段是否畅通,通过ping命令检测指定IP,检测命令执行结果,若为0表示畅通,若为1表示不通,以此判断网络是否畅通,但是指定机器禁用ping命令除外.代码如下: # ...
- windows下的java项目打jar分别编写在windows与linux下运行的脚本( 本人亲测可用!)
前言: 最近公司做了一个工具,要将这个工具打包成一个可运行的程序,编写start.bat和start.sh在windows和linux下都可以运行. 在网上找了很多资料,最后终于找到一个可靠的资料,记 ...
- 小麦苗数据库巡检脚本,支持Oracle、MySQL、SQL Server和PG等数据库
目录 一.巡检脚本简介 二.巡检脚本特点 三.巡检结果展示 1.Oracle数据库 2.MySQL数据库 3.SQL Server数据库 4.PG数据库 5.OS信息 四.脚本运行方式 1.Oracl ...
随机推荐
- Xmodem通信协议实例
在工作时串口通信的过程中需要传输文件,这里就就需要使用通信协议,此时选择的是Xmodem协议作简要研究 1.什么是Xmodem协议 Xmodem协议是串口通信中广泛使用到的异步文件传输协议.以128字 ...
- Erlang pool management -- Emysql pool optimize
在上一篇关于Emysql pool (http://www.cnblogs.com/--00/p/4281938.html)的分析的最后提到 现在的emysql_conn_mgr gen_server ...
- 机器学习:集成学习(Bagging、Pasting)
一.集成学习算法的问题 可参考:模型集成(Enxemble) 博主:独孤呆博 思路:集成多个算法,让不同的算法对同一组数据进行分析,得到结果,最终投票决定各个算法公认的最好的结果: 弊端:虽然有很多机 ...
- 在U盘分区安装Kali并引导live CD 教程以及常见的注意事项
Kali Linux作为强大的全能渗透系统,把它制成Live CD基本算是必备技能了,但是官方提供的文档虽然简单,但是整个U盘都会被占用,确实是有点可惜,结合网上提供的一些思路加上自己的经验,向大家讲 ...
- Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline
官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...
- c# webapi2 实用详解
本文介绍webapi的使用知识 发布webapi的问题 配置问题 webapi的项目要前端访问,需要在web.config配置文件中添加如下配置 在system.webServer节点下面添加 < ...
- spring特点与好处
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...
- 类型:Jquery;问题:jquery调用后台带参数方法;结果:利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法。
利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. [WebMethod] 命名空间 1.无参数的方法调用, 注意:1.方法一定要静态方法,而且要有[WebMethod] ...
- 如何利用MATLAB并行计算缩短程序运行时间
本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题.今天为了在8核的dell服务器上跑程序才专门看了一下.本身写的程序就很容易实现并行化,因为beamline之间并没有考虑相互作用.等于可 ...
- css 文件上传按钮美化
转自:http://zixuephp.net/article-85.html 思路:在一个div里面添加一个图片用作按钮再添加一个input file 文件上传,把文件上传按钮设置透明度为0,绝对定位 ...