Linux服务器--基线检查

news2024/11/24 16:58:00

Linux服务器--基线检查

    • 一、前言
    • 二、口令策略
      • 2.1 检查项—密码策略
      • 2.2 检查项—密码生存期
      • 2.3 检查项—检查密码生存期是否作用于每个用户
    • 三、账号管理
      • 3.1 检查项—禁止存在UID相同的用户
      • 3.1 检查项—禁止存在空密码的帐户
    • 四、认证授权
      • 4.1 检查项—登陆失败处理
    • 五、文件权限
      • 5.1 检查项—检查相关日志文件权限
      • 5.2 检查项—日志配置文件权限
      • 5.3 检查项—禁止共享文件和目录
    • 六、日志审计
      • 6.1 检查项—开启日志服务并配置记录内容
      • 6.2 检查项—日志至少保留180天
    • 七、网络通信
      • 7.1 检查项—限制终端登录范围
    • 八、其他配置
      • 8.1 检查项—开启SElinux功能

一、前言

基线检查——安全基线配置核查(或检查)的简称,指为满足网络安全规范要求,服务器设备安全配置必需达到的最低安全标准,例如服务器上的账号、口令、日志、认证授权合规性配置等。

1、为什么要进行基线检查?

评估企业或组织的当前服务器安全状态,以发现薄弱或未满足要求的配置、是否存在漏洞和隐患。防止攻击者恶意攻击或访问。

linux中几个比较重要的文件:

/etc/passwd    			--- 记录了系统中各用户的一些基本属性,root可写,所有用户可读
/etc/shadow    			--- 记录了所有用户的密码
/etc/group     			--- 记录了用户组属性
/etc/login.defs 		--- 密码策略文件
/etc/pam.d/system-auth	--- 密码强度

2、关于等保2.0

2019年12月1日网络安全等级保护2.0国家标准的正式实施,等级保护进入2.0时代。

2017年,勒索病毒“WannaCry”肆虐全球,我们在断网、打补丁、关端口、杀病毒的同时,有没有想到些什么?《网络安全法》施行在际,这样一个事件一下子挑动起大家的神经,让我们突然意识到,那个没有硝烟的战场一直在我们身边,从未远去。

在一个翅膀抖动都可能带来龙卷风的世界,我们需要不断提高风暴来临前的洞察和感知能力,我们的专家、研究机构、安全企业以及整个产业界一直在这条道路上努力,但同时,我们是否也应意识到,对于网络安全这件事儿,我们比任何时候都需要来自国家的力量。

——摘抄自《网络安全等级保护网》

3、基线检查范围

基线检查主要有四个方面:账号安全、认证授权、协议安全、审计安全。

1、用户账号   ---唯一身份。
2、统一认证   ---你是谁。
3、授权管理   ---你有什么权限。
4、操作审计   ---你可以干什么。

本文从以下(口令策略…其他配置)七个方面进行介绍各项基线检查点,相应的判定依据、及加固方案。

二、口令策略

2.1 检查项—密码策略

判定依据:

##### 检测方法-----1 #####
   查看/etc/pam.d/system-auth文件,
   #cat /etc/pam.d/system-auth
   是否存在以下配置:
   password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1

判定依据
   以上条件满足则合规;否则不合规。

##### 检测方法(脚本)-----2 #####
if [ -f /etc/pam.d/system-auth ];then
cat /etc/pam.d/system-auth|grep -v "^[[:space:]]*#"|egrep "password[[:space:]]+requisite[[:space:]]+pam_cracklib.so"
 i=1
 for parameter in minlen dcredit ucredit lcredit ocredit
 do
 echo $parameter
 if [[ -n `cat /etc/pam.d/system-auth|grep -v "^[[:space:]]*#"|egrep "password[[:space:]]+requisite[[:space:]]+pam_cracklib.so"|grep "$parameter"` ]];then
 echo "result$i="`cat /etc/pam.d/system-auth 2>/dev/null|grep -v "^[[:space:]]*#"|egrep "password[[:space:]]+requisite[[:space:]]+pam_cracklib.so"|head -n1|awk -F"$parameter=" '{print$2}'|awk '{print$1}'`
 else
 echo "result$i=不合规"
 fi
 i=`expr $i + 1`
 done
 unset parameter
else
 echo "result=The /etc/pam.d/system-auth file not found"
fi

返回结果:

在这里插入图片描述

检查点:

检查点[1]:密码长度最小值
实际值:
Parameters are not configured
运算符:大于等于
标准值:
8

检查点[2]:新密码中至少包含多少位数字
实际值:
Parameters are not configured
运算符:等于
标准值:
-4

检查点[3]:新密码中至少包含多少位大写字母
实际值:
Parameters are not configured
运算符:等于
标准值:
-2

检查点[4]:新密码中至少包含多少位小写字母
实际值:
Parameters are not configured
运算符:等于
标准值:
-1

检查点[5]:新密码中至少包含多少位特殊字符
实际值:
Parameters are not configured
运算符:等于
标准值:
-1

加固方案:

