linux基线检查

2023-11-05

#!/bin/bash
#version v1.0 by pensar
#操作系统linux 配置规范--centos7

mkdir /tmp/check
str1=`/sbin/ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:" | head -n 1`
str=`date +%Y%m%d%H%M`
echo "----**日志审计配置**----" >> /tmp/check/${str}_out.txt 
echo "[1] 检查Cron任务授权" >> /tmp/check/${str}_out.txt 
if [ -e /etc/cron.deny ] && [ -e /etc/at.deny ];then
    CRON_DENY=`ls -l /etc/cron.deny | awk '{print $1}'`
     AT_DENY=`ls -l /etc/at.deny | awk '{print $1}'`
     echo "/etc/cron.deny文件授权情况为:${CRON_DENY:1:9}" >> /tmp/check/${str}_out.txt 
     echo "/etc/at.deny文件授权情况为:${AT_DENY:1:9}" >> /tmp/check/${str}_out.txt 
     echo "{'Check_point':'检查Cron任务授权','Check_result':{'/etc/cron.deny文件授权情况为':'${CRON_DENY:1:9}','/etc/at.deny文件授权情况为':'${AT_DENY:1:9}'}}" >> /tmp/check/${str}_dict.txt 
     CRON=`cat /etc/rsyslog.conf | grep "cron.\*"`
     echo "/etc/rsyslog.conf的配置情况为:${CRON}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/cron.deny和/etc/at.deny配置文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[2]检查是否对syslog登录事件记录" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/syslog.conf ];then
     Clog=`cat /etc/syslog.conf | grep /var/log/secure | grep -E "authpriv\.\*"`
     echo "/etc/syslog.conf的配置为:${Clog}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/syslog.conf配置文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[3]检查是否对rsyslog.conf配置审核" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/rsyslog.conf ];then
     LOG=`cat /etc/rsyslog.conf | grep @loghost` 
     echo "rsyslog.conf文件的配置为${LOG}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/rsyslog.conf配置文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[4]检查系统日志读写权限" >> /tmp/check/${str}_out.txt 
 if [ -e /var/log/messages ];then
     MESSAGES=`ls -l /var/log/messages | awk '{print $1}'`
     echo "/var/log/messages的文件权限为:${MESSAGES:1:9}" >> /tmp/check/${str}_out.txt 
  else
     echo "未找到/var/log/messages的文件" >> /tmp/check/${str}_out.txt 
 fi
 if [ -e /var/log/secure ];then
     SECURE=`ls -l /var/log/secure | awk '{print $1}'`
     echo "/var/log/secure 的文件权限为:${SECURE:1:9}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/var/log/secure的文件" >> /tmp/check/${str}_out.txt 
 fi
 
 if [ -e /var/log/maillog ];then
     MAILLOG=`ls -l /var/log/maillog | awk '{print $1}'`
     echo "/var/log/maillog 的文件权限为:${MAILLOG:1:9}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/var/log/maillog的文件" >> /tmp/check/${str}_out.txt 
 fi
 
 if [ -e /var/log/cron ];then
     CRON=`ls -l /var/log/cron | awk '{print $1}'`
     echo "/var/log/cron 的文件权限为:${CRON:1:9}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/var/log/cron的文件" >> /tmp/check/${str}_out.txt 
 fi
 if [ -e /var/log/spooler ];then
     SPOOLER=`ls -l /var/log/spooler | awk '{print $1}'`
     echo "/var/log/spooler 的文件权限为:${SPOOLER:1:9}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/var/log/spooler的文件" >> /tmp/check/${str}_out.txt 
 fi
 
 if [ -e /var/log/boot/log ];then
     LOG=`ls -l /var/log/boot/log | awk '{print $1}'`
     echo "/var/log/boot/log 的文件权限为:${LOG:1:9}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/var/log/boot/log的文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[5]检查是否对远程日志服务器配置" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/rsyslog.conf ];then
     RSYS=`cat /etc/rsyslog.conf | grep "@${str1}" | grep $'\t' | grep \.\*` 
     echo "远程日志服务器配置情况为:${RSYS}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/rsyslog.conf配置文件" >> /tmp/check/${str}_out.txt 
 fi
 echo "----------------------------" >> /tmp/check/${str}_out.txt
 echo ""
 echo "----**系统文件管理**----" >> /tmp/check/${str}_out.txt 
 echo "[1]检查是否对登录超时时间配置" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/profile ] && [ -e /etc/bashrc ]; then
     TMOUT=`cat /etc/profile | grep HISTTIMEFORMAT | grep TMOUT`
     if [ -n ${TMOUT} ]; then
         echo "/etc/profile的超时时间设置情况为:${TMOUT}" >> /tmp/check/${str}_out.txt 
     FORMAT=`cat /etc/bashrc | grep export | grep HISTTIMEFORMAT`
     if [ -n ${FORMAT} ];then
         echo "/etc/bashrc的设置为${FORMAT}" >> /tmp/check/${str}_out.txt 
       else
         echo "/etc/bashrc不存在对应配置" >> /tmp/check/${str}_out.txt 
       fi
     else
         echo "/etc/profile文件不存在对应配置" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "不存在/etc/profile文件以及/etc/bashrc文件" >> /tmp/check/${str}_out.txt 
 fi
 
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[2]检查系统磁盘状态" >> /tmp/check/${str}_out.txt 
 DF=`df -h | awk 'NR!=1{print $5}' | awk -F[\%] '{print $1}'`
 for i in ${DF}
 do
     if [ $i -ge 80 ];then
         flag=1
     else
         flag=0
     fi
 done
 if [ $flag = 1 ];then
     echo "系统磁盘使用率大于80%" >> /tmp/check/${str}_out.txt 
 else [ $flag = 0 ]
     echo "系统磁盘状态小于80%" >> /tmp/check/${str}_out.txt 
 fi    
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[3]检查是否禁止匿名FTP访问" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/vsftpd.conf ];then
     cat /etc/vsftpd.conf | grep "anonymous_enable=NO" 
     if [ $? -eq 0 ]; then
         echo "/etc/vsftpd.conf文件有设置:anonymous_enable=NO" >> /tmp/check/${str}_out.txt 
     else
         echo "不符合规范,需编辑/etc/vsftpd.conf文件,设置:anonymous_enable=NO" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "未找到/etc/vsftpd.conf文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[4]检查是否修改FTP banner 信息" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/vsftpd.d/vsftpd.conf ];then
     BANNER=`cat /etc/vsftpd.d/vsftpd.conf | grep ftpd_banner | grep -F[=] awk '{print $1}'`
     if [ -n ${BANNER} ];then
         echo "banner信息为${BANNER}" >> /tmp/check/${str}_out.txt 
     else
         echo "未设置banner信息" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "未找到/etc/vsftpd.d/vsftpd.conf文件" >> /tmp/check/${str}_out.txt 
 fi
 
 if [ -e /etc/ftpaccess ];then
     cat /etc/ftpaccess | grep "banner /path/to/ftpbanner"
     if [ -e -eq 0 ];then
         echo "/etc/ftpaccess文件中已经设置banner路径" >> /tmp/check/${str}_out.txt 
     else
         echo "/etc/ftpaccess文件中未设置banner路径" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "不存在/etc/ftpaccess文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[5]检查是否关闭不必要的服务" >> /tmp/check/${str}_out.txt 
 SERVICE=`ps -ef`
 echo "系统服务情况为${SERVICE}" >> /tmp/check/${str}_out.txt 
 SER_LIST=`systemctl list-units -all --type=service`
 echo "服务有${SER_LIST}" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/xinetd.conf ];then
     echo "在/etc/xinetd.conf文件中禁止不必要的基本网络服务" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/xinetd.conf文件" >> /tmp/check/${str}_out.txt 
 fi
 
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[6]检查系统core dump状态" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/security/limits.conf ];then
     cat /etc/security/limits.conf | grep \* | grep soft | grep core  | grep 0
     if [ $? -eq 0 ];then
         cat /etc/security/limits.conf | grep \* | grep hard | grep core  | grep 0
         if [ $? -eq 0 ];then
             echo "/etc/security/limits.conf符合安全配置" >> /tmp/check/${str}_out.txt 
         else
             echo "/etc/security/limits.conf未安装规范进行设置" >> /tmp/check/${str}_out.txt 
         fi
     else
         echo "/etc/security/limits.conf未安装规范进行设置" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "未找到/etc/security/limits.conf配置文件"  >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[7]检查系统补丁" >> /tmp/check/${str}_out.txt 
 OS=`uname -a`
 echo "系统版本情况为${OS}" >> /tmp/check/${str}_out.txt 
 

 
 echo "----**用户账号配置**----" >> /tmp/check/${str}_out.txt 
 echo "[1]检查是否存在无用账号" >> /tmp/check/${str}_out.txt 
 passwd=`ls -l /etc/passwd | awk '{print $1}'`
 if [ "${passwd:1:9}" = "rw-r--r--" ]; then
     echo "/etc/passwd文件权限为644,符合规范" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/passwd文件权限为${passwd:1:9},不符合规范" >> /tmp/check/${str}_out.txt 
 fi
 PASSWD_U=`cat /etc/passwd | awk -F[:] '{print $1}'`
 echo "查看是否存在无用账号:${PASSWD_U}" >> /tmp/check/${str}_out.txt 
 
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[2]检查不同用户是否共享账号" >> /tmp/check/${str}_out.txt     
 PASS=`cat /etc/passwd | awk -F[:] '{print $1}'`
 echo "cat /etc/passwd结果为${PASS}" >> /tmp/check/${str}_out.txt 
 #查看所有账号,与管理员确认是否有共享账号    
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[3]检查是否删除或锁定无用账号" >> /tmp/check/${str}_out.txt 
 NOlogin=`cat /etc/passwd | grep nologin | awk -F[:] '{print $1}'`
 echo "shell域中为nologin的账户有${NOlogin}" >> /tmp/check/${str}_out.txt 
 
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[4]检查是否存在无用用户组" >> /tmp/check/${str}_out.txt 
 GROUP=`ls -l /etc/group | awk '{print $1}'`
 echo "/etc/group文件权限为${GROUP}" >> /tmp/check/${str}_out.txt 
 GROUP_U=`cat /etc/group | awk -F[:] '{print $1}'`
 echo "/etc/group用户组有${GROUP}" >> /tmp/check/${str}_out.txt 
 
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[5]检查是否指定用户组成员使用su命令" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/pam.d/su ];then
     SUFFI=`cat /etc/pam.d/su | grep auth | grep sufficient | grep pam_rootok.so`
     REQUIRED=`cat /etc/pam.d/su | grep auth | grep required | grep group=`
     echo "是否指定用户组成员情况为${SUFFI}\n${REQUIRED}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/pam.d/su配置文件" >> /tmp/check/${str}_out.txt 
 fi
 
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
echo "[6]检查密码长度及复杂度策略" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/pam.d/system-auth ];then
     passComplexity=`cat /etc/pam.d/system-auth | grep "pam_pwquality.so"`
		passucredit=`cat /etc/pam.d/system-auth | grep "pam_pwquality.so" | grep -e ucredit | awk '{print $4}'`
     passlcredit=`cat /etc/pam.d/system-auth | grep "pam_pwquality.so" | grep -e lcredit | awk '{print $5}'`
     passdcredit=`cat /etc/pam.d/system-auth | grep "pam_pwquality.so" | grep -e dcredit | awk '{print $6}'`
     passocredit=`cat /etc/pam.d/system-auth | grep "pam_pwquality.so" | grep -e ocredit | awk '{print $7}'`
     echo "密码复杂度策略为:${passComplexity}" >> /tmp/check/${str}_out.txt     
     echo "密码复杂度策略中设置的大写字母个数为:${passucredit}" >> /tmp/check/${str}_out.txt 
     echo "密码复杂度策略中设置的小写字母个数为:${passlcredit}" >> /tmp/check/${str}_out.txt 
     echo "密码复杂度策略中设置的数字个数为:${passdcredit}" >> /tmp/check/${str}_out.txt 
     echo "密码复杂度策略中设置的特殊字符个数为:${passocredit}" >> /tmp/check/${str}_out.txt 
 else
     ehco "不存在/etc/pam.d/system-auth文件" >> /tmp/check/${str}_out.txt 
 fi
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[7]检查是否对用户远程登录进行限制" >> /tmp/check/${str}_out.txt 
 cat /etc/securetty | grep "#" | grep tty
 if [ $? -eq 0 ];then
     echo "注释掉所有tty设备" >> /tmp/check/${str}_out.txt 
 else
     echo "未注释掉所有tty设备" >> /tmp/check/${str}_out.txt 
 fi
 
 RootLogin=`cat /etc/ssh/sshd_config | grep PermitRootLogin | awk '{print $2}'`
 if [ "${RootLogin}" == "yes" ];then
     echo "/etc/ssh/sshd_config中PermitRootLogin配置为yes" >> /tmp/check/${str}_out.txt 
 else [ "${RootLogin}" == "no" ]
     echo "/etc/ssh/sshd_config中PermitRootLogin配置为no" >> /tmp/check/${str}_out.txt 
 fi
 
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[8]检查是否配置加密协议" >> /tmp/check/${str}_out.txt 
 SSH=`ps -elf | grep ssh`
 echo "ssh服务状态为${SSH}"  >> /tmp/check/${str}_out.txt 
 if [ -e /etc/ssh/sshd_config ];then
     cat /etc/ssh/sshd_config | grep "Host*" | grep "Protocol 2"
     if [ $? -eq 0 ];then
         echo "/etc/ssh/sshd_config文件符合安全配置" >> /tmp/check/${str}_out.txt 
     else
         echo "/etc/ssh/sshd_config文件中未找到相应配置" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "未找到/etc/ssh/sshd_config文件" >> /tmp/check/${str}_out.txt 
 fi    
 
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[9]检查是否配置密码的生存期" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/login.defs ];then
     passmax=`cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v ^# | awk '{print $2}'`
     passmin=`cat /etc/login.defs | grep PASS_MIN_DAYS | grep -v ^# | awk '{print $2}'`
     passlen=`cat /etc/login.defs | grep PASS_MIN_LEN | grep -v ^# | awk '{print $2}'`
     passage=`cat /etc/login.defs | grep PASS_WARN_AGE | grep -v ^# | awk '{print $2}'`
     echo "口令生存周期天数为: ${passmax}" >> /tmp/check/${str}_out.txt 
     echo "口令更改最小时间间隔为天数为:${passmin}" >> /tmp/check/${str}_out.txt 
     echo "口令最小长度天数为:${passlen}" >> /tmp/check/${str}_out.txt 
     echo "口令过期告警时间天数为:${passage}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到/etc/login.defs配置文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[10]检查用户缺省访问权限" >> /tmp/check/${str}_out.txt 
 fileumask=`cat /etc/login.defs | grep -i umask | awk '{print $2}'`
 if [ -n $fileumask ]; then    
     echo "/etc/login.defs文件的umask的值为:${fileumask}" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/login.defs文件未配置umask值" >> /tmp/check/${str}_out.txt 
 fi
 
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[11]检查passwd group文件安全权限" >> /tmp/check/${str}_out.txt 
 
 grep ^+: /etc/passwd /etc/shadow /etc/group
 if [ $? -eq 0 ];then
     echo "低于安全要求" >> /tmp/check/${str}_out.txt 
 else
     echo "符合安全要求" >> /tmp/check/${str}_out.txt 
 fi
 passwd=`ls -l /etc/passwd | awk '{print $1}'`
 echo "/etc/passwd文件权限为${passwd:1:9}" >> /tmp/check/${str}_out.txt 
 ETC_group=`ls -l /etc/group | awk '{print $1}'`
 echo "/etc/group文件权限为${passwd:1:9}" >> /tmp/check/${str}_out.txt 
 
 igroup=`lsattr /etc/group | grep i`
 if [ "$igroup" = "i" ]; then
     echo "/etc/group文件存在i属性文件" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/group文件不存在i文件属性" >> /tmp/check/${str}_out.txt 
 fi
 ipasswd=`lsattr /etc/passwd | grep i`
 if [ "$igshadow" = "i" ]; then
     echo "/etc/passwd存在i属性文件" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/passwd不存在i文件属性" >> /tmp/check/${str}_out.txt 
 fi
 
    
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[12]检查是否存在除root之外UID为0的用户" >> /tmp/check/${str}_out.txt 
 uids=`awk -F[:] 'NR!=1{print $3}' /etc/passwd`  #NR!=1意思的除了第一行不显示。1代表具体的行数
 flag=0
 for i in $uids
 do 
     if [ $i = 0 ]; then
         echo "存在非root账号的账号UID为0,不符合要求" >> /tmp/check/${str}_out.txt 
     else    
         flag=1
     fi
 done
 if [ $flag = 1 ]; then
    echo "不存在非root账号的UID为0,符合要求" >> /tmp/check/${str}_out.txt 
 fi

     
    
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[13]检查是否配置环境变量" >> /tmp/check/${str}_out.txt 
 echo $PATH | egrep '(^|:)(\.|:|$)'
 if [ $? -eq 0 ];then
     echo "检查是否包含父目录,低于安全要求" >> /tmp/check/${str}_out.txt 
 else
     echo "检查是否包含父目录,符合安全要求" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[14]检查是否对远程连接的安全性进行配置" >> /tmp/check/${str}_out.txt 
 filerhosts=`find / -maxdepth 3 -type f -name .rhosts 2>/dev/null`
 if [ -n "$filerhosts" ]; then
     echo "rhosts文件路径为:${filerhosts}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到.rhosts文件" >> /tmp/check/${str}_out.txt 
 fi
 
 fileequiv=`find / -maxdepth 2 -name hosts.equiv 2>/dev/null`
 if [ -n "$fileequiv" ]; then
     echo "hosts.equiv文件路径为:${fileequiv}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到hosts.equiv文件" >> /tmp/check/${str}_out.txt 
 fi
 filenetrc=`find / -maxdepth 3 -name .netrc 2>/dev/null`
 if [ -n "$filenetrc" ]; then
     echo "netrc文件路径为:${filenetrc}" >> /tmp/check/${str}_out.txt 
 else
     echo "未找到.netrc文件" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[15]检查是否对用户的umask进行配置" >> /tmp/check/${str}_out.txt 
 if [ -e /etc/profile ];then
     PROFILE1=`cat /etc/profile | grep -i umask | grep -v '#' | head -n 1 | awk '{print $2}'`
     PROFILE2=`cat /etc/profile | grep -i umask | grep -v '#' | tail -1 | awk '{print $2}'`
     if [ -n "$PROFILE" ]; then
         echo "在/etc/profile文件中umask的值为:${PROFILE}和${PROFILE1}" >> /tmp/check/${str}_out.txt 
     else
         echo "在/etc/profile文件中未找到umask值" >> /tmp/check/${str}_out.txt 
     fi
 fi
 
 csh=`cat /etc/csh.login | grep -i umask`
 if [ -n "$csh" ]; then
     echo "在/etc/csh.login文件中umask的内容为:${csh}" >> /tmp/check/${str}_out.txt 
 else
     echo "在/etc/csh.login文件中未找到umask值" >> /tmp/check/${str}_out.txt 
 fi
 
 cshrc1=`cat /etc/csh.cshrc | grep -i umask | grep -v '#' | head -n 1 | awk '{print $2}'`
 cshrc2=`cat /etc/csh.cshrc | grep -i umask | grep -v '#' | tail -1 | awk '{print $2}'`
 if [ -n "$cshrc" ]; then
     echo "在/etc/csh.cshrc文件中umask的值为:${cshrc1}和${cshrc2}" >> /tmp/check/${str}_out.txt 
 else
     echo "在/etc/csh.login文件中未找到umask值" >> /tmp/check/${str}_out.txt 
 fi

 if [ -e /etc/bashrc ];then
     bashrc1=`cat /etc/bashrc | grep -i umask | grep -v '#' | head -n 1 | awk '{print $2}'`
     bashrc2=`cat /etc/bashrc | grep -i umask | grep -v '#' | tail -1 | awk '{print $2}'`
     if [ -n "$bashrc1" ] && [ -n "$bashrc2" ]; then
         echo "在/etc/bashrc文件中umask内容为:${bashrc1}和${bashrc2}" >> /tmp/check/${str}_out.txt 
     else
         echo "在/etc/bashrc文件中未找到umask值" >> /tmp/check/${str}_out.txt 
     fi
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[16]检查是否对重要目录和文件的权限进行设置" >> /tmp/check/${str}_out.txt 
 etc=`ls -l / | grep etc | awk '{print $1}'`
 if [ "${etc:1:9}" = "rwxr-x---" ]; then
     echo "/etc/权限为750,符合规范" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/文件权限为${etc:1:9},不符合规范" >> /tmp/check/${str}_out.txt 
 fi
 
 Shadow=`ls -l /etc/shadow | awk '{print $1}'`
 if [ "${shadow:1:9}" = "rw-------" ]; then
     echo "/etc/shadow文件权限为600,符合规范" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/shadow文件权限为${Shadow:1:9},不符合规范" >> /tmp/check/${str}_out.txt 
 fi
 
 Passwd=`ls -l /etc | grep passwd | awk '{print $1}'`
 if [ "${passwd:1:9}" = "rw-r--r--" ]; then
     echo "/etc/passwd文件权限为644,符合规范" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/passwd文件权限为${Passwd:1:9},不符合规范" >> /tmp/check/${str}_out.txt 
 fi
 
 Group=`ls -l /etc | grep group | awk '{print $1}'`
 if [ "${Group:1:9}" = "rw-r--r--" ]; then
     echo "/etc/passwd文件权限为644,符合规范" >> /tmp/check/${str}_out.txt 
 else
     echo "/etc/passwd文件权限为${Group:1:9},不符合规范" >> /tmp/check/${str}_out.txt 
 fi
 
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[17]检查是否存在未授权的suid/sgid文件" >> /tmp/check/${str}_out.txt 
 for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print "/./"$2 }'`; do
     RESULT=`find $PART -type f -xdev \( -perm -04000 -o -perm -02000 \) -print`
         if [ -n ${RESULT} ];then
             flag=1
         else
             flag=0
         fi
 done
 if [ $flag -eq 0 ];then
     echo "返回值为空,符合规范" >> /tmp/check/${str}_out.txt 
 else [ $flag -eq 1 ]
     echo "返回值不为空,不符合规范" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[18]检查是否存在异常隐含文件" >> /tmp/check/${str}_out.txt 
 find  / -name ".. *" -print
 HIDDEN=`find  / -name ".. *" -print; find  / -name "...*" -print | cat -v`
 if [ -n ${XINETD} ];then
     echo "隐藏文件有${HIDDEN}" >> /tmp/check/${str}_out.txt 
 else
     echo "没有隐藏文件" >> /tmp/check/${str}_out.txt 
 fi

 echo "----**网络通信配置**----" >> /tmp/check/${str}_out.txt 
 echo "[1]检查是否对基本网络服务进行配置" >> /tmp/check/${str}_out.txt 
 XINETD=`ls  -l  /etc/xinetd.d`
 echo "/etc/xinetd.d目录中的包含的基本的网络服务的配置文件为${XINETD}" >> /tmp/check/${str}_out.txt 
     
 echo "----------------------------" >> /tmp/check/${str}_out.txt     
 echo "[2]检查是否开启NFS服务" >> /tmp/check/${str}_out.txt 
 systemctl status nfs
 if [ $? -eq 0 ];then
     echo "已开启nfs服务" >> /tmp/check/${str}_out.txt 
 else [ $? -eq 3 ]
     echo "未开启nfs服务" >> /tmp/check/${str}_out.txt 
 fi
 
 echo "----------------------------" >> /tmp/check/${str}_out.txt 
 echo "[3]检查常规网络服务是否运行正常" >> /tmp/check/${str}_out.txt 
 #若无telnet命令
 telnet localhost 80
 if [ $? -eq 0 ];then
     echo "80服务正常运行" >> /tmp/check/${str}_out.txt 
     telnet localhost 25
     if [ $? -eq 0 ];then
         echo "25服务正常运行" >> /tmp/check/${str}_out.txt 
     fi
     telnet localhost 110
     if [ $? -eq 0 ];then
         echo "110服务正常运行" >> /tmp/check/${str}_out.txt 
     fi
     telnet localhost 143
     if [ $? -eq 0 ];then
         echo "143服务正常运行" >> /tmp/check/${str}_out.txt 
     fi
     telnet localhost 443
     if [ $? -eq 0 ];then
         echo "443服务正常运行" >> /tmp/check/${str}_out.txt 
     fi
     telnet localhost 21
     if [ $? -eq 0 ];then
         echo "21服务正常运行" >> /tmp/check/${str}_out.txt 
     fi
 else
     echo "系统未安装telnet命令" >> /tmp/check/${str}_out.txt 
 fi

