linux安全基线

一、服务器

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

评估业务系统当前服务器安全状态,以发现是否存在漏洞和隐患。防止攻击者恶意攻击或访问。

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

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

2、基线检查范围

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

bash 复制代码
1、用户账号   ---唯一身份。
2、统一认证   ---你是谁。
3、授权管理   ---你有什么权限。
4、操作审计   ---你可以干什么。
查看操作系统
bash 复制代码
cat /etc/os-release
以下操作对统信系统不友好

3、口令策略

3.1、密码策略(密码复杂度)

检测方法(脚本)直接复制执行

bash 复制代码
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

返回结果:

不合规结果:

设置内容的结果:
检查点:

bash 复制代码
检查点[1]:密码长度最小值
实际值:根据要求写适当的数值
运算符:大于等于
标准值:8
检查点[2]:新密码中至少包含多少位数字
实际值:
Parameters are not configured
运算符:等于
标准值:-4
检查点[3]:新密码中至少包含多少位大写字母
实际值:根据要求写适当的数值
运算符:等于
标准值:-2
检查点[4]:新密码中至少包含多少位小写字母
实际值:根据要求写适当的数值
运算符:等于
标准值:-1
检查点[5]:新密码中至少包含多少位特殊字符
实际值:根据要求写适当的数值
运算符:等于
标准值:-1

#####参数说明:
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时表示新密码中特殊字符出现最少次数。

加固方案:

bash 复制代码
#####参考配置操作
  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=-1 lcredit=-1 dcredit=-1 ocredit=-1
:wq  保存退出
3.2、密码生存期

检测方法(脚本)直接复制执行

bash 复制代码
 cat /etc/login.defs 2>/dev/null|egrep -v "^[[:space:]]*#|^$"|egrep -w "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE"

返回结果:

未设置:

设置后:

bash 复制代码
检查点[1]:密码最短生存期(天)
实际值:1
运算符:大于等于
标准值:1
检查点[2]:密码最长生存期(天)
实际值:90
运算符:小于等于
标准值:180
检查点[3]:密码长度最小值(对root无效)
实际值:8
运算符:大于等于
标准值:8
检查点[4]:密码生存期到期前提醒(天)
实际值:28
运算符:等于
标准值:28

加固方案:

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

检测方法(脚本)

bash 复制代码
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

返回结果:

bash 复制代码
cat /etc/shadow 

返回结果:

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

每个字段的含义如下:

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

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

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

加固方案:

bash 复制代码
参考配置操作
    1、执行备份
      cp /etc/shadow /etc/shadow.bak
    2、使密码策略作用于相应用户:
      chage 用户(例如#chage root)
3.4、登陆失败处理

检测方法及加固

bash 复制代码
1、检查pam_tally版本
	find / -name pam_tally*.so
如果返回内容只显示 pam_tally.so 则查看 /etc/pam.d/system-auth 文件检查deny配置:
	cat /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 文件检查deny配置:
	cat /etc/pam.d/system-auth  ||  vi /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 ||  vi /etc/login.defs
   LOGIN_RETRIES  5    #登录失败允许重试次数,如果是-1,则禁用重试次数
   LOGIN_TIMEOUT 900   #超时时间,超过该时间自动终止登录

========= 检测方法(脚本)=========

bash 复制代码
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

执行上述命令返回结果:

bash 复制代码
检查点:
检查点[1]:连续登录失败次数
实际值:No configuration
运算符:小于等于
标准值:5
检查点[2]:LOGIN_RETRIES
实际值:5
运算符:等于
标准值:5
检查点[3]:LOGIN_TIMEOUT
实际值:900
运算符:等于
标准值:60
bash 复制代码
faillock命令查看锁定情况
faillock --user username --reset解锁操作

二、数据库

达梦数据

--超时15分钟自动退出,登录失败5次锁定,锁定时间30分钟

alter user "用户名" limit CONNECT_IDLE_TIME 15 FAILED_LOGIN_ATTEMPS 5 PASSWORD_LOCK_TIME 30;

--口令有效期90天

alter user "用户名" limit PASSWORD_LIFE_TIME 90;

--口令长度不小于9,至少包含一个大写字母,至少包含一个数字,至少包含一个特殊字符

alter user "用户名" password_policy 30;

未完待续。。。

相关推荐
Broken Arrows2 小时前
在Linux系统中,top命令的显示参数详解
linux·运维·服务器
档案宝档案管理2 小时前
档案宝:企业合同档案管理的“安全保险箱”与“效率加速器”
大数据·数据库·人工智能·安全·档案·档案管理
星释3 小时前
二级等保实战:MySQL安全加固
android·mysql·安全
闲人编程3 小时前
Python与区块链:如何用Web3.py与以太坊交互
python·安全·区块链·web3.py·以太坊·codecapsule
qq_401700413 小时前
I.MX6U 启动方式详解
linux
碎碎思4 小时前
FPGA新闻速览-从漏洞到突破:FPGA技术在安全、架构与量子领域
安全·fpga开发
code-vibe5 小时前
物理机 kali 改造笔记 (一)
linux·运维·服务器
小坏讲微服务5 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
老黄编程5 小时前
03-gpg(证书管理 )详细范例
linux·运维·ubuntu·数字证书