#####参考配置操作
  1、执行备份
    # cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
  2、编辑/etc/pam.d/system-auth
	# vi /etc/pam.d/system-auth
	
#####添加内容:
password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-1 dcredit=-4 ocredit=-1

wq保存退出

#####说明:
minlen=N 新密码的最小长度
dcredit=N 当N>0时表示新密码中数字出现的最多次数;当N<0时表示新密码中数字出现最少次数。
ucredit=N 当N>0时表示新密码中大写字母出现的最多次数;当N<0时表示新密码中大写字母出现最少次数。
lcredit=N 当N>0时表示新密码中小写字母出现的最多次数;当N<0时表示新密码中小写字母出现最少次数。
ocredit=N 当N>0时表示新密码中特殊字符出现的最多次数;当N<0时表示新密码中特殊字符出现最少次数。

2.2 检查项—密码生存期

判定依据:


##### 检测方法-----1 #####
查看文件/etc/login.defs
      #cat /etc/login.defs
        检查以下参数值是否满足要求:
        PASS_MIN_DAYS  >=1
        PASS_MAX_DAYS  <=180
        PASS_MIN_LEN   >=8
        PASS_WARN_AGE  =28
        
##### 检测方法(脚本)-----2 #####
 cat /etc/login.defs 2>/dev/null|egrep -v "^[[:space:]]*#|^$"|egrep -w "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE"
 
判定依据
    以上条件满足则合规;否则不合规。

返回结果:

在这里插入图片描述
检查点:

检查点[1]:密码最短生存期(天)
实际值:
6
运算符:大于等于
标准值:
1

检查点[2]:密码最长生存期(天)
实际值:
90
运算符:小于等于
标准值:
180

检查点[3]:密码长度最小值(对root无效)
实际值:
8
运算符:大于等于
标准值:
8

检查点[4]:密码生存期到期前提醒(天)
实际值:
30
运算符:等于
标准值:
28

加固方案:

参考配置操作
    1、执行备份
      #cp /etc/login.defs /etc/login.defs.bak
    2、编辑/etc/login.defs文件
      #vi /etc/login.defs
      添加内容(存在则修改):
        PASS_MIN_DAYS  >=1     #新建用户的密码最短使用天数为大于等于1的数字
        PASS_MAX_DAYS  <=180   #新建用户的密码最长使用天数为小于等于180的数字
        PASS_MIN_LEN   >=8     #新建用户的密码最小长度为大于等于8的数字
        PASS_WARN_AGE  28    #密码生存期到期前28天提醒
wq保存退出

2.3 检查项—检查密码生存期是否作用于每个用户

判定依据:

##### 检测方法-----1 #####
    1、查看/etc/shadow文件
      #cat /etc/shadow
    检查各个用户的第四字段(口令最短修改时间 PASS_MIN_DAYS 1)是否为1,第五字段(口令最长修改时间 PASS_MAX_DAYS 180)是否为180。
判定依据
    各个用户的第四字段为1且第五字段为180则合规;否则不合规。
    
##### 检测方法(脚本)-----2 #####
cat /etc/passwd 2>/dev/null| awk -F: '{print$1}'|while read username
do
 if [[ -z `cat /etc/passwd 2>/dev/null|grep -v "^[[:space:]]*#"|awk -F":" '{if($7~"nologin")print$1}'|grep -w $username` ]];then
 if [[ -n `cat /etc/passwd 2>/dev/null|grep -v "^[[:space:]]*#"|awk -F":" '{if($2=="x")print$1}'|grep -w $username` ]];then
if [[ -z `cat /etc/shadow 2>/dev/null|grep -v "^[[:space:]]*#"|grep -w $username|awk -F":" '{print$2}'|cut -b 1|awk '{if($1=="!"||$1=="*")print}'` ]];then
if [[ -z `cat /etc/shadow 2>/dev/null|grep -v "^[[:space:]]*#"|grep -w $username|awk -F":" '{print$2}'|cut -b 1-2|awk '{if($1=="!!")print}'` ]];then
echo The $username user is normal
 if [[ -n `cat /etc/shadow 2>/dev/null|grep -w "$username"|awk -F":" '{print$4}'` ]];then
 PASS_MIN_DAYS=`cat /etc/shadow 2>/dev/null|grep -w "$username"|awk -F":" '{print$4}'`
 else
 PASS_MIN_DAYS=null
 fi
 if [[ -n `cat /etc/shadow 2>/dev/null|grep -w "$username"|awk -F":" '{print$5}'` ]];then
 PASS_MAX_DAYS=`cat /etc/shadow 2>/dev/null|grep -w "$username"|awk -F":" '{print$5}'`
 else
 PASS_MAX_DAYS=null
 fi
 echo "USER_NAME=$username" "PASS_MIN_DAYS=$PASS_MIN_DAYS"  "PASS_MAX_DAYS=$PASS_MAX_DAYS"
 unset username PASS_MIN_DAYS PASS_MAX_DAYS
else
echo "The $username user has been disabled"
fi
else
echo "The $username user has been disabled"
fi
else
echo "The $username user has been disabled"
fi
 else
 echo "The $username user has been disabled"
 fi
