赞
踩
基线检查——安全基线配置核查(或检查)的简称,指为满足网络安全规范要求,服务器设备安全配置必需达到的最低安全标准,例如服务器上的账号、口令、日志、认证授权合规性配置等。
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、操作审计 ---你可以干什么。
本文从以下(口令策略…其他配置)七个方面进行介绍各项基线检查点,相应的判定依据、及加固方案。
判定依据:
##### 检测方法-----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时表示新密码中特殊字符出现最少次数。
判定依据:
##### 检测方法-----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保存退出
判定依据:
##### 检测方法-----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)
判定依据:
##### 检测方法-----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】
判定依据:
##### 检测方法-----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
判定依据:
##### 检测方法-----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 保存退出
判定依据:
##### 检测方法-----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]
如:
常见的权限表示形式有:
-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文件权限是否低于644(0合规,1不合规)
实际值:
0
运算符:等于
标准值:
0
返回结果:
加固方案:
参考配置操作(实际值与标准值不符合时)
更改配置文件权限
#chmod 644 /etc/syslog.conf
#chmod 644 /etc/rsyslog.conf
判定依据:
##### 检测方法-----1 #####
1、查看NFS服务是否开启
#ps -ef|grep nfs
2、如果NFS服务开启,查看是否配置共享文件和目录
#exportfs
#cat /etc/exports
判定依据
1、NFS服务关闭
2、NFS服务开启,但没有发现共享文件和目录
1和2满足其一则合规;否则不合规。
##### 检测方法(脚本)-----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
判定依据:
##### 检测方法-----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 @loghost *.info;mail.none;authpriv.none;cron.none @loghost *.emerg @loghost local7.* @loghost 或 *.* @loghost 判定依据 以上条件满足则合规;否则不合规。 ##### 检测方法(脚本)-----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 @loghost 实际值: no 运算符:等于 标准值: yes 检查点[2]:*.info;mail.none;authpriv.none;cron.none @loghost 实际值: no 运算符:等于 标准值: yes 检查点[3]:*.emerg @loghost 实际值: no 运算符:等于 标准值: yes 检查点[4]:local7.* @loghost 实际值: no 运算符:等于 标准值: yes 检查点[5]:*.* @loghost 实际值: 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 @loghost *.info;mail.none;authpriv.none;cron.none @loghost *.emerg @loghost local7.* @loghost 或 *.* @loghost 保存退出 3、开启日志服务 # systemctl start rsyslog # systemctl start syslog
判定依据:
##### 检测方法-----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
判定依据:
##### 检测方法-----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使用。
注:以上内容仅供参考,请根据实际网段和需求进行实施。
判定依据:
##### 检测方法-----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命令修改对象(文件)的安全上下文。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。