echo "centos 7基线检查完毕"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux基线检查 的相关文章

随机推荐

  • 学习django心得(一)

    学习django心得 一 说明 该文章用于博主记录学习心得和主要学习收获 学习材料大多来自刘江的博客教程 本文也就是它教程的概括 感兴趣的同学可以前往学习 ps 常见API原博客教程解释得很详细 时间 2020 3 1 学习内容 Djang
  • JAVA图像处理

    一 图像原理 图像是由一个个像素点组成的矩阵形成的 每个像素点的大小是1 int 32bit 4个字节分别对应A R G B 0 255byte 0000 0000 A 0000 0000 R 0000 0000 G 0000 0000 B
  • React入门-React的特点,React脚手架搭建工程

    React的特点 轻量 React的开发版所有源码 包含注释 仅3000多行 原生 所有的React的代码都是用原生JS书写而成的 不依赖其他任何库 易扩展 React对代码的封装程度较低 也没有过多的使用魔法 所以React中的很多功能都
  • spring

    spring 解决企业应用开发
  • Axure中引用javascript代码

    Axure支持原生javascript语法调用 Axure中默认的javascript位置存放在Axure安装目录axureRP DefaultSettings Prototype Files resources scripts文件夹下 如
  • Kubernetes 之深入理解 StatefulSet

    文章目录 StatefulSet 的由来 有状态应用 StatefulSet 的设计思想 拓扑状态 Headless Service 如何维持应用实例的拓扑状态 存储状态 Persistent Volume Claim PVC 其实就是一种
  • 安信可蓝牙PB-02 SDK二次开发记录

    目录 1 开发环境 烧录调试 2 例程踩坑 1 编译烧录 watchdog 例程 1 开发环境 烧录调试 详细参考下面两篇教程 安信可PB 01 02模组专题 PB 01 02模组开发板应用 BLE UART固件的使用教程 安信可PB 01
  • Linux系统与管理 - (九)系统初始化进程文件及服务[结]

    目录 自说 学习路径 init进程 systemd进程 服务管理 自说 本章是linux系统与管理的最后一章 系统初始化进程文件与服务管理 其实只要用心 基本知识也就是呢么多 最重要的如何灵活运用 日积月累 以小积多 不断的扩充自己的知识
  • MySQL数据库(九) 集群 Cluster 和性能优化

    文章目录 6 MySQL 集群 Cluster 6 1 MySQL主从复制 6 1 1 主从复制架构和原理 6 1 2 实现主从复制配置 6 1 3 主从复制相关 6 1 4 实现级联复制 6 1 5 主主复制 6 1 6 半同步复制 6
  • JMeter压测,跨线程组传递参数,设置全局变量

    1 测试计划中 勾选独立运行线程组选项 必须勾选 否则不能传参 2 正则表达式取出要传递的参数 3 添加一个BBeanShell 后置处理器 4 setProperty global token token 其中 global token是
  • 不能初始化数据库支持endnote_EndNote正确恢复数据库方法

    EndNote正确恢复数据库方法 EndNote有个恢复数据库功能 Recover Library 当EndNote的数据库Library受损或者打不开时 利用Recover Library可能是最后的一颗救命稻草 但是EndNote的Re
  • 2020-10-31

    实验一 系统环境 Kali Linux 2 Windows网络环境 交换网络结构实验工具 Metasploitable2 需自行下载虚拟机镜像 Nmap Kali WinHex 数据恢复软件等 实验步骤 1 用搜索引擎Google或百度搜索
  • MyISAM 和 InnoDB 讲解

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型 这两个表类型各有优劣 视具体应用而定 基本的差别为 MyISAM类型不支持事务处理等高级处理 而InnoDB类型支持 MyISAM
  • 请求转发和重定向区别

    一 转发和重定向区别详解 作为一名程序员 特别是java web开发的程序员 在使用servlet jsp的时候 我们必须要知道实现页面跳转的两种方式的区别和联系 即转发和重定向的区别 RequestDispatcher forward方法
  • openGLES3.0基本概念

    前言 学习openGL已经有一段时间了 断断续续大概2年左右 发现有些概念还是没有搞清楚 下面记录一下 有空的时候时不时的回顾一下 免得忘记 哎 上年纪了 记性越来越差了 openGLES着色语言 1 version 300 es 声明着色
  • 操作系统是如何启动起来的呢

    https mp weixin qq com s QE9OxBjoIyYjpNVt kXfMw
  • Java基础:Stack基本操作

    StackDemo java import java util Stack public class StackDemo public void showpush Stack
  • 【华为OD机试】计算误码率 (C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 前端图片处理(一) --- Cropper.js

    Cropper js 介绍 一个纯 JavaScript 的图片裁剪操作插件库 并且是支持移动端的 安装 npm install cropperjs 引入 Cropper 对象 样式 import cropperjs dist croppe
  • linux基线检查

    bin bash version v1 0 by pensar 操作系统linux 配置规范 centos7 mkdir tmp check str1 sbin ifconfig a grep inet grep v 127 0 0 1 g