done

返回结果:

在这里插入图片描述

/etc/shadow 内容详解:

在这里插入图片描述

文件中每行代表一个用户,同样使用 “:” 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。

每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

检查点:

检查点[1]:用户当前密码最短生存期
实际值:
0
0
180
运算符:大于等于
标准值:
1

检查点[2]:用户当前密码最长生存期
实际值:
99999
99999
90
运算符:小于等于
标准值:
180

加固方案:

参考配置操作
    1、执行备份
      #cp /etc/shadow /etc/shadow.bak
    2、使密码策略作用于相应用户:
      #chage 用户(例如#chage root)

在这里插入图片描述

三、账号管理

3.1 检查项—禁止存在UID相同的用户

判定依据:

##### 检测方法-----1 #####
    1、查看是否有重复的uid
      #cat /etc/passwd |awk -F: '{print $1,$3}'|sort -t ' ' -k 2n|uniq -f1 -D
判定依据
    没有返回重复uid的用户则合规;否则不合规。
    
##### 检测方法(脚本)-----2 #####
#echo "result="`cat /etc/passwd|awk -F: '{print $1,$3}'|sort -t ' ' -k 2n|uniq -f1 -D|wc -l`

返回结果:

在这里插入图片描述

检查点:

检查点:UID相同的用户数
实际值:
0
运算符:等于
标准值:
0

加固方案:

参考配置操作(实际值不等于0情况)
1、修改用户uid
    #usermod -u 【uid】 【username】

3.1 检查项—禁止存在空密码的帐户

判定依据:

##### 检测方法-----1 #####
    执行以下命令查看系统中是否存在空口令账号
        #awk -F: '( $2 == "" ) { print $1 }' /etc/shadow
判定依据
    系统中口令为空的账号个数为0则合规,否则不合规。
    
##### 检测方法(脚本)-----2 #####
# echo "result="`awk -F: '( $2 == "" ) { print $1 }' /etc/shadow |wc -l`
    

返回结果:

在这里插入图片描述

检查点:

检查点:空口令账号个数。
实际值:
0
运算符:等于
标准值:
0

加固方案:

参考配置操作(实际值不等于0情况)
1、执行备份:
    #cp -p /etc/passwd /etc/passwd_bak
    #cp -p /etc/shadow /etc/shadow_bak
2、为帐户设置满足密码复杂度的密码:
    #passwd username

四、认证授权

4.1 检查项—登陆失败处理

判定依据:

##### 检测方法-----1 #####
   检测方法
    1、检查pam_tally版本
        #find / -name pam_tally*.so
      如果只显示 pam_tally.so 则查看 /etc/pam.d/system-auth 文件检查deny配置:
        #cat /etc/pam.d/system-auth
          auth required /lib/security/pam_tally.so onerr=fail no_magic_root
          account required /lib/security/pam_tally.so deny=5 no_magic_root reset
      如果只显示 pam_tally2.so 则查看 /etc/pam.d/system-auth 文件检查deny配置:
        #cat /etc/pam.d/system-auth
          auth required pam_tally2.so deny=5 even_deny_root_account audit
    2、查看/etc/login.defs文件,检查LOGIN_RETRIES和LOGIN_TIMEOUT配置:
        #cat /etc/login.defs
          LOGIN_RETRIES  5
          LOGIN_TIMEOUT 60
判定依据
    1/etc/pam.d/system-auth文件配置:deny=5
    2/etc/login.defs文件配置:LOGIN_RETRIES 5
    3/etc/login.defs文件配置:LOGIN_TIMEOUT 60
    条件1满足或条件2和条件3同时满足则合规;否则不合规。


##### 检测方法(脚本)-----2 #####
if [[ -n `ls  /lib*/security/pam_tally.so 2>/dev/null` ]];then
cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally.so"|grep -v "\s*#"
 if [[ -n `cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally.so"|grep -v "\s*#"|head -n1|egrep "deny=\w+"` ]];then
 echo "result1="`cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally.so"|grep -v "\s*#"|head -n1|awk -F"deny=" '{print$2}'|awk '{print$1}'`
 else
 echo "result1=No configuration"
 fi
 if [[ -n `cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally.so"|grep -v "\s*#"|head -n1|egrep "even_deny_root_account|even_deny_root"` ]];then
 echo "result2=yes"
 else
echo "result2=no"
 fi
elif [[ -n `ls  /lib*/security/pam_tally2.so 2>/dev/null` ]];then
 cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally2.so"|grep -v "\s*#"
 if [[ -n `cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally2.so"|grep -v "\s*#"|head -n1|egrep "deny=\w+"` ]];then
 echo "result1="`cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally2.so"|grep -v "^\s*#"|head -n1|awk -F"deny=" '{print$2}'|awk '{print$1}'`
 else
echo "result1=No configuration"
 fi
 if [[ -n `cat /etc/pam.d/system-auth 2>/dev/null|egrep "auth[[:space:]]*required[[:space:]]*\S*pam_tally2.so"|grep -v "\s*#"|head -n1|egrep "even_deny_root_account|even_deny_root"` ]];then
 echo "result2=yes"
 else
