为什么要做安全加固?
防患于未然!
基线检查
- 基线
概念:一般指配置和管理系统的详细描述,或者说是最低的安全要求,包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等
意义:意义在于通过在系统生命周期不同阶段对目标系统展开各类安全检查,找出不符合基线定义的安全配置项并选择和实施安全措施来控制安全风险,并通过对历史数据的分析获得系统安全状态和变化趋势
安全加固
身份鉴别加固
主要针对SSH密码暴力破解的攻击方式
- 用户管理
方法:删除多余、无用账号(特别是无用账号是无密码或者弱密码的情况)
cat /etc/passwd #放用户信息
cat /etc/shadow #影子文件存放密码
userdel xxx #删除用户
详细命令可以见Linux用户和文件管理
- 密码策略
1)检查空口令
有些用户没有密码,需要检查!
awk -F: '($2 == ""){print $1}' /etc/shadow #检查到如果用户密码不存在,
passwd xxx(用户名)
2)口令有效期
如果密码的有效时间是系统默认的99999(永久有效),那么黑客迟早会爆破出来,因此,我们需要设置口令有效期
vim /etc/login.defs
PASS_MAX_DAYS: 密码最长有效期
PASS_MIN_DAYS: 密码最短有效期
PASS_MIN_LEN: 密码最小长度
PASS_WARN_AGE: 在口令失效前多少天开始通知用户更改密码
3)口令强度
采用如下命令打开文件:
vim /etc/pam.d/system-auth
格式:
password requisite pam_cracklib.so retry=3 difok=2 minlen=8 lcredit=-1 dcredit=-1
单词 | 含义 |
---|---|
retry | 重试多少次后返回密码修改错误 |
difok | 本次密码与上次密码至少不同字符数 |
minlen | 密码最小长度,此配置优先于login.defs中的PASS_MAX_DAYS |
ucredit | 最少大写字母 |
lcredit | 最少小写字母 |
ocredit | 最少的字符数量 |
dcredit | 最少数字 |
生成高强度密码:
pwmake 数字
密码强度检测
echo "密码"|cracklib-check
4) 登陆失败策略
密码输入错误次数过多时,应该要禁用账户,否则密码容易被破译
采用如下命令打开文件
vim /etc/pam.d/sshd
格式:
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=1800
单词 | 含义 |
---|---|
even_deny_root | 也限制root用户 |
deny | 最大次数,超过则锁定该用户 |
unlock_time | 设定普通用户锁定后,多少时间后解锁,单位是秒 |
root_unlock_time | 设定root用户锁定后,多少时间后解锁,单位是秒 |
解锁
作为用户,忘记密码登录不上服务器怎么办?
pam_tally2 --user=root --reset
访问控制加固
IP要固定,不然有时候没有意义(例如黑白名单)
- IP是否允许访问
1)允许访问的IP
其实就是设置了能够访问服务器的白名单
如何设置:
vim /etc/hosts.allow
在文件中修改:
sshd:192.168.142.*:allow #表示192.168.142.* ip段都能ssh访问
sshd:all:allow #表示允许所有ip 的ssh访问
sshd:192.168.142.74:allow #表示允许192.168.142.74ssh访问
修改完成后,需要重启SSH服务
service sshd restart
2)防范端口扫描
黑客会扫描端口来收集信息,因此,需要防范端口扫描
- 关闭不必要的端口服务
eg.
systemctl list-unit-files | grep enable #查看和字体有关的服务,关闭不需要的
systemctl stop xxx
systemctl disable xxx
- 修改默认端口号
vim /etc/ssh/sshd_config
- 防火墙策略
vim /etc/sysconfig/iptables #需要安装
-A INPUT-p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT
-A INPUT-p tcp --tcp-flags SYN,RST SYN,RST -j REJECT
-A INPUT-p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT
3)root权限控制
- 禁止root用户远程登录
修改配置
vim /etc/ssh/sshd_config
在里面修改
PermitRootLogin no
- 禁止其它用户用su切换用户
修改配置
vim /etc/pam.d/su
在里面修改
#只允许wheel组用户
auth sufficient pam_rootok.so
auth required pam_wheel.so group=wheel
- 禁止其它用户sudo提权
visudo
- 禁止SUID提权
SUID权限:让普通用户临时拥有该文件的属主的执行权限,SUID权限只能应用在二进制可执行文件(命令)上,而且SUID权限只能设置在属主位置上。
find / -user root -perm -4000 -print 2>/dev/null #找到所有有s权限的用户
chmod ugo-s xxx #去除xxx文件的s权限
安全审计加固
1)auditd审计
记录文件变化
配置文件:
/var/log/audit/audit.log
如果需要关注某个文件的变化,则需要修改配置文件的内容。
可以使用ausearch工具去搜索相关事件。
auditd官网教程
码农教程
CSDN教程
漏洞补丁加固
1)安装更新
yum check-update #列出可更新的软件清单
yum info updates #列出可更新的软件包详细信息
yum upgrade #升级指定软件
yum updateinfo list updates security #列出可用的安全补丁
yum update #升级系统版本和所有软件
yum --enablerepo=elrepo-kernel install kernel-lt -y #更新到最新内核(需要设置引导)
如何加固
参考资料里的清单以及脚本