linux安全加固(非常详细)

news2025/6/7 16:25:40

安全加固方案原则

1.版本升级
对于系统和应用在使用过程中暴露的安全缺陷,系统或应用厂商会及时发布解决问题的升级补丁包。升级系统或应用版本,可有效解决旧版本存在的安全风险。

2.关闭端口服务
在不影响业务系统正常运行情况下,停止或禁用承载业务无关的服务和服务端口,可有效避免无关服务造成的安全风险。

3.修改配置项
操作系统、安全设备、数据库、中间件、第三方应用和业务系统可更改的配置中与安全相关的设置参数等信息,通过修改安全配置,可以为网络和应用提供必要的安全保护。

4.修改代码(可选)
修改代码一般由系统开发商完成,安全加固支持方仅提供加固建议及加固有效性验证。

5.主机和网络ACL策略
主机和网络ACL策略是一类临时安全加固方法。
ACL通常应用在系统的流量控制上,可通过实施ACL有效的部署网络出/入口策略,控制对内网资源的访问能力,来保障资源安全性。

6.部署设备防护(可选)
部署设备防护的安全加固方式一般由设备厂商完成。

安全加固测试

图片

加固方向

1.账号管理与认证授权

2.通信协议

3.补丁管理

4.服务进程与启动

5.banner与 自动注销

账号管理与认证授权⭐

为不通的管理员分配不通的账号

目的:根据不同用途设置不同账户账号,提高安全层级

# 创建多用途账号
useradd username
passwd username


# 修改目录权限
chmod 750 dir
chown user:group dir


# 普通账户使用特定授权命令
sudo ifconfig

修改sudo的提权应用

vim /etc/sudoers   或者 命令visudo 
testn   localhost=NOPASSWD:ALL,usr/sbin/useradd,/usr/sbin/ifconfig
testn   localhost=NOPASSWD:ALL,!/usr/sbin/ifconfig
# jerry可以在本地使用useradd命令
jerry localhost=/usr/sbin/useradd

# 注释
testn:用户名
localhost:主机名
NOPASSWD:ALL:sudo时不需要密码
!:不能执行什么命令
usr/sbin/useradd,/usr/sbin/ifconfig:多个命令用,隔开

检查高权限文件

过高的权限或在不应该时间段创建或修改的文件

find / -type f \( -perm -00007 \) -a -ctime -1 |xargs -I {} ls -lh {}
-ctime:属性变更
-mtime:内容修改
atime:被访问

删掉不需要的账号,修改默认账号shell环境

目的:删除系统不需要的默认账号、更改危险账号的默认shell变量,降低被利用的可能性

# 删除/锁定多余用户与组
userdel -r username
groupdel groupname
passwd -l username

# 修改程序账号的登录shell
usermod -s /sbin/nologin username

限制超级管理员远程登录

目的:限制具备超级权限的用户远程登录

1.vim /etc/ssh/sshd_config 
# 进制root用户远程登录
PermitRootLogin no


2.重启sshd服务
systemctl restart sshd

删除root以外UID为0的用户

目的:减少被越权使用的可能性

1.检查哪些账户的UID为0
awk -F: '($3 == 0) { print $1 }' /etc/passwd

2.删除账户,或编辑passwd与shadow文件
userdel -r username

安全日志

# 显示所有登录用户的信息
last

# 显示登录失败的用户信息
lastb

# 安全日志
cat /var/log/secure

不应存在位于高权组的账户

目的:检查是否有账号获取过高权限

# 检查哪些账户属于其他组

1.uid起始值:正常1000以后,特别关注少于1000
grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '{print $2}'


2.能登录系统用户的组id
awk -F: '$3>1000{print $1}' /etc/passwd |xargs -I {} grep {} /etc/group


3.能登录系统用户的用户id
grep -v "/sbin/nologin" /etc/passwd |awk -F : '{print $1}' | xargs -I {} grep {} /etc/group

缩短默认密码生存周期