echo "result2=no"
 fi
else
 echo "result=pam_tally not found"
fi
if [[ -n `cat /etc/login.defs|grep -v "^[[:space:]]*#"|grep -w LOGIN_RETRIES` ]];then
echo "result3="`cat /etc/login.defs|grep -v "^[[:space:]]*#"|grep -w LOGIN_RETRIES|awk '{print$2}'`
else
 echo "result3=No configuration"
fi
if [[ -n `cat /etc/login.defs|grep -v "^[[:space:]]*#"|grep -w LOGIN_TIMEOUT` ]];then
echo "result4="`cat /etc/login.defs|grep -v "^[[:space:]]*#"|grep -w LOGIN_TIMEOUT|awk '{print$2}'`
else
 echo "result4=No configuration"
fi

返回结果:

在这里插入图片描述

检查点:

检查点[1]:连续登录失败次数
实际值:
No configuration
运算符:小于等于
标准值:
5

检查点[2]:LOGIN_RETRIES
实际值:
No configuration
运算符:等于
标准值:
5

检查点[3]:LOGIN_TIMEOUT
实际值:
No configuration
运算符:等于
标准值:
60

加固方案:

参考配置操作
    1、检查pam_tally版本
        #find / -name pam_tally*.so
      如果只显示 pam_tally.so 则编辑 /etc/pam.d/system-auth 文件,添加以下类似配置:
        #vi /etc/pam.d/system-auth
          auth required /lib/security/pam_tally.so onerr=fail no_magic_root
          account required /lib/security/pam_tally.so deny=5 no_magic_root reset
      保存退出
      
      如果只显示 pam_tally2.so 则编辑 /etc/pam.d/system-auth 文件,添加以下类似配置:
        #vi /etc/pam.d/system-auth
          auth required pam_tally2.so deny=5 unlock_time=180 even_deny_root audit
      保存退出
      
    2、执行备份
        #cp /etc/login.defs /etc/login.defs.bak
      编辑 /etc/login.defs 文件
        #vi /etc/login.defs
      添加以下类似配置:
        LOGIN_RETRIES  5
        LOGIN_TIMEOUT 60
      保存退出

五、文件权限

5.1 检查项—检查相关日志文件权限

判定依据:

##### 检测方法-----1 #####
    1、查看日志配置
      Redhat/Centos 5默认进程为syslog
        #cat /etc/syslog.conf
      Redhat/Centos 6/7默认日志进程为rsyslog
        #cat /etc/rsyslog.conf
    2、查看日志文件权限,例如:
      #ls -l /var/log/messages
判定依据
    日志文件other用户没有写权限则合规;否则不合规。

##### 检测方法(脚本)-----2 #####
if [[ -n `ps -ef|egrep -w "syslogd|rsyslogd"|grep -v grep` ]];then
echo "result=Log service is running"
 function venus (){
 if [ -f $1 ];then
 for Log_File in `cat $1|grep -v "^[[:space:]]*#"|egrep  "^[^\$]"|grep "/"|awk '{print$2}'|sed 's/^-//g'`
 do
 if [ -f $Log_File ];then
ls -l $Log_File
echo "result1="`ls -l $Log_File|egrep "^-[r-][w-][x-][r-][w-]-[r-]w-"|wc -l`
 else
 echo "The $Log_File file not found"
 fi
 done
unset Log_File
 else
 echo "The $1 file not found"
 fi
 }
 Log_Type=`ps -ef|egrep -w "syslogd|rsyslogd"|grep -v grep|awk '{print$8}'|awk -F"/" '{for(i=1;i<=NF;i++)if($i~/syslog/)print$i}'`
 echo "Log_Type=$Log_Type"
 case $Log_Type in
 syslogd)
 Log_Conf="/etc/syslog.conf"
venus "$Log_Conf"
 ;;
 rsyslogd)
 Log_Conf="/etc/rsyslog.conf"
venus "$Log_Conf"
 ;;
 *)
 echo "The Log_Type not found"
 ;;
 esac
 unset Log_Type Log_Conf
else
 echo "result=Log service not running"
 ls -l $(find /var/log/ -type f)
 echo "result1="`ls -l $(find /var/log/ -type f)|egrep "^-[r-][w-][-x][r-][w-]-[r-]w-"|wc -l`
fi

检查点:

检查点:检查other用户是否具备写权限:0代表不具备即合规,1代表具备即不合规。
实际值:
0
0
0
0
0
0
0
运算符:等于
标准值:
0

返回结果:
在这里插入图片描述

加固方案:

参考配置操作(与标准值:0不符合时)
    1、更改日志文件权限
	#chmod 640 [LogFile]

如:

5.2 检查项—日志配置文件权限

常见的权限表示形式有:
-rw------- (600) 只有拥有者有读写权限。
-rw-r–r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx–x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。

判定依据:

##### 检测方法-----1 #####
    查看日志配置文件权限
      #ls -l /etc/syslog.conf(syslog)
      #ls -l /etc/rsyslog.conf(rsyslog)
判定依据
    配置文件权限低于644则合规;否则不合规。
    
##### 检测方法(脚本)-----2 #####
if [[ -f /etc/rsyslog.conf ]];then
ls -l /etc/rsyslog.conf
 echo "result="`ls -l /etc/rsyslog.conf|awk '{print$1}'|sed "s/\.//g"|cut -b 2-|egrep -v "[r-][w-]-[r-]--[r-]--"|wc -l`
elif [[ -f /etc/syslog.conf ]];then
 ls -l /etc/syslog.conf
 echo "result="`ls -l /etc/syslog.conf|awk '{print$1}'|sed "s/\.//g"|cut -b 2-|egrep -v "[r-][w-]-[r-]--[r-]--"|wc -l`
else
 echo "The rsyslog.conf file not found"
fi

检查点:

检查点:查看/etc/rsyslog.conf文件权限是否低于6440合规,1不合规)
实际值:
0
运算符:等于
标准值:
0

返回结果:
在这里插入图片描述

加固方案:

参考配置操作(实际值与标准值不符合时)
    更改配置文件权限
      #chmod 644 /etc/syslog.conf
      #chmod 644 /etc/rsyslog.conf

5.3 检查项—禁止共享文件和目录

判定依据:

##### 检测方法-----1 #####
    1、查看NFS服务是否开启
      #ps -ef|grep nfs
    2、如果NFS服务开启,查看是否配置共享文件和目录
      #exportfs
      #cat /etc/exports
判定依据
    1、NFS服务关闭
    2、NFS服务开启,但没有发现共享文件和目录
    12满足其一则合规;否则不合规。
    
##### 检测方法(脚本)-----2 #####

检查点:

检查点:检查是否共享文件和目录
实际值:
Discovering Shared Content
运算符:存在
标准值:
No sharing was found
nfs not running

返回结果:

在这里插入图片描述

加固方案:

参考配置操作(实际值与标准值不符合时)
    1、如果用不到NFS服务,请关闭
      #/etc/init.d/nfs stop
      禁止自启
      #chkconfig nfs off
    2、删除共享内容
      #mv /etc/exports /etc/exports.bak
      重启NFS服务
      #/etc/init.d/nfs restart

六、日志审计

6.1 检查项—开启日志服务并配置记录内容

判定依据:

##### 检测方法-----1 #####

    1、查看日志服务是否开启
      #ps -ef|grep syslog(syslog)
	  #ps -ef|grep rsyslog(rsyslog)
    2、查看/etc/syslog.conf文件
	  #cat /etc/syslog.conf(syslog)
      #cat /etc/rsyslog.conf(rsyslog)
	  检查日志配置:
        kern.warning;*.err;authpriv.none    
        *.info;mail.none;authpriv.none;cron.none    
        *.emerg    
        local7.*    *.*  
判定依据
    以上条件满足则合规;否则不合规。
    
##### 检测方法(脚本)-----2 #####
ps -ef|awk '{if($8~"syslog")print}'
if [[ -n `ps -ef|awk '{if($8~"syslog")print}'|egrep -w "syslogd|rsyslogd"` ]];then
echo "result=Log service is running"
 function venus(){
 echo conf_file=$1
 if [ -f $1 ];then
 cat $1 |grep -v "^[[:space:]]*#"|egrep "\*\.\*[[:space:]]+@\S+"
if [[ -n `cat $1 |grep -v "^[[:space:]]*#"|egrep "\*\.\*[[:space:]]+@\S+"` ]];then
echo "result0=yes"
else
echo "result0=no"
 if [[ -n `cat $1 |grep -v "^[[:space:]]*#"|egrep "kern\.warning;\*\.err;authpriv\.none[[:space:]]+@"` ]];then
echo "result1=yes"
 else
 echo "result1=no"
 fi
if [[ -n `cat $1 |grep -v "^[[:space:]]*#"|egrep "\*\.info;mail\.none;authpriv\.none;cron\.none[[:space:]]+@"` ]];then
echo "result2=yes"
 else
 echo "result2=no"
 fi
if [[ -n `cat $1 |grep -v "^[[:space:]]*#"|egrep "\*\.emerg[[:space:]]+@"` ]];then
echo "result3=yes"
 else
 echo "result3=no"
 fi
if [[ -n `cat $1 |grep -v "^[[:space:]]*#"|egrep "local7\.\*[[:space:]]+@"` ]];then
echo "result4=yes"
 else
 echo "result4=no"
 fi
 fi
 else
 echo "result=conf_file not found"
 fi
 }
 syslog_type=`ps -ef|awk '{if($8~"syslog")print$8}'|awk -F"/" '{for(i=1;i<=NF;i++)if($i~/syslog/)print$i}'|egrep -w "syslogd|rsyslogd"`
 echo syslog_type=$syslog_type
 case $syslog_type in
 syslogd)
 conf_file="/etc/syslog.conf"
 venus "$conf_file"
 ;;
 rsyslogd)
 conf_file="/etc/rsyslog.conf"
 venus "$conf_file"
 ;;
 *)
 echo "syslog_type not found"
 esac
 unset syslog_type conf_file ip_address
else
 echo "result=Log service not running"
fi

返回结果:
在这里插入图片描述

检查点:

检查点[1]:kern.warning;*.err;authpriv.none    
实际值:
no
运算符:等于
标准值:
yes

检查点[2]:*.info;mail.none;authpriv.none;cron.none    
实际值:
no
运算符:等于
标准值:
yes

检查点[3]:*.emerg    
实际值:
no
运算符:等于
标准值:
yes

检查点[4]:local7.*    
实际值:
no
运算符:等于
标准值:
yes

检查点[5]:*.* 
实际值:
no
运算符:等于
标准值:
yes

检查点[6]:日志服务开启
实际值:
Log service is running
运算符:等于
标准值:
Log service is running

加固方案:

参考配置操作
    1、执行备份
      #cp /etc/syslog.conf /etc/syslog.conf.bak(syslog)
	  #cp /etc/rsyslog.conf /etc/rsyslog.conf.bak(rsyslog)
    2、编辑/etc/rsyslog.conf文件
      #vi /etc/syslog.conf(syslog)
      #vi /etc/rsyslog.conf(rsyslog)
      添加内容(存在则修改):
        kern.warning;*.err;authpriv.none    
        *.info;mail.none;authpriv.none;cron.none    
        *.emerg    
        local7.*    *.*  
      保存退出
    3、开启日志服务
    # systemctl start rsyslog
    # systemctl start syslog

6.2 检查项—日志至少保留180天

判定依据:

##### 检测方法-----1 #####

    1、查看/etc/logrotate.conf文件
    # cat /etc/logrotate.conf
    
# see "man logrotate" for details  //可以查看帮助文档
# rotate log files weekly
weekly                       //设置每周转储一次(daily、weekly、monthly当然可以使用这些参数每天、星期,月 )
# keep 4 weeks worth of backlogs
rotate 4                      //最多转储4次
# create new (empty) log files after rotating old ones
create                       //当转储后文件不存在时创建它
# uncomment this if you want your log files compressed
# compress               //通过gzip压缩方式转储(nocompress可以不压缩)
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d   //其他日志文件的转储方式配置文件,包含在该目录下
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {              //设置/var/log/wtmp日志文件的转储参数
    monthly                    //每月转储
    create 0664 root utmp    //转储后文件不存在时创建它,文件所有者为root,所属组为utmp,对应的权限为0664
    minsize 1M               //日志文件最小轮替大小是 1MB         
    rotate 1                 //最多转储一次
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

2、weekly下的rotate 值 是否为 26,表示6个月;
指定文件的monthly下的rotate 值 是否为 6,表示6个月

判断依据
    两者都满足则合规,否则不合规
    

检查点:

检查点[1]:日志转储次数
实际值:
4

运算符:等于
标准值:
>=26

返回结果:
在这里插入图片描述

加固方案:

参考配置操作
   1、编辑/etc/logrotate.conf文件
    # vi /etc/logrotate.conf
    将全局的weekly下的rotate 4 改为rotate 26,表示6个月,也就是半年的时间,因为一个月大致4周,半年大概有26周,180/7= 25周余5天,所以设置成26即可。
    
   2、将指定文件的monthly下的rotate 1 改为rotate 6,表示6个月。

如:

  /var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 6
   }
    3、开启日志服务
    # systemctl start rsyslog
    # systemctl start syslog

七、网络通信

7.1 检查项—限制终端登录范围

判定依据:

##### 检测方法-----1 #####

    查看/etc/hosts.allow和/etc/hosts.deny两个文件中是否设定了IP范围限制:
        #cat /etc/hosts.allow
        #cat /etc/hosts.deny
判定依据
    1/etc/hosts.allow中设置了允许访问的IP地址范围。
    2/etc/hosts.deny中设置了拒绝所有远程访问。
    两者同时满足则合规,否则不合规。
    
##### 检测方法(脚本)-----2 #####
if [[ -n `cat /etc/hosts.allow 2>/dev/null|grep -v "^#"|grep -v "^$"|egrep -i "sshd|telnet|all"` ]];then
echo "result1=yes"
else
 echo "result1=no"
fi
if [[ -n `cat /etc/hosts.deny 2>/dev/null|grep -v "^#"|grep -v "^$"|egrep -i "all:[[:space:]]*all"` ]];then
echo "result2=yes"
else
 echo "result2=no"
fi


返回结果:
在这里插入图片描述

检查点:

检查点[1]:检查是否设置允许远程访问的ip地址
实际值:
no
运算符:等于
标准值:
yes

检查点[2]:检查是否设置拒绝所有远程访问
实际值:
no
运算符:等于
标准值:
yes

加固方案:

参考配置操作
    1、执行备份:
      #cp -p /etc/hosts.allow /etc/hosts.allow.bak
      #cp -p /etc/hosts.deny /etc/hosts.deny.bak
    2、编辑/etc/hosts.allow文件,增加一行 service: 允许访问的IP(service为服务,例如sshd),举例如下:all:192.168.4.44:allow    #允许单个IP访问所有服务进程
      sshd:192.168.1.*:allow    #允许192.168.1.0的整个网段访问SSH服务进程
    #编辑文件/etc/hosts.deny增加一行(deny优先级高于allow)
      all:all    #拒绝一切远程访问配合文件hosts.allow使用。
    注:以上内容仅供参考,请根据实际网段和需求进行实施。

八、其他配置

8.1 检查项—开启SElinux功能

判定依据:

##### 检测方法-----1 ##### 
    1、查看/etc/selinux/config配置文件是否启用了SElinux
        #cat /etc/selinux/config
    2、查看当前SElinux状态是否为启用
        #/usr/sbin/sestatus
判定依据
    条件1/etc/selinux/config文件中SELINUX参数配置为enforcing
    条件2、当前SElinux状态为  enabled
    以上两个条件都满足则合规,否则不合规。
    
 ##### 检测方法(脚本)-----2 #####
if [ -f /etc/selinux/config ];then
cat /etc/selinux/config|egrep -v "^\s{0,}#|^$"
 if [ -n  `cat /etc/selinux/config|egrep -v "^\s{0,}#|^$"|grep "SELINUX\b="|awk -F= '{print$2}'|egrep "enforcing|ENFORCING"` ];then
 /usr/sbin/sestatus 2>/dev/null
 else
echo "The /etc/selinux/config file does not have SELinux enabled"
 fi
else
 echo "The /etc/selinux/config file was not found"
fi

返回结果:

在这里插入图片描述

检查点:

检查点[1]:检查/etc/selinux/config文件SELINUX配置
实际值:
disabled
运算符:部分存在
标准值:
enforcing
ENFORCING

检查点[2]:查看当前SElinux状态
实际值:
disabled
运算符:等于
标准值:
enabled

加固方案:

参考配置操作(实际值不符合检查点时)
    1、文件备份
        #cp /etc/selinux/config /etc/selinux/config_$(date "+%Y%m%d%H%M%S")
    2、编辑文件,启用SELINUX功能
        #vi  /etc/selinux/config 
          SELINUX=enforcing     #启用SElinux功能
          :wq!         #保存退出 
    3、重启操作系统生效
        #reboot
    补充:SElinux开启后,可通过chcon命令修改对象(文件)的安全上下文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytroch 模型权重初始化

目录 1 概念 2 权值初始化方法 2.1 常数初始化 2.2 均匀分布初始化 2.3 正态分布初始化 2.4 Xavier 均匀分布 2.5 Xavier 正态分布 2.6 kaiming 均匀分布 2.7 kaiming 正态分布 2.8 单位矩阵初始化 2.9 正交初始化 2.10 稀疏初始化 2.11 狄拉克δ函数初始化 3 py…

STC15通过内部BandGap电压值测量ADC外部输入电压

STC15通过内部BandGap参考电压值测量ADC通道外部输入电压 📜内部 BandGap参考电压值获取方式: 🎬通过VOFA图形化显示ADC值 🔧vofa+工具下载地址:https://www.vofa.plus/🌿验证对象:IAP15F2K61S2🌿时钟频率:11.0592MHz🌿波特率:115200🔖在通过STC-ISP烧录程序…

XSS攻击以及java应对措施

文章目录 一. XSS攻击介绍1. 前端安全2. xss攻击简介3. xss的攻击方式 二. java应对xss攻击的解决方案1. 强制修改html敏感标签内容2. 利用过滤器过滤非法html标签 一. XSS攻击介绍 1. 前端安全 随着互联网的高速发展&#xff0c;信息安全问题已经成为企业最为关注的焦点之一…

大脑的故事

婴⼉的神经元是相互独⽴的、未连接的。在⼈⽣的头两年&#xff0c; 随着⼤脑细胞接收感觉信息&#xff0c;它们异常迅速地连接起来。 每⼀秒就有多达 200万个新连接&#xff08;突触&#xff09;在婴⼉的⼤脑⾥形成。两岁时&#xff0c;⼩孩⼦拥有超过 100万亿个突触&#xff…

版本发布 | 科东软件Intewell-Win V2.1.0 release版本正式发布

Intewell是由科东软件自主研发的工业嵌入式实时操作系统&#xff0c;具有高实时&#xff0c;确定性、高安全、高可靠、虚拟化等特点。Intewell系统源自于1990年诞生的“道”操作系统&#xff0c;至今已有30多年历史&#xff0c;已在多种严苛环境下运行检验&#xff0c;广泛商用…

springboot+java超市收银管理系统idea

考虑到实际生活中在超市 POS 收银管理方面的需要以及对该系统认真的分析&#xff0c;将系统权限按管理员和员工这两类涉及用户划分。 Spring Boot 是 Spring 家族中的一个全新的框架&#xff0c;它用来简化Spring应用程序的创建和开发过程。也可以说 Spring Boot 能简化我们之…

mmFormer:用于脑肿瘤分割的不完全多模态学习的多模态医学Transformer

文章目录 mmFormer: Multimodal Medical Transformer for Incomplete Multimodal Learning of Brain Tumor Segmentation摘要本文方法Hybrid Modality-Specific EncoderModality-Correlated EncoderConvolutional DecoderAuxiliary Regularizer 实验结果 mmFormer: Multimodal …

