当前位置: 首页 > backend >正文

linux 安全与防护,全方向讲解

一、 核心安全理念

  1. 最小权限原则: 用户、进程、服务只拥有其完成任务所必需的最小权限。绝不使用 root 账户进行日常操作。

  2. 攻击面最小化: 关闭所有不必要的端口、服务、功能。系统暴露的越少,被攻击的可能性就越低。

  3. 防御纵深: 不依赖单一的安全措施,而是建立多层防御。即使一层被突破,还有其他层提供保护。

  4. 永不信任,始终验证: 对所有内部和外部的请求都进行身份验证和授权。


二、 物理安全与访问控制(第一道防线)

如果攻击者能物理接触服务器,那么绕过所有软件安全措施只是时间问题。

  • 机房安全: 限制对服务器机房的物理访问(门禁、监控、日志)。

  • BIOS/UEFI 安全

    • 设置 BIOS/UEFI 密码,防止从外部设备(如U盘)启动。

    • 禁用不必要的硬件接口(如USB端口)。

  • 引导加载程序安全

    • GRUB 加密: 为 GRUB 引导加载程序设置密码,防止用户进入单用户模式(无需密码即可获得 root 权限)或修改启动参数。

    • 示例: 在 /etc/grub.d/00_header 或 /etc/grub.d/40_custom 中设置 set superusers="root" 和 password_pbkdf2 root ...


三、 系统级安全加固

1. 用户、权限与认证
  • sudo 机制

    • 日常使用普通用户账户,仅在需要时使用 sudo 执行特权命令。

    • 通过 visudo 命令编辑 /etc/sudoers 文件,精细控制 sudo 权限,而不是简单地将用户加入 wheel 组。遵循最小权限原则。

  • 强密码策略

    • 修改 /etc/login.defs 设置密码最长有效期、最短长度等。

    • 使用 /etc/security/pwquality.conf (或 pam_pwquality 模块) 强制密码复杂性(最小长度、包含数字、大小写等)。

  • 禁止 root 远程登录

    • 编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no。这是必须做的!

  • 限制历史命令记录: 设置 HISTFILESIZE 和 HISTSIZE 环境变量,避免密码等敏感信息被记录在 .bash_history 中。

2. 服务与端口管理(攻击面最小化)
  • 服务管理

    • 停止并禁用所有不需要的服务:systemctl stop <service-name> && systemctl disable <service-name>

    • 使用 ss -tulnp 或 netstat -tulnp 查看所有监听端口,弄清楚每一个端口的作用。

  • 防火墙(iptables/nftables/firewalld)

    • iptables/nftables: Linux 内核自带的 netfilter 防火墙,功能强大但配置复杂。

    • firewalld(推荐): 更现代、动态的管理工具,简化了 zone 和 service 的管理。

    • 策略: 默认拒绝所有入站流量 (drop),只放行明确允许的端口(如 22, 80, 443)。同样要限制不必要的出站流量。

    • 示例 (firewalld)

      bash

      sudo firewall-cmd --permanent --add-service=ssh  # 放行SSH
      sudo firewall-cmd --permanent --add-service=http # 放行HTTP
      sudo firewall-cmd --permanent --add-service=https # 放行HTTPS
      sudo firewall-cmd --permanent --remove-service=dhcpv6-client # 移除不需要的服务
      sudo firewall-cmd --reload
3. 安全增强式 Linux (SELinux/AppArmor)
  • SELinux (RedHat/CentOS/Fedora): 一种强制访问控制(MAC)系统,为进程和文件提供细粒度的安全策略。即使攻击者拿到了 root 权限,其行为也会受到 SELinux 策略的限制。

    • 模式: enforcing (强制), permissive (仅记录不拦截), disabled (禁用)。

    • 建议: 在生产服务器上设置为 enforcing 模式。遇到权限问题时,首先查看 /var/log/audit/audit.log 日志,使用 audit2why 和 audit2allow 进行分析和解决,而不是直接禁用。

  • AppArmor (Debian/Ubuntu/SUSE): 另一种 MAC 系统,通过路径限制来配置策略,相对 SELinux 更易用。

4. 系统更新与漏洞管理
  • 定期更新: 建立流程,定期使用 yum updateapt update && apt upgrade 安装安全补丁和软件更新。

  • 自动化更新: 对于不重要的测试环境,可配置 yum-cron 或 unattended-upgrades 进行自动安全更新。生产环境建议先测试再手动更新。

  • 漏洞扫描: 使用 lynis(一款优秀的开源安全审计工具)定期对系统进行安全扫描,并根据建议进行加固。


四、 网络安全防护

1. SSH 安全加固

SSH 是进入服务器的门户,必须重点防护。

  • 修改默认端口: 编辑 /etc/ssh/sshd_config,将 Port 22 改为一个高端口(如 2345),减少自动化扫描攻击。

  • 密钥认证: 完全禁用密码登录,强制使用 SSH 密钥对进行认证。

    • PubkeyAuthentication yes

    • PasswordAuthentication no

    • PermitEmptyPasswords no

  • 禁止其他用户: 使用 AllowUsers 或 AllowGroups 指令明确指定允许通过 SSH 登录的用户。

  • 使用 Fail2ban: 一款非常有效的防暴力破解工具。它监控系统日志(如 /var/log/secure),当发现多次失败登录尝试后,会自动调用防火墙封锁源 IP 一段时间。

    • 安装: yum install fail2ban 或 apt install fail2ban

    • 配置: 通常复制 /etc/fail2ban/jail.conf 为 jail.local 并进行修改。

2. 服务本身的安全
  • 以非特权用户运行服务: 如 Nginx、MySQL 等,应创建专用低权限用户来运行,并在配置文件中指定。

  • 加密通信: 对所有网络服务使用 TLS/SSL 加密(如 HTTPS),避免明文传输敏感数据。使用 Let's Encrypt 获取免费证书。

  • 安全响应头: 在 Web 服务器(Nginx/Apache)上配置安全头,如:

    • Strict-Transport-Security (HSTS): 强制浏览器使用 HTTPS 连接。

    • X-Content-Type-Options: 防止 MIME 类型混淆攻击。

    • X-Frame-Options: 防止点击劫持。


五、 主动防御与监控

1. 入侵检测系统 (IDS)
  • 文件完整性检查 (FIM)

    • AIDE 或 Tripwire: 这些工具会为系统文件创建一个数据库(哈希值、权限等),定期扫描并与数据库对比,一旦发现文件被篡改(如木马、后门)就发出警报。这是检测入侵的关键手段

  • 网络入侵检测系统 (NIDS)

    • Suricata 或 Zeek (Bro): 实时监控网络流量,基于规则库(如 Emerging Threats)检测恶意活动、扫描行为和漏洞利用尝试。

2. 日志管理与分析

“日志告诉你发生了什么”,但海量的日志需要集中分析。

  • 集中式日志: 使用 Rsyslog 或 Syslog-ng 将所有服务器的日志发送到一个中央日志服务器,避免攻击者在本机擦除日志。

  • 日志分析平台: 使用 ELK Stack (Elasticsearch, Logstash, Kibana) 或 Graylog 对日志进行索引、搜索和可视化,以便快速发现安全事件(如多次登录失败、异常进程行为)。

3. 安全审计
  • auditd: Linux 内核的审计框架,用于记录系统调用和文件访问。

    • 可以配置规则来监控重要文件的访问(如 /etc/passwd)、特权命令的执行(如 susudo)等。

    • 日志存储在 /var/log/audit/audit.log,需配合 ausearch 和 aureport 工具使用。


六、 数据安全与备份

这是最后一道防线,用于灾难恢复。

  • 加密

    • 静态加密: 使用 LUKS 对磁盘分区进行全盘加密,防止服务器丢失或硬盘被窃导致数据泄露。

    • 传输加密: 使用 scprsync over sshsftp 等工具安全地传输数据。

  • 备份策略

    • 3-2-1 规则: 至少 3 个副本,使用 2 种不同介质,其中 1 份放在异地。

    • 定期测试恢复: 备份的有效性必须通过定期恢复演练来验证!否则备份可能毫无意义。


七、 安全实践 Checklist(自查清单)

  1. PermitRootLogin no

  2. 使用 SSH 密钥登录,PasswordAuthentication no

  3. 配置了防火墙,默认策略为 DROP,只开放必要端口

  4. systemctl list-unit-files | grep enabled 检查并禁用无用服务

  5. SELinux/AppArmor 处于 enforcing 模式

  6. 已设置强密码策略和用户密码过期时间

  7. 已安装并配置 fail2ban

  8. 已配置 sudo 权限,遵循最小权限原则

  9. 已安装并初始化 aide,建立了文件完整性数据库

  10. 已配置日志转发(Rsyslog -> 中央日志服务器)

  11. 建立了有效且经过测试的备份恢复流程

  12. 设置了定期的(如每周)安全更新检查机制

总结

Linux 安全防护是一个持续的过程,而非一劳永逸的任务。它要求管理员具备纵深防御的思维,从物理层到应用层,从预防到检测响应,建立多层、立体的防御体系。始终保持对系统的好奇心和警惕性,定期审查日志和更新策略,才能有效地保护你的服务器免受威胁。

http://www.xdnf.cn/news/20306.html

相关文章:

  • 华清远见25072班I/O学习day6
  • Qt绘图功能学习笔记
  • 北斗导航 | 导航定位中的卡尔曼滤波算法:原理、公式及C代码详解
  • XXL-JOB基本使用
  • MyBatis高频问题-动态sql
  • 计算机网络:以太网中的数据传输
  • golang连接influxdb的orm操作
  • halcon-亚像素边缘提取教程
  • PyTorch 模型文件介绍
  • element-plus 表单校验-表单中包含多子组件表单的校验
  • (数据结构)哈希碰撞:线性探测法 vs 拉链法
  • 基于区块链的IoMT跨医院认证系统:Python实践分析
  • Flink中的事件时间、处理时间和摄入时间
  • Joplin-解决 Node.js 中 “digital envelope routines::unsupported“ 错误
  • 自旋锁/互斥锁 设备树 iic驱动总线 day66 67 68
  • 输入2.2V~16V 最高输出20V2.5A DCDC升压芯片MT3608L
  • 计算机网络:网络设备在OSI七层模型中的工作层次和传输协议
  • 鸿蒙 BLE 蓝牙智能设备固件升级之DFU升级方式(Nordic芯片)
  • macbook intel 打开cursor会闪退
  • MySQL集群高可用架构(MHA高可用架构)
  • Process Explorer进阶(第三章3.3):深入理解进程详情
  • [Windows] AdGuard.v7.21.5089.0 中文直装电脑版
  • cds序列转换为pepperl脚本详细解读及使用
  • Python多线程编程全面指南
  • web自动化测试
  • Elasticsearch优化从入门到精通
  • 线代:排列与逆序
  • 从机器学习的角度实现 excel 中趋势线:揭秘梯度下降过程
  • PageHelper的使用及底层原理
  • WordPress如何绑定多个域名 WordPress实现多域名访问