目的:对于采用静态密码认证的设备,账户密码的生存周期不长于90天。

# 修改文件密码策略文件
vim /etc/login.defs 
PASS_MAX_DAYS 90    # 最长使用期限
PASS_MIN_DAYS 0     # 最短使用期限
PASS_MIN_LEN  8     # 密码最小长度
PASS_WARN_AGE 7     # 最长期限到期前7天提醒更改密码

设置密码强度策略

目的:规范使用高强度密码,延长被爆破的时间

# 修改pam认证文件
vim /etc/pam.d/system-auth
# 添加、修改内容
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8

# 注释
try_first_pass:修改密码前输入当前密码
local_users_only:本地用户
retry:重试次数
authtok_type:修改密码的提示内容
dcredit=-1:至少一个数字
lcredit=-1:至少一个小写字母
ucredit=-1:至少一个大写字母
ocredit=-1:至少一个特殊字符
minclass=3:至少三个字符(大小写字母,数字,特殊字符)
minlen=8:至少八位密码
remember=3:防止使用前三次内设置过的密码

centos7以后设置密码复杂性

文件位置 /etc/security/pwquality.conf 

命令:authconfig
authconfig --passminlen=8 --update        # 密码最短8位
authconfig --enablereqlower --update	  # 包含一个小写	
authconfig --enablerequpper --update	  # 包含一个大写
authconfig --enablereqdigit --update	  # 包含一个数字
authconfig --enablereqother --update		  # 包含一个字符

设置强制密码历史

目的:防止被社工字典破解

# 修改pam认证文件
vim /etc/pam.d/system-auth
# 添加、修改内容
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

设置账户锁定策略

目的:防止被连续试探密码,降低爆破可能性

vim /etc/pam.d/system-auth
# 加在注释文档后一行就行,连续6次失败,就拉黑
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60


# 查看登录失败次数
[root@bogon ~]# pam_tally2 --user hello
Login           Failures Latest failure     From
hello               6    05/31/23 10:36:23  pts/0


# 重置登录失败
pam_tally2 --user hello --reset

设置关键目录的权限

目的:在设备权限配置能力内,根据用户的企业需要,配置其所需的最小权限,以减少非法访问的可能性。

# 更改账户组文件的权限设置
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group


# 去除多余的写入操作,例如
chmod -R go-w /etc

修改umask值

目的:修改创建文件或目录时的默认权限,防止属于该组的其他用户级别组的用户修改该用户的文件。

# 修改启动脚本文件
/etc/profile
/etc/csh.login
/etc/csh.cshrc
/etc/bashrc

在文件末尾加入umask值
umask 027

限制硬件资源

目的:限制用户对系统资源的使用,减缓DDOS等攻击危害。

1.修改限制文件
vim /etc/security/limits.conf 
# 加入如下内容
*	soft	core	0
*	hard	core	0
*	hard	rss	    5000
*	hard	nproc	20
# *     soft   nproc    4096  # 所有的用户默认可以打开最大的进程数为 4096
# root  soft   nproc    unlimited # root 用户默认可以打开最大的进程数 无限制的。


2.修改pam的本地登录文件
vim /etc/pam.d/login
# 在文件末尾加入信息
session required /lib64/security/pam_limits.so


3.日常收集进程数使用
ps aux |grep httpd |wc -l

对用户使用ls、rm设置别名

目的:让ls随时看清文件属性,让rm需要确认后删除目标实施方法

1.修改当前用户的登录启动脚本
vim ~/.bashrc 
# 追加别名命令
alias ls="ls -alh"
alias rm="rm -i"

禁止任何人su至root账户

目的:避免任何人使用su切换到root,减少提权风险

1.修改su的配置文件
vim /etc/pam.d/su
auth	sufficient	/lib/security/pam_rootok.so
auth	required	/lib/security/pam_wheel.so group=wheel


2.如果需要su切换,将用户加入wheel组
usermod -g wheel luobo

去掉所有人SUID和SGID

目的:防止被利用提权

# 查找具有SUID和SGID的对象
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -1g {} \;

chmod ugo-s file

对开放目录设置粘滞位

目的:允许小规模开放目录,用户作为暂存目录使用

# 为/tmp目录添加粘滞位
chmod +t /tmp/


我们都知道,/tmp常被我们用来存放临时文件,是所有用户。但是我们不希望别的用户随随便便的就删除了自己的文件,于是便有了粘连位,它的作用便是让用户只能删除属于自己的文件。
也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。

启用日志记录功能,使用日志服务器

目的:增加审计记录,分布保存日志

机器准备:

主机名IP
node0110.0.1.110
log(日志服务器)10.0.1.111

node01操作:

1.修改应用服务器日志配置文件
vim /etc/rsyslog.conf

# 确认关键日志审计是否存在
*.info;mail.none;authpriv.none;cron.none     /var/log/messages

authpriv.*                                   /var/log/secure


# 添加两行转发日志信息
*.info;mail.none;authpriv.none;cron.none         @10.0.1.111
authpriv.*                                       @@10.0.1.111

注释:
@:使用tcp协议
10.0.1.111:把日志内容写入到10.0.1.111机器上
@@:协议udp协议


2.重启rsyslog
systemctl restart rsyslog.service

log(日志服务器):开启配置文件

1.修改应用服务器日志配置文件
vim /etc/rsyslog.conf
 15 $ModLoad imudp
 16 $UDPServerRun 514

 19 $ModLoad imtcp
 20 $InputTCPServerRun 514
 
 22 $template Remote,"/var/log/%$YEAR%-%$MONTH%-%$DAY%/%fromhost-ip%.log" 

 47 #### RULES ####
 48 :fromhost-ip, !isequal, "127.0.0.1" ?Remote
 49 & stop



2.重启rsyslog
systemctl restart rsyslog.service


3.查看日志是否有时间段的目录,有了则成功
ls /var/log



4.日志服务器实时查看日志,在客户机器输入 logger luobo
tail -f /var/log/2023-05-31/10.0.1.110.log

重要日志权限不应该高于640

防止日志泄露敏感信息
ls -la /var/log/
chmod -R 640 /var/log

设置关键文件底层属性

目的:增强关键文件的底层属性,降低篡改风险

1.修改关键文件的日志和底层属性
chattr +a /var/log/messages 
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/group

不只限于上述文件,可用lsattr查看更改结果

通信协议⭐

关闭非加密远程管理telnet

目的:降低被抓包后获取系统关键信息

vim /etc/xinetd.d/telnet
disable=yes

使用加密的远程管理

目的:使用安全套接字层加密传输信息,避免被侦听敏感信息。

1.修改sshd配置文件
vim /etc/ssh/sshd_config 
# 更改默认端口
Port 2020

# 禁止root远程登录
PermitRootLogin no

# 开启v2版本
Protocol 2


2.重启sshd服务
systemctl restart sshd.service

设置访问控制列表

设置访问控制白名单,减少被入侵的风险

# 修改拒绝策略
vim /etc/hosts.deny 
ALL:ALL

# 修改允许策略
vim /etc/hosts.allow
# sshd:来访者IP地址
sshd:10.0.1.110
sshd:10.0.1.111

固化常用DNS解析

目的:降低被DNS劫持的可能性

修改hosts文件
vim /etc/hosts

# 加入解析信息
61.59.123.22 www.baidu.com
访问IP  服务器域名

打开syncookie

目的:缓解syn flood攻击

1.修改系统控制文件
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1

2.配置生效
sysctl -p

不响应ICMP请求

大白话理解:你能ping通别人,别人ping不通你。

目的:不对ICMP请求作出响应,避免泄露信息

1.修改网络策略布尔值
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

2.配置生效
sysctl -p

禁止处理无源路由

目的:防止被无源数据包利用

