Linux 编写安全巡检脚本
2019-05-04 09:38:01来源:博客园 阅读 ()
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 $2}') if [ $day -gt 30 ] then echo "/etc/login.defs该配置文件中账户有效期设置大于30天,存在安全隐患!" fi ###检查所有用户账户(非系统账户)中是否存在密码永久有效问题(检查/etc/shadow文件每一行中的密码期限值) #1.首先在/etc/passwd文件中找到所有非系统帐号(uid>500和root账户),导入到一个文件 awk -F: '{if($3>=500|| $3==0) print $1}' /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($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 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 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文件中是否有可疑账号(是否存在多余的账号) #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 $4}'|awk -F "," '{print NF}') if [ $num_in_wheel -gt 2 ] 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 80] 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.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/shadow else cd /usr/src/john-1.8.0/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=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release OK #安装nmap echo "该系统没有安装nmap,正在安装nmap,请稍等....." yum -y install nmap &>/dev/null nmap -p 135,136,137,138,139,445,21,23,3389 192.168.133.130 else nmap -p 135,136,137,138,139,445,21,23,3389 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结尾已被锁定的账户"}'
原文链接:https://www.cnblogs.com/yuzly/p/10725729.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Linux系统如何设置开机自动运行脚本? 2020-06-11
- Linux指令和shell脚本 2020-06-11
- 适合开发者的最佳Linux发行版 2020-06-11
- 信息泄漏时代,如何让自己的密码更安全? 2020-06-10
- RAID 1 软件实现(Linux 系统) 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash