Linux 安全加固

Linux 安全加固需要从​​用户权限、系统服务、网络防护、日志审计、文件系统、访问控制​​等多个维度入手,目标是减少攻击面、限制未授权访问、提升系统健壮性。以下是​​详细步骤+实操示例​​,覆盖主流 Linux 发行版(如 CentOS/Ubuntu)。


​一、用户与权限安全:最小权限原则​

用户和权限是最基础的安全防线,核心是“​​最小权限原则​​”(Least Privilege),即用户仅拥有完成任务所需的最小权限。

1. 禁用或删除冗余用户/组
  • ​目标​​:移除默认无用账户(如 nobodybin 等),避免被攻击者利用。
  • ​操作​​:
    # 查看所有用户(关注 UID < 1000 的系统用户)
    cat /etc/passwd | awk -F: '$3 < 1000 {print $1}'# 删除冗余用户(示例:删除 games 用户)
    sudo userdel -r games  # -r 同时删除家目录和邮件# 禁用用户(不删除,仅锁定)
    sudo passwd -l username  # 锁定
    sudo passwd -u username  # 解锁
2. 强制密码策略
  • ​目标​​:防止弱密码(如短密码、常见密码)被暴力破解。
  • ​操作(以 PAM 模块为例)​​:
    编辑 /etc/security/pwquality.conf(CentOS 7+/Ubuntu 18.04+):
    minlen = 12          # 最小长度 12 位
    dcredit = -1         # 至少 1 位数字(负数表示至少)
    ucredit = -1         # 至少 1 位大写字母
    lcredit = -1         # 至少 1 位小写字母
    ocredit = -1         # 至少 1 位特殊符号(如 !@#$)
    maxrepeat = 3        # 禁止连续 3 位重复字符
    生效后,新密码必须满足上述规则。
3. 限制 root 远程登录
  • ​目标​​:避免 root 账户直接暴露在公网,降低被暴力破解风险。
  • ​操作(以 SSH 为例)​​:
    编辑 /etc/ssh/sshd_config
    PermitRootLogin no   # 禁止 root 远程登录
    # 改为允许特定用户通过 sudo 切换 root(更安全)
    AllowUsers user1 user2  # 仅允许 user1/user2 远程登录
    保存后重启 SSH 服务:
    sudo systemctl restart sshd  # CentOS/Ubuntu 通用

​二、系统更新与补丁管理:修复已知漏洞​

未修复的系统/软件漏洞是最常见的攻击入口,需定期更新。

1. 自动更新配置(以 Ubuntu 为例)
  • 启用无人值守更新(自动安装安全补丁):
    sudo apt install unattended-upgrades
    sudo dpkg-reconfigure unattended-upgrades  # 图形化配置
    关键配置文件 /etc/apt/apt.conf.d/50unattended-upgrades,启用以下选项:
    Unattended-Upgrade::Allowed-Origins {"${distro_id}:${distro_codename}";"${distro_id}:${distro_codename}-security";  # 仅安全补丁
    };
2. 手动更新(CentOS 示例)
sudo yum update -y  # 升级所有包(生产环境建议先测试)
# 或仅升级安全补丁(需安装 yum-plugin-security)
sudo yum update --security -y

​三、网络服务与防火墙:最小化暴露面​

关闭不必要的网络服务,仅开放需要的端口,并通过防火墙严格限制访问。

1. 关闭冗余服务
  • ​目标​​:减少攻击面(如未使用的 FTP、Telnet、RPC 等)。
  • ​操作​​:
    # 查看运行中的服务(CentOS 7+/Ubuntu 16.04+ 使用 systemd)
    systemctl list-units --type=service --state=running# 禁用并停止冗余服务(示例:禁用 telnet)
    sudo systemctl disable --now telnet.socket  # 禁用开机启动并停止
2. 配置防火墙(以 firewalld 为例,CentOS)
  • ​目标​​:仅允许必要的端口(如 SSH 22、HTTP 80、HTTPS 443)。
  • ​操作​​:
    # 查看当前规则
    sudo firewall-cmd --list-all# 开放 HTTP/HTTPS 端口(永久生效)
    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --add-service=https --permanent# 禁止 ICMP(ping)请求(防扫描)
    sudo firewall-cmd --add-icmp-block=echo-request --permanent# 重载规则
    sudo firewall-cmd --reload
3. 高级防护:使用 fail2ban 防止暴力破解
  • ​目标​​:自动封禁多次登录失败的 IP。

  • ​操作(以 SSH 为例)​​:

    # 安装 fail2ban(CentOS)
    sudo yum install fail2ban -y# 配置(编辑 /etc/fail2ban/jail.local)
    [sshd]
    enabled = true
    maxretry = 3       # 允许失败次数
    findtime = 600     # 统计时间窗口(秒)
    bantime = 3600     # 封禁时间(秒,1小时)

    重启服务生效:

    sudo systemctl start fail2ban && sudo systemctl enable fail2ban

​四、日志与审计:监控异常行为​

通过日志记录和分析,及时发现入侵迹象。

1. 启用详细日志记录
  • ​目标​​:记录关键操作(如 sudo、SSH 登录、文件修改)。
  • ​操作​​:
    编辑 /etc/rsyslog.conf(或 /etc/syslog.conf),调整日志级别:
    # 记录所有 sudo 操作(需配合 auditd)
    local2.debug /var/log/sudo.log# 记录 SSH 登录成功/失败
    authpriv.* /var/log/auth.log  # Ubuntu
    # 或 /var/log/secure (CentOS)
2. 使用 auditd 进行审计(高级)
  • ​目标​​:监控敏感文件/目录的访问(如 /etc/passwd/root)。
  • ​操作​​:
    # 安装 auditd(CentOS)
    sudo yum install auditd -y# 添加审计规则(监控 /etc/passwd 的修改)
    sudo auditctl -w /etc/passwd -p wa -k passwd_changes  # wa=写/属性变更# 查看审计日志
    ausearch -k passwd_changes  # 按标签过滤
3. 日志集中管理(可选)
  • ​目标​​:避免日志被篡改,便于集中分析。
  • ​方案​​:使用 ELK(Elasticsearch+Logstash+Kibana)或 Graylog 收集多台服务器日志。

​五、文件系统与磁盘安全:保护数据完整性​

1. 设置文件/目录权限
  • ​目标​​:敏感文件(如 passwdshadow)仅允许 root 读取。
  • ​操作​​:
    # 查看 /etc/shadow 权限(应仅 root 可读)
    ls -l /etc/shadow  # 正常输出:-rw-r----- 1 root shadow ...# 修复权限(示例:设置 /etc/ssh/sshd_config 仅 root 可写)
    sudo chmod 600 /etc/ssh/sshd_config  # 600=所有者读写,其他无权限
2. 挂载选项强化(防数据篡改)
  • ​目标​​:防止关键分区(如 /home/var)被意外或恶意修改。
  • ​操作​​:编辑 /etc/fstab,添加 noexec(禁止执行)、nosuid(禁止 SUID)选项:
    /dev/sda3  /home  ext4  defaults,noexec,nosuid  0 0

​六、高级防护:SELinux/AppArmor​

SELinux(Security-Enhanced Linux)是 Linux 内核的强制访问控制(MAC)模块,可限制进程的权限(即使 root 也无法越权)。

1. 启用 SELinux(CentOS 默认启用)
  • ​检查状态​​:

    getenforce  # 输出 Enforcing(启用)、Permissive(警告模式)、Disabled(禁用)
  • ​临时禁用(测试用)​​:

    sudo setenforce 0  # 设为 Permissive 模式
  • ​永久启用​​:编辑 /etc/selinux/config,将 SELINUX=disabled 改为 SELINUX=enforcing,重启生效。

2. SELinux 策略示例(限制 Apache 访问)

假设 Apache(httpd)仅需访问 /var/www/html,可设置自定义策略:

# 查看当前布尔值(是否允许 Apache 访问外部网络)
semanage boolean -l | grep httpd_can_network_connect# 禁止 Apache 访问外部网络(增强安全性)
sudo setsebool -P httpd_can_network_connect off

​七、其他关键加固项​

  1. ​禁用不必要的内核功能​​:
    编辑 /etc/sysctl.conf,调整内核参数(如禁止 IP 转发、限制 SYN 洪水攻击):

    net.ipv4.ip_forward = 0          # 禁止 IP 转发(非网关服务器)
    net.ipv4.tcp_syncookies = 1      # 启用 SYN Cookie 防御洪水攻击
    net.ipv4.icmp_echo_ignore_broadcasts = 1  # 忽略 ICMP 广播请求(防 ping 扫描)

    生效:sudo sysctl -p

  2. ​定期备份​​:
    使用 rsynctar 备份关键数据,结合 cron 定时任务(如每日凌晨备份):

    # 示例:每天 2 点备份 /etc 到 /backup/etc.tar.gz
    0 2 * * * tar -czf /backup/etc_$(date +\%F).tar.gz /etc
  3. ​禁用 USB 自动挂载​​(防恶意设备):
    编辑 /etc/modprobe.d/disable-usb-storage.conf

    options usb-storage delay_use=1  # 延迟挂载(需手动触发)
    # 或完全禁用(需重启):
    blacklist usb-storage

​加固效果验证​

完成上述步骤后,需验证安全措施是否生效:

  • ​检查开放端口​​:ss -tlnpnetstat -tlnp(仅应显示必要端口)。
  • ​测试 root 远程登录​​:尝试 ssh root@服务器IP(应拒绝连接)。
  • ​模拟暴力破解​​:使用工具(如 hydra)尝试登录,观察是否触发 fail2ban 封禁。
  • ​查看日志​​:检查 /var/log/auth.log(Ubuntu)或 /var/log/secure(CentOS)是否有异常登录记录。

​总结​

Linux 安全加固是​​持续过程​​,需结合“最小权限、定期更新、网络隔离、日志监控”四大原则。实际操作中需根据业务需求调整(如 Web 服务器需开放 80/443,数据库服务器需限制 3306 仅内网访问),并定期进行安全审计(如使用 lynis 工具扫描)。

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

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

相关文章

【Docker#2】容器历史发展 | 虚拟化实现方式

一、前言 – 容器技术发展史 容器技术是现今计算技术的重要组成部分&#xff0c;其发展历程可以追溯到很早的计算机系统提供的进程隔离工具。以下是容器技术的发展历程&#xff0c;其中涵盖了从早期的进程隔离技术到现代云计算和云原生的演变&#xff1a; ① Jail 时代 1979 年…

React + Mermaid 图表渲染消失问题剖析及 4 种代码级修复方案

Mermaid 是一个流行的库&#xff0c;它可以将文本图表&#xff08;例如 graph LR; A-->B;&#xff09;转换为 SVG 图表。在静态 HTML 页面中&#xff0c;Mermaid 会查找 <pre class"mermaid"> 代码块&#xff0c;并在页面加载时将它们替换为渲染后的图表。它…

[Element]修改el-pagination背景色

[Element]修改el-pagination背景色 代码 <el-pagination:current-page.sync"queryParams.current":page-size.sync"queryParams.size":page-sizes"[10, 20, 50, 100]"layout"prev, pager, next, jumper, sizes":total"queryP…

Docker 可用镜像列表

Docker 镜像源列表&#xff08;7月15日更新-长期&免费&#xff09;_dockerhub国内镜像源列表-CSDN博客

低代码可视化工作流的系统设计与实现路径研究

一、背景分析在数字化转型不断深化的背景下&#xff0c;企业业务流程呈现出高度定制化与动态调整的趋势&#xff0c;传统信息系统在开发周期、实施成本与扩展能力上的局限性日益凸显&#xff0c;已难以支撑快速响应和敏捷迭代的实际需求。面向这一现实挑战&#xff0c;基于 BPM…

mac mlx大模型框架的安装和使用

mlx是apple平台的大模型推理框架&#xff0c;对mac m1系列处理器支持较好。 这里记录mlx安装和运行示例。 1 安装mlx框架 conda create -n mlx python3.12 conda activate mlx pip install mlx-lm 2 运行mlx测试例 以下是测试程序&#xff0c;使用方法和hf、vllm等推理框架基…

JAVA 使用Apache POI合并Word文档并保留批注的实现

一、需求背景 在实际工作中&#xff0c;我们经常需要将多个Word文档合并成一个文件。但当文档中包含批注&#xff08;Comments&#xff09;时&#xff0c;传统的复制粘贴会导致批注丢失或引用错乱。本文将介绍如何通过Java和Apache POI库实现保留批注及引用关系的文档合并功能。…

Linux的服务管理工具:`systemd`(`systemctl`)和`SysVinit ` 笔记250718

Linux的服务管理工具:systemd(systemctl)和SysVinit 笔记250718 Linux的服务管理工具 Linux 的服务管理工具随着发行版和初始化系统的发展而演变。以下是主要的服务管理工具及其对应的初始化系统&#xff1a; 1. systemd (现代主流标准) 初始化系统&#xff1a; 是绝大多数…

Couchbase 可观测性最佳实践

Couchbase 介绍 Couchbase 是一个开源的分布式 NoSQL 数据库&#xff0c;专为高性能和高可扩展性设计&#xff0c;适用于实时数据处理的企业应用。它结合键值存储和文档数据库的优势&#xff0c;支持 JSON 文档存储&#xff0c;并通过 N1QL&#xff08;类 SQL 查询语言&#x…

构建基于MCP的LLM聊天机器人客户端开发指南

引言 在当今人工智能技术快速发展的时代&#xff0c;大型语言模型(LLM)已成为构建智能应用的核心组件。MCP(Modular Conversational Platform)作为一个强大的对话平台&#xff0c;为开发者提供了将LLM能力与自定义工具集成的标准化方式。本文将详细介绍如何使用Python开发一个…

接口测试的原则、用例与流程详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口的介绍软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口&am…

ubuntu 22.02 带外进单用户拯救系统

不停地按 F7 &#xff0c;然后进到 menu &#xff0c;选择 ubuntu &#xff0c;然后按下 ESC &#xff0c;然后瞬间会刷一个 ubuntu 的选项&#xff08;默认是在第一的位置&#xff0c;直接快速按下 e&#xff09;即可进入单用户模式。 找到类似 linux /boot/vmlinuz-xxx rootU…

Java-75 深入浅出 RPC Dubbo Java SPI机制详解:从JDK到Dubbo的插件式扩展

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-30-新发布【1T 万亿】参数量大模型&#xff01;Kim…

【橘子分布式】gRPC(编程篇-上)

一、简介 我们之前学习了grpc的一些理论知识&#xff0c;现在我们开始正式进入编程环节。 我们的项目结构和之前的thrift结构还是一样的&#xff0c;一个common,一个client&#xff0c;一个server。只不过在grpc这里common它一般叫做api模块。还是放置一些公共的实体类&#x…

IOS 18下openURL 失效问题

突然有一天有玩家反馈说应用打开外部连接打不开了&#xff0c;于是查了一下&#xff0c;报错&#xff1a;BUG IN CLIENT OF UIKIT: The caller of UIApplication.openURL(_:) needs to migrate to the non-deprecated UIApplication.open(_:options:completionHandler:). Force…

前端面试题(React 与 Vue)

目录 一、React 函数组件 Fiber架构 组件重新渲染 组件通信 为什么不能在if中使用hook useEffect与useLayoutEffect区别 性能优化hooks 受控组件与非受控组件 redux与zustand区别 二、Vue vue2与vue3区别 生命周期 computed与watch区别 v-if与v-show区别 v-mod…

大模型格式

目录 大模型格式&#xff1a; ollma 可以加载gguf ChatGPT 说&#xff1a; &#x1f50d; 什么是 GGUF&#xff1f; 大模型格式&#xff1a; Ollama 模型格式只能运行已打包成 .gguf 格式的模型&#xff0c;或通过其 Modelfile 方式构建 ModelScope 模型格式大多使用 Hug…

数据结构 栈(1)

1. 栈的概念和结构之前几篇我们分别讲解了顺序表和单链表的内容&#xff0c;今天我们又来学习一个新的关于数据结构的内容--- 栈 。栈&#xff1a;栈也属于线性表 , 但它是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一…

【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本

核心功能&#xff1a; 打开摄像头&#xff08;可支持外接摄像头&#xff09;检测翻页&#xff08;后续考虑添加图像差异算法&#xff09;拍照后用 识图自动用 TextToSpeech 朗读文字内容 &#x1f4cc; 说明&#xff1a;使用了 CameraX&#xff08;Android Jetpack&#xff09;…

园区IPv6规划与部署

​今天我将围绕“园区IPv6规划与部署”这一主题&#xff0c;结合行业趋势、技术难点和实际案例&#xff0c;与大家分享一套可落地的规划方法论。​在开始前&#xff0c;我想先问大家一个问题&#xff1a;​如果现在让你给一个新建园区设计网络&#xff0c;你会优先考虑IPv4还是…