1.检查是否开启了路由功能
sysctl -n net.ipv4.conf.all.accept_source_route


2.禁止路由
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

防御syn flood攻击优化

目的:修改半连接上线,缓解syn flood攻击

1.查询当前半连接上限
sysctl net.ipv4.tcp_max_syn_backlog


2.修改半连接上限
sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

FTP使用黑白名单限制

目的:防止非法账户访问ftp

1.检查黑名单文件是否包含高危账户
cat /etc/vsftp/ftpusers
# 黑名单用户
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody


2.使用白名单文件
cat /etc/user_list

cat /etc/vsftpd/vsftpd.conf
# 配置文件中是否存在
userlist_deny=NO
userlist_enable=YES

FTP设置上传文件后的默认权限

目的:防止被上传执行脚本

检查主配置文件 /etc/vsftpd/vsftpd.conf是否存在如下内容
cat /etc/vsftpd/vsftpd.conf
write_enable=YES
local_umask=022
anon_umask=022

FTP设置banner信息

目的:防止泄露服务信息

检查主配置文件 /etc/vsftpd/vsftpd.conf 是否存在如下内容
cat /etc/vsftpd/vsftpd.conf
ftpd_banner=" Authorized users only. All activity may be monitored and reported. "

配置可信任的NTP服务器,并确保服务开启

目的:保持时间同步,防止某些服务错误

yum install ntp -y

1.检查主配置文件 /etc/ntp.conf 是否存在如下内容
cat /etc/ntp.conf
server X.X.X.X

2.确保服务被启用
systemctl enable ntpd
systemctl status ntpd

检查账户目录是否存在高危文件.netrd、.rhosts

目的:防止被使用远程登录漏洞

脚本执行无返回值表示正常

1.检查.netrc脚本
vim find_net.sh
#! /bin/bash
for DIR in `cut -d ":" -f6 /etc/passwd`; do
if [ -e $DIR/.netrc ]; then
echo "$DIR/.netrc"
fi
done

# 执行脚本 脚本执行无返回值表示正常
sh find_net.sh


2.检查.rhosts脚本
vim find_rhost.sh
#! /bin/bash
for DIR in `cut -d ":" -f6 /etc/passwd`; do
if [ -e $DIR/.rhosts ]; then
echo "$DIR/.rhosts"
fi
done

# 执行脚本 脚本执行无返回值表示正常
sh find_rhost.sh

关闭NFS服务

目的:防止被外挂文件系统,导致入侵

# 检查是否存在敏感进程
ps aux |grep -E "lockd | nfsd |statd |mountd"


# 检查关闭NFS相关服务
systemctl list-unit-files |grep nfs
systemctl disable nfs-client.target

补丁⭐

补丁装载

可以使用系统版本为最新并解决安全问题

1.使用yum更新(不建议)
yum update

2.使用rpm安装
	访问:http://www.redhat.com/corp/support/errata 下载补丁
	rpm -Fvh rpm包

注意:所有补丁需要在测试环境测试不影响业务服务后才可更新,下载补丁时,一定对文件进行签名合适。

服务进程与启动⭐

关闭无用服务

目的:关闭无用服务,提高系统性能,减低漏洞风险

1.检查有哪些自启动服务,并记录列表
systemctl list-unit-files |grep enabled


2.禁用无用服务
systemctl stop 服务名
systemctl disabled 服务名

建议关闭的服务

建议:如无需要,建议关闭或者卸载功能

图片

banner与自动注销⭐

隐藏系统提示信息

目的:避免通过系统提示信息获取系统状态

1.查看登录banner信息
cat /etc/issue


2.清空banner文件
echo  > /etc/issue

设置登录超时注销

目的:防止疏忽导致命令被他人使用

1.修改 /etc/profile
vim /etc/profile
在HISTFILESIZE下面加入
TMOUT=180

2.生效
source /etc/profile

减少history历史数量

目的:降低之前操作被窃取的风险

1.修改/etc/profile
vim /etc/profile
# 历史记录条数,建议写30-50就行
HISTSIZE=50


2.生效
source /etc/profile

跳过grub菜单

目的:防止在grub菜单对引导过程进行修改

修改grub配置文件

vim /boot/grub2/grub.cfg
# 修改grub菜单等待时间
set timeout=0

关闭ctrl+alt+del重启功能

目的:防止误操作重启服务器

删除配置文件
rm -f /usr/lib/systemd/system/ctrl-alt-del.target

生效
init q

969694)]

banner与自动注销⭐

隐藏系统提示信息

目的:避免通过系统提示信息获取系统状态

1.查看登录banner信息
cat /etc/issue


2.清空banner文件
echo  > /etc/issue

设置登录超时注销

目的:防止疏忽导致命令被他人使用

1.修改 /etc/profile
vim /etc/profile
在HISTFILESIZE下面加入
TMOUT=180

2.生效
source /etc/profile

减少history历史数量

目的:降低之前操作被窃取的风险

1.修改/etc/profile
vim /etc/profile
# 历史记录条数,建议写30-50就行
HISTSIZE=50


2.生效
source /etc/profile

跳过grub菜单

目的:防止在grub菜单对引导过程进行修改

修改grub配置文件

vim /boot/grub2/grub.cfg
# 修改grub菜单等待时间
set timeout=0

关闭ctrl+alt+del重启功能

目的:防止误操作重启服务器

删除配置文件
rm -f /usr/lib/systemd/system/ctrl-alt-del.target

生效
init q

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

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

相关文章

动手学深度学习12.7. 参数服务器-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:35 分布式训练【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:12.7. 参数服务器…

告别数据泥沼,拥抱智能中枢:King’s四位一体重塑科研生产力

在现代科研的战场上,数据堪称科研人员手中的“弹药”。然而,许多实验室却深陷数据管理的泥沼:硬盘里堆满了不同年份的实验记录,U盘里塞着各种格式的谱图,Excel表格里还留着手动计算的痕迹……,当科研人员想…

智绅科技 —— 智慧养老 + 数字健康,构筑银发时代安全防护网

在老龄化率突破 21.3% 的当下,智绅科技以 "科技适老" 为核心理念,构建 "监测 - 预警 - 干预 - 照护" 的智慧养老闭环。 其自主研发的七彩喜智慧康养平台,通过物联网、AI 和边缘计算技术,实现对老年人健康与安…

Code Composer Studio CCS 工程设置,如何设置h文件查找路径?

右键工程,选Properties,在Build>MSP430 Compiler>Optinizution Include Options 设置头文件的搜索路径。 比如我设置了这些: ${CCS_BASE_ROOT}/msp430/include ${PROJECT_ROOT} ${CG_TOOL_ROOT}/include "${workspace_loc:/${ProjName}/F5xx_F6xx_Core_Lib}&quo…

Qt生成日志与以及捕获崩溃文件(mingw64位,winDbg)————附带详细解说

文章目录 Qt生成日志与以及报错文件(mingw64位,winDbg)0 背景与结果0.1 背景0.2 结果1 WinDbg1.1 安装1.2 使用 2 编写代码2.1 ccrashstack类2.2 编写输出捕获异常的dmp文件2.2 编写输出日志文件2.3 调用生成日志和dmp文件 参考 Qt生成日志与以及报错文件(mingw64位…

智能手表健康监测系统的PSRAM存储芯片CSS6404LS-LI—高带宽、耐高温、微尺寸的三重突破

一、直击智能手表三大核心痛点 痛点场景风险传统方案缺陷连续生物数据流存储100Hz PPG信号产生82MB/s数据洪峰SPI NOR Flash带宽不足(≤50MB/s)高温环境稳定性腕表表面温度达50℃(烈日/运动场景)商用级存储器件(85℃)易触发数据错误极限空间约束PCB面积…

蓝桥杯国赛题2022

首先这个题应该是一个01背包,背包容量为2022,有2022个物品,第i个物品的体积为i,只不过这里有两个限制条件,一个限制条件是和为2022,另一个限制条件为10个数,两个限制条件那就把加一维&#xff0…

关于如何使用VScode编译下载keil工程的步骤演示

1、vscode的插件市场下载keil Assistant 2 、点设置 3、复制keil的地址 4、粘贴到第…

Redis底层数据结构之深入理解跳表(2)

上一篇文章中我们详细讲述了跳表的增添、查找和修改的操作,这篇文章我们来讲解一下跳表在多线程并发时的安全问题。在Redis中,除了网络IO部分和大文件的后台复制涉及到多线程外,其余任务执行时全部都是单线程,这也就意味着在Redis…

[蓝桥杯]兰顿蚂蚁

兰顿蚂蚁 题目描述 兰顿蚂蚁,是于 1986 年,由克里斯兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只"蚂蚁"。 蚂蚁的头部朝向为:上下左右其中一方。 蚂蚁的移…

使用 Python 构建并调用 ComfyUI 图像生成 API:完整实战指南

快速打造你自己的本地 AI 图像生成服务,支持 Web 前端一键调用! 📌 前言 在 AIGC 快速发展的今天,ComfyUI 作为一款模块化、节点式的图像生成界面,备受开发者青睐。但默认情况下,ComfyUI 主要通过界面交互…

嵌入式学习笔记-freeRTOS taskENTER_CRITICAL(_FROM_ISR)跟taskEXIT_CRITICAL(_FROM_ISR)函数解析

一 函数taskENTER_CRITICAL,taskEXIT_CRITICAL 函数taskENTER_CRITICAL最终实现如下: 第①处按照系统设定的configMAX_SYSCALL_INTERRUPT_PRIORITY值对中断进行屏蔽 第②处调用一次自增一次 第③处检查中断状态寄存器位,如果有任何中断位置…

1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】

1panel面板中部署SpringBoot和Vue前后端分离系统 一,1panel面板部署二,安装OpenResty三,安装MySQL,Redis等Spring boot 运行依赖环境四,SpringBoot 应用配置及打包部署配置打包部署 五 ,前端VUE应用配置打包…

【Android基础回顾】二:handler消息机制

Android 的 Handler 机制 是 Android 应用中实现线程间通信、任务调度、消息分发的核心机制之一,它基于 消息队列(MessageQueue) 消息循环(Looper) 消息处理器(Handler) 组成。 1 handler的使用…

每日Prompt:每天上班的状态

提示词 一个穿着清朝官服的僵尸脸上贴着符纸,在电脑面前办公,房间阴暗,电脑桌面很乱,烟灰缸里面满是烟头

C++11 右值引用:从入门到精通

文章目录 一、引言二、左值和右值(一)概念(二)区别和判断方法 三、左值引用和右值引用(一)左值引用(二)右值引用 四、移动语义(一)概念和必要性(二…

.net 使用MQTT订阅消息

在nuGet下载M2Mqtt V4.3.0版本。(支持.net framework) 订阅主题 public void LoadMQQCData() {string enpoint "xxx.xxx.x.x";//ip地址int port 1883;//端口string user "usrname";//用户名string pwd "pwd";//密码…

【递归、搜索与回溯】综合练习(四)

📝前言说明: 本专栏主要记录本人递归,搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码…

强化学习入门:Gym实现CartPole随机智能体

前言 最近想开一个关于强化学习专栏,因为DeepSeek-R1很火,但本人对于LLM连门都没入。因此,只是记录一些类似的读书笔记,内容不深,大多数只是一些概念的东西,数学公式也不会太多,还望读者多多指教…

STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解

声明:此博客是我的学习笔记,所看课程是江协科技的CAN总线课程,知识点都大同小异,我仅进行总结并加上了我自己的理解,所引案例也都是课程中的案例,希望对你的理解有所帮助! 知识点1【CAN总线的概…