安全加固(Linux加固2)
-
1.用户默认umask值
- 修改启动脚本文件
/etc/profile
/etc/csh.login
/etc/csh.cshre
/etc/bashrc
- 在文件末尾加入
umask
值
- 修改启动脚本文件
-
2.检查是否配置有
sudo
权限sudo -v
- 如果系统已经配置了
sudo
权限,则该命令不会提示输入密码并返回成功。 - 如果系统未配置
sudo
权限,则该命令将提示错误消息。
- 如果系统已经配置了
-
3.检查根账户是否
改名
grep ^root: /etc/passwd
-
4.检查是否存在
UID为0
的其他账户- 检查哪些账户的UID为0
awk -F: '($3 == 0) { print $1 }' /etc/passwd
对/etc/passwd
文件进行逐行查找,以":"
为分隔符对于第三列($3)为0
的行,显示第一列的值(print 0$1)
,即查找所有UID
等于0
的账户
- 检查哪些账户的UID为0
-
5.检查是否有账户位于
高权限组
grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk “ {print $2} ”
awk -F: '$3>500{print $1}' /etc/passwd | xargs -I {} grep {} /etc/group
grep -v "/sbin/nologin" /etc/passwd | awk -F : ' {print $1}' | xargs -I {} grep {} /etc/group
-
6.检查
密码
生最长使用期限
- 查看
cat /etc/login.defs
PASS_MAX_DAYS
90 最长使用期限
- 查看
-
7.检查是否开启
密码复杂性
要求- 需要修改密码策略文件
vi /etc/security/pwquality.conf
dcredit、ucredit、lcredit 和 ocredit 都为1
,表示开启- 要禁用密码复杂性检查,请将
dcredit、ucredit、lcredit 和 ocredit
的值设置为 -1。 - 修改后需要使用
wq
退出然后systemctl restart systemd-logind.service
重新启动服务
- 要禁用密码复杂性检查,请将
- 需要修改密码策略文件
-
8.检查是否设置
强制密码历史
cat /etc/pam.d/system-auth
-
9.检查是否设置账户
登录锁定策略
- 目的:防止被连续试探密码,
降低爆破可能性
- 实施方法
- 修改
pam认证
文件/etc/pam.d/system-auth
/etc/pam.d/sshd
/etc/pam.d/login
- 添加
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60
- 修改
- 目的:防止被连续试探密码,
-
10.检查是否禁止
普通用户
使用su
切换根账户 -
目的:避免任何人使用su切换到root,减少提权风险
-
实施办法
- 修改su的配置文件
/etc/pam.d/su
auth sufficient /lib.security/pam_rootok.so
- 修改su的配置文件
-
如果需要su 切换,将用户加入到
wheel
组gpasswd -a username wheel
-
11.检查账户相关文件
权限
是否过大ls -l
查看相关文件权限sudo find / -type f -o -type d -name ".*" -prune -o -print
-
12.检查配置文件
权限
是否过大sudo find /etc -type f -name "*.conf" | xargs -I{} ls -lh {}
-
13.检查是否存在
高风险别名
指令:grep -i "alias" .bashrc .bash_profile /etc/profile
效果:
解释:rm -rf
,应该被认为是高风险别名。
-
在 Linux 系统中,可以通过检查
shell 配置文件
和环境变量
来确定是否存在高风险别名
。以下是一些可能存在高风险别名
的常见配置文件和环境变量:-
~/.bashrc
:这是 Bash shell 的启动脚本,它包含了用户定义的别名和其他设置。
-
~/.bash_profile
:这是 Bash shell 的主要配置文件,它通常会引用.bashrc
文件并包含一些系统级的设置。
-
/etc/profile
:这是系统级别的配置文件,它包含所有用户的 Bash shell 的默认设置。
-
-
14.检查是否存在
suid位
和sgid位
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;
-
15.检查是否正确记录
日志审核
vi /etc/rsyslog.conf
- 确认关键日志审计存在
-
16.检查是否配置
日志服务器
- 修改应用服务器日志配置文件
vi /etc/rsyslog.conf
- 开启接收日志功能
$ModLoad imudp
$UDPServerRun 514
$template Remote, "/var/log/%$YEAR%-%$MONTH%-%$DAV%/%fromhost-ip%.log"
` 远程日志路径
:fromhost-ip, !isequal, “127.0.0.1°?Remote
本地日志不存储远程服务
- 修改应用服务器日志配置文件
-
17.检查
日志文件权限
是否过大 -
ls -la /var/log/
-
18.检查重要
文件底层属性
是否加固
lsattr /etc/resolv.conf
-
19.检查是否
启用telnet
进行远程管理
-
使用命令检查
rpm -qa | grep telnet
- 显示状态
systemctl status telnet.socket
-
20.检查
sshd服务
是否使用默认端口
- 修改配置文件
vi /etc/ssh/sshd_config
-
禁止root登录,修改默认端口,开启v2版本
PermitRootLogin no
Port 20202
Protocol 2
-
重启服务
systemctl restart sshd
-
21.检查
sshd服务
是否禁用根账户登录
PermitRootLogin yes
表示没有禁用
-
22.检查
sshd
是否配合白名单限制登录
- 检查是否包含
AllowUsers
或AllowGroups
参数。- 包含则表示配置了白名单限制登录
- 检查是否包含
-
23.检查
hosts文件
是否写入常用解析
cat /etc/hosts | egrep -v "^#|^$|localhost" | awk '{print $2}' | sort | uniq
没有输出内容
-
24.检查是否对
syn flood
攻击进行防御
-
目的:缓解
syn flood
攻击 -
实施方法:
- 修改系统控制文件
- `vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
- 配置生效
sysctl -p
- 修改系统控制文件
-
25.检查是否
响应ICMP协议请求
-
sudo sysctl net.ipv4.icmp_echo_ignore_all
- 检测
net.ipv4.icmp_echo_ignore_all = 0
- 如果输出结果为
“net.ipv4.icmp_echo_ignore_all = 1”
,则表示系统已配置为忽略所有ICMP回声请求
,即不响应任何ping请求
。如果输出结果为“net.ipv4.icmp_echo_ignore_all = 0”
,则表示系统未配置为忽略所有ICMP回声请求
,即响应所有ping请求
。
- 检测
-
目的:
对ICMP请求
作出响应,避免泄露信息
-
修改
网络策略布尔值
echo 1>/proc/sys/net/ipv3/icmp_echo_ignore_all
-
26.检查是否开启
无源路由转发
-
目的:
- 防止被无源数据包利用
-
实施方法
- 检查是否开启了路由功能
sysctl -n net.ipv4.conf.all.accept_source_route
echo 0>/proc/sys/net/ipv4/conf/all/accept_source_route
- 检查是否开启了路由功能
-
27.检查
半连接上限是否过高
- 目的:修改半连接上线,缓解
syn flood
攻击 - 实施方法:
- 查询当前半连接上限:
sysctl net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 4096
- 查询当前半连接上限:
- 目的:修改半连接上线,缓解
-
28.检查
vsftpd服务
是否启用白名单限制
- 判断字段
write_enable
是否启用 write_enable=YES
local_umask=022
anon_umask=022
- 判断字段
-
29.检查
vsftpd服务
是否关闭匿名登录
1.systemctl status vsftpd
2.grep anonymous_enable /etc/vsftpd/vsftpd.conf
·如果输出结果为"anonymous_enable=YES"
,则表示该服务器允许匿名登录。
-
30.检查
vsftpd
是否配置上传文件的默认权限
- 查看是否包含
file_open_mode=0666
字段 - 加入
local_umask=077
字段- 设置掩码为
077
,这意味着新创建的文件将只有vsftpd
用户具有读取
和写入
权限。
- 设置掩码为
- 查看是否包含
-
31.检查
vsftpd
是否配置低风险banner信息
-
目的:防止泄露服务信息
-
实施方法
- 检查主配置文件
/etc/vsftpd.conf
是否存在如下内容 ftpd_banner=” Authorized users only. All activity may be monitored and reported.”
可以确认没配置
- 检查主配置文件
-
32.检查
nfs组件
是否存在,且进程启动
-
目的:防止被外挂文件系统,导致入侵
-
实施方法
- 检查是否存在敏感进程
ps aux | grep -E "lockd|nfsd|statd|mountd"
- 检查是否存在敏感进程
-
检查
关闭NFS
相关服务
systemctl list-unit-files | grep nfs
systemctl disable nfs-client.target
- 可以看到组件已经存在,且
进程启动
。
-
33.检查是否安装了
多余风险软件
rpm -qa
-
34.检查是否
关闭登录系统时的banner
信息 -
cat /etc/issue
检查系统banner信息
-
35.检查是否设置
登录空闲超时
-
未在
/etc/profile
中设置- TMOUT 字段
- readonly TMOUT
- export TMOUT
-
36.检查是否保留了
过长的命令历史记录
-
目的:降低之前操作被窃取的风险
-
实施方法
- 修改
/etc/profile
vi /etc/profile
- 修改信息
HISTSIZE=50
- 生效
source /etc/profile
- 修改
-
37.检查
grub菜单
停留时间是否过长 -
目的:防止在
grup
菜单对引导过程进行修改 -
实施方法
- 修改
grup
配置文件vi /boot/grup2/grup.cfg
- 修改等时
set timeout=0
- 修改
-
38.检查是否存在
ctrl+atl+del
重启快捷键- 默认是
有的
,全部都注释掉
,防止重启
vi /usr/lib/systemd/system/ctrl-alt-del.target
- 默认是