Linux 编写安全巡检脚本

Linux 编写安全巡检脚本,第1张

概述Linux 编写安全巡检脚本 检测/etc/passwd,/etc/shadow文件是否锁定 检测/etc/login.defs配置文件中密码有效期设置是否得当  检查所有用户账户(非系统账户)中是否存在密码永久有效问题(检查/etc/shadow文件每一行中的密码期限值) 检查系统默认历史命令记录条数(/etc/profile)和管理员帐号的历史命令条数(~/.bash_logout)是否存在安

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 2 ]  then  echo "该系统中的账户和密码配置文件没有锁定,存在安全隐患!"fi###检测/etc/login.defs配置文件中密码有效期设置是否得当day=$(grep "^PASS_MAX_DAYS" /etc/login.defs |awk {print })if [ $day -gt 30 ]then  echo "/etc/login.defs该配置文件中账户有效期设置大于30天,存在安全隐患!"    fi###检查所有用户账户(非系统账户)中是否存在密码永久有效问题(检查/etc/shadow文件每一行中的密码期限值)#1.首先在/etc/passwd文件中找到所有非系统帐号(uID>500和root账户),导入到一个文件awk -F: {if(>=500|| ==0) print } /etc/passwd >account.txt#2.循环遍历account.txt文件,过滤/etc/shadow中存在和account.txt文件一样的账户for i in $(cat account.txt)do grep "^$i" /etc/shadow |awk -F: {if(>30) print """" ":账户存在密码有效期大于30天安全隐患!"}done###检查系统默认历史命令记录条数(/etc/profile)和管理员帐号的历史命令条数(~/.bash_logout)是否存在安全隐患history_num=$(grep "^HISTSIZE" /etc/profile |awk -F= {print })num=$(grep "history -c" /root/.bash_logout |wc -l)if [ $history_num -gt 100 ]||[ $num -eq 0 ]then  echo "该系统默认历史记录存在安全隐患!"fi###检查终端自动注销功能是否启用,自动注销配置文件分为系统配置文件(/etc/profile)和各个用户自己的配置文件(~/.bash_profile)#1.首先检测系统配置文件/etc/profile是否有启用终端自动注销#2.如何系统配置文件没有启用终端自动注销,然后在循环检查各个账户的配置文件是否启用终端自动注销功能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=1;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      donefi###检查系统默认管理员账号是否为root(用户ID、组ID为0) awk -F: {if( == 0 &&  == 0 && ="root") print "root是默认管理员!" } /etc/passwd###检查/etc/passwd文件中是否存在多余的超级用户账号(用户ID、组ID为0)awk -F: {if( == 0 &&  != "root") print """账户具有管理员权限" } /etc/passwd###检查/etc/passwd文件中是否有可疑账号(是否存在多余的账号)#1.事先备份一份/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 }|awk -F "," {print NF})  if [ $num_in_wheel -gt 2 ]  then    echo "太多用户能切换到root,存在安全隐患!"  fifi###检查grub.conf文件中是否开启加密功能“password --md5passwd_grub=$(grep "password" /boot/grub/grub.conf)if [ ! -n "$passwd_grub" ]then  echo "grub菜单没有开启加密功能,存在安全隐患!"fi###检查系统是否有足够的磁盘空间#该变量用于获取磁盘的已使用空间的百分比值Usedspace=$(df -hT | grep "/$" | awk {print } | awk -F% {print })if [ $Usedspace -gt 80]then  echo "你的磁盘空间已不足,请清理磁盘!"else  echo "你的磁盘空间很充足!已用空间为$Usedspace%"fi###检查开放的终端个数tty_num=$(grep "^env ACTIVE_CONSolES" /etc/init/start-ttys.conf|awk -F "-" {print }|awk -F "]" {print })echo "开放$tty_num个终端"###系统弱口令检测,调用john#通过find查找john是否存在,存在说明john已经安装exist_john=$(find / -name john)if [ ! -n "$exist_john" ]then  #不存在,编译安装john  tar zxvf /tmp/john-1.8.0.tar.gz -C /usr/src  cd /usr/src/john-1.8.0/src  echo "该系统没有安装john,正在安装,请稍等......"  make clean linux-x86-64 &>/dev/null  echo "该系统已经安装完john"  cd /usr/src/john-1.8.0/run/  cp /etc/shadow /root  #用自己的字典 --worldList  ./john  --wordList=/root/dict.txt /root/shadowelse  cd /usr/src/john-1.8.0/run/  cp /etc/shadow /root  #用自己的字典  ./john  --wordList=/root/dict.txt /root/shadowfi###端口扫描功能,调用nmapexist_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=yuzlybaseurl=file:///mntenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-releaseOK  #安装nmap  echo "该系统没有安装nmap,正在安装nmap,请稍等....."  yum -y install nmap &>/dev/null  nmap -p 135,136,137,138,139,445,21,23,3389 192.168.133.130else  nmap -p 135,3389 192.168.133.130fi

 

 

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

以上是内存溢出为你收集整理的Linux 编写安全巡检脚本全部内容,希望文章能够帮你解决Linux 编写安全巡检脚本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1027927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存