Kali-linux使用假冒令牌

使用假冒令牌可以假冒一个网络中的另一个用户进行各种操作&#xff0c;如提升用户权限、创建用户和组等。令牌包括登录会话的安全信息&#xff0c;如用户身份识别、用户组和用户权限。当一个用户登录Windows系统时&#xff0c;它被给定一个访问令牌作为它认证会话的一部分。例如…

师从英国两院院士|生物医学科研人员获CSC资助赴剑桥大学访学

L老师拟申报CSC公派访问学者项目&#xff0c;希望到欧洲TOP学校&#xff0c;师从知名教授&#xff0c;在自己的研究基础上取得进一步的进展和突破。最终我们获得世界名校剑桥大学的邀请函&#xff0c;导师是英国皇家科学学会及英国医学科学院两院院士&#xff0c;凭借这份硬气十…

【SAP Abap】X-DOC:SE18/19 - SAP第四代增强概念理解

【SAP Abap】X-DOC&#xff1a;SE18/19 - SAP第四代增强概念理解 1、Tcode2、概念3、增强选项类型4、增强实现类型5、增强操作方式6、增强选项与增强实现关系7、增强实施建议 1、Tcode SE18&#xff1a;Business Add-Ins: Definitions&#xff08;增强点定义/查看&#xff09;…

云平台电子班牌系统源码

越来越多的教育单位加入了数字化校园和智慧校园建设行列。在不断探究、建设和实施的过程中&#xff0c;建立强大的、高扩展性的智慧教育管理平台被众多学校和教育单位所认同。智慧班牌是电子班牌信息发布系统的数据呈现端&#xff0c;也是智慧平台数据的采集工具之一。通过智慧…

EtherCAT运动控制器在数控加工手轮随动中的应用之C++

本文以正运动技术具备专用手轮接口的运动控制器ZMC408CE为例&#xff0c;介绍手轮、手轮的作用及原理、控制器手轮接口接线以及手轮程序配置。 上节讲解了使用正运动basic语言进行手轮应用配置&#xff0c;本节主要讲解C调用API函数库接口实现手轮配置。 01 手轮作用及原理 …

第一个gin程序

一、下载并安装gin go get -u github.com/gin-gonic/gin二、第一个gin程序 package mainimport "github.com/gin-gonic/gin"func sayHello(c *gin.Context) {// 返回给客户端一个JSON格式的数据&#xff0c;其中HTTP状态码为200&#xff0c;表示处理成功c.JSON(200…

成功的产品经理,应该了解一定的开发知识

产品经理在互联网产品开发中扮演着协调和推动的重要角色。然而&#xff0c;由于产品经理没有直接的实际权力&#xff0c;与开发团队合作时可能会遇到各种挑战。当你给开发人员分配任务时&#xff0c;他们可能会找各种借口推脱工作。 在项目开发中&#xff0c;所有成员必须共同…

【C++】详解STL中的list及其与vector的比较

目录 一、list的介绍及其使用1、list的介绍2、list的使用2.1 list的构造2.2 list iterator的使用3、list的元素访问接口4、list的调节器6、list的迭代器失效 二、list的模拟实现及反向迭代器1、模拟实现list2、list的反向迭代器 三、list和vector的比较 一、list的介绍及其使用…

142. 环形链表 II Python

文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#x…

bug记录:遇到的tinycudann编译的N种错误

1. 编译成功&#xff0c;但是import tinycudann报错找不到DLL 编译成功&#xff0c;但是import tinycudann的时候&#xff0c;报错&#xff1a; 开始打断点&#xff0c;搜索电脑文件&#xff0c;发现_75_c.py应该是存在的&#xff0c;但就是读不到。 发现其所在的文件夹名称…

自定义组件间通信-2

目录 一、 父子组件间通信的3种方式 二、属性绑定&#xff0c;父-> 子 三、事件绑定&#xff0c;子-> 父 四、获取组件实例 一、 父子组件间通信的3种方式 属性绑定&#xff1a;用于父组件向子组件的指定属性设置设置数据&#xff0c;仅能设置JSON兼容的数据事件绑定&…

三分钟挖掘快速软件开发框架提高办公效率的秘诀

在科技日新月异的当今社会&#xff0c;学会利用快速软件开发框架&#xff0c;可以给企业带来更大的便利和市场价值。因为它拥有可视化设计、灵活简便、易操作、易上手等优势特点&#xff0c;在助推企业实现数字化转型的过程中有着举足轻重的作用。那么&#xff0c;快速软件开发…

自媒体品牌宣传策略注意哪些,是怎么种草的

众所周知&#xff0c;小红书平台有着极其强大的种草能力。不论新品牌孵化&#xff0c;还是大品牌扩张&#xff0c;都会将目光投注到这里&#xff0c;那么小红书的品牌宣传策略究竟是怎样的呢。 一、聚焦种草能力 前面已经提到了&#xff0c;小红书平台是一个以“种草”为特色的…