零基础开始的网工之路第二十一天------系统安全基线和系统加固

发布于:2025-06-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

一、系统安全基线

1、账户与认证安全

2、文件与目录权限

3、SSH服务安全

4、网络与服务配置

5、日志与审计

6、内核参数加固

7、更新与补丁

8、安全模块配置

9、SUID/SGID文件检查

10、默认权限控制(umask)

二、系统安全加固

1、账户与认证加固

2、服务与网络加固

3、文件系统与权限加固

4、内核参数加固

5、日志与审计加固

6、安全工具与模块

7、其他加固措施

8、总结

三、漏洞修复案例

案例1:Shellshock漏洞(CVE-2014-6271)

案例2:Dirty COW漏洞(CVE-2016-5195)

案例3:Heartbleed漏洞(CVE-2014-0160)

案例4:Sudo提权漏洞(CVE-2021-3156)

案例5:Ghost漏洞(CVE-2015-0235)

案例6:SSH Weak MAC Algorithms(CVE-2008-5161)

案例7:Polkit权限提升漏洞(CVE-2021-4034)

案例8:Apache HTTP Server漏洞(CVE-2021-41773)

案例9:Log4j远程代码执行漏洞(CVE-2021-44228)

案例10:Linux内核Netfilter漏洞(CVE-2024-1086)

总结


一、系统安全基线

1、账户与认证安全

  1. 检查默认账户状态

    • 检查点:锁定或删除不必要的默认账户(如guest, test)。

    • 案例

      # 锁定账户
      sudo passwd -l guest
      # 删除账户
      sudo userdel test
  2. 密码策略配置

    • 检查点:密码长度≥8位,复杂度包含大小写、数字、符号,有效期≤90天。

    • 案例:修改/etc/login.defs

      PASS_MAX_DAYS 90
      PASS_MIN_LEN 8
      PASS_WARN_AGE 7

      安装libpam-pwquality并配置复杂度(/etc/security/pwquality.conf):

      minlen = 8
      dcredit = -1
      ucredit = -1
  3. 禁止Root直接登录

    • 检查点:通过SSH禁止Root远程登录,使用普通用户+sudo提权。

    • 案例:修改/etc/ssh/sshd_config

      PermitRootLogin no
  4. 空密码账户检查

    • 检查点:确保所有账户均有密码。

    • 案例

      awk -F: '($2 == "") {print $1}' /etc/shadow

2、文件与目录权限

  1. 关键文件权限

    • 检查点/etc/passwd权限644,/etc/shadow权限600。

    • 案例

      chmod 644 /etc/passwd
      chmod 600 /etc/shadow
  2. 全局可写文件检查

    • 检查点:查找权限为777的文件或目录。

    • 案例

      find / -perm -0777 -type f -exec ls -l {} \;
  3. 无属主文件检查

    • 检查点:修复无属主或属组的文件。

    • 案例

      find / -nouser -o -nogroup -exec chown root:root {} \;
  4. 临时目录粘滞位

    • 检查点/tmp目录设置粘滞位(权限1777)。

    • 案例

      chmod +t /tmp

3、SSH服务安全

  1. 使用SSH协议版本2

    • 检查点:禁用不安全的SSHv1。

    • 案例:修改/etc/ssh/sshd_config

      Protocol 2
  2. 限制登录尝试次数

    • 检查点:防止暴力破解,限制失败尝试为3次。

    • 案例:修改/etc/ssh/sshd_config

      MaxAuthTries 3
  3. 启用密钥认证

    • 检查点:禁用密码登录,强制使用密钥。

    • 案例

      PasswordAuthentication no

4、网络与服务配置

  1. 关闭非必要服务

    • 检查点:禁用Telnet、FTP等不安全服务。

    • 案例

      systemctl stop telnet.socket
      systemctl disable telnet.socket
  2. 防火墙配置

    • 检查点:仅开放必要端口(如SSH的22/HTTP的80)。

    • 案例(使用iptables):

      iptables -A INPUT -p tcp --dport 22 -j ACCEPT
      iptables -A INPUT -j DROP
  3. 禁用ICMP重定向

    • 检查点:防止网络参数被篡改。

    • 案例:修改/etc/sysctl.conf

      net.ipv4.conf.all.accept_redirects = 0

5、日志与审计

  1. 日志服务状态

    • 检查点:确保rsyslog/auditd运行。

    • 案例

      systemctl status rsyslog
  2. 关键日志权限

    • 检查点/var/log/secure权限设为640。

    • 案例

      chmod 640 /var/log/secure
  3. 审计关键文件

    • 检查点:监控/etc/passwd的修改。

    • 案例:添加auditd规则(/etc/audit/rules.d/audit.rules):

      -w /etc/passwd -p wa -k passwd_change

6、内核参数加固

  1. 防SYN洪水攻击

    • 检查点:启用SYN Cookies。

    • 案例:修改/etc/sysctl.conf

      net.ipv4.tcp_syncookies = 1
  2. 禁用IP源路由

    • 检查点:防止IP欺骗。

    • 案例

      net.ipv4.conf.all.accept_source_route = 0

7、更新与补丁

  1. 系统更新检查

    • 检查点:定期更新所有软件包。

    • 案例

      apt update && apt upgrade -y  # Debian/Ubuntu
      yum update -y                 # CentOS/RHEL

8、安全模块配置

  1. 启用SELinux/AppArmor

    • 检查点:确保处于enforcing模式。

    • 案例:修改/etc/selinux/config

      SELINUX=enforcing

9、SUID/SGID文件检查

  1. 清理危险权限文件

    • 检查点:移除不必要的SUID/SGID文件。

    • 案例

      find / -perm /4000 -type f -exec ls -l {} \;  # SUID文件
      find / -perm /2000 -type f -exec ls -l {} \;  # SGID文件

10、默认权限控制(umask)

  1. 设置严格umask

    • 检查点:全局umask设置为027(文件640,目录750)。

    • 案例:修改/etc/profile

      umask 027

二、系统安全加固


1、账户与认证加固

  1. 禁用默认账户与空密码账户

    • 加固点:删除或锁定未使用的默认账户,禁止空密码登录。

    • 案例

      # 锁定账户(如guest)
      sudo passwd -l guest
      # 删除空密码账户
      sudo userdel $(awk -F: '($2 == "") {print $1}' /etc/shadow)
  2. 强化密码策略

    • 加固点:强制密码复杂度、有效期及历史记录。

    • 案例:修改/etc/login.defs

      PASS_MAX_DAYS 90    # 密码最长使用90天
      PASS_MIN_DAYS 1     # 最短修改间隔1天
      PASS_WARN_AGE 7     # 密码到期前7天提醒

      配置/etc/security/pwquality.conf(需安装libpam-pwquality):

      minlen = 10         # 密码最小长度10位
      minclass = 3        # 包含至少3种字符类别(大小写、数字、符号)
  3. 限制sudo权限

    • 加固点:仅允许特定用户或组使用sudo

    • 案例:修改/etc/sudoers

      # 仅允许admin组用户使用sudo
      %admin ALL=(ALL) ALL
      # 禁止普通用户执行危险命令(如重启)
      User_Alias RESTRICTED_USERS = alice, bob
      Cmnd_Alias DANGEROUS_CMDS = /sbin/reboot, /sbin/shutdown
      RESTRICTED_USERS ALL=(ALL) ALL, !DANGEROUS_CMDS

2、服务与网络加固

  1. 关闭非必要服务

    • 加固点:禁用未使用的服务(如Telnet、FTP)。

    • 案例

      # 查看所有服务状态(systemd系统)
      systemctl list-unit-files --state=enabled
      # 禁用Telnet服务
      systemctl disable telnet.socket
  2. 防火墙配置

    • 加固点:仅开放必要端口,默认拒绝所有入站流量。

    • 案例(使用iptables):

      # 清空现有规则
      iptables -F
      # 允许SSH(22)、HTTP(80)、HTTPS(443)
      iptables -A INPUT -p tcp --dport 22 -j ACCEPT
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      iptables -A INPUT -p tcp --dport 443 -j ACCEPT
      # 默认拒绝其他入站流量
      iptables -P INPUT DROP
      # 保存规则(CentOS/RHEL)
      service iptables save
  3. SSH服务加固

    • 加固点:限制SSH访问、启用密钥认证、禁止Root登录。

    • 案例:修改/etc/ssh/sshd_config

      PermitRootLogin no             # 禁止Root登录
      PasswordAuthentication no      # 禁用密码登录(强制密钥)
      AllowUsers alice@192.168.1.0/24 # 仅允许特定IP段的用户alice登录
      MaxAuthTries 3                 # 最大登录尝试3次

3、文件系统与权限加固

  1. 关键文件权限控制

    • 加固点:限制敏感文件(如/etc/passwd/etc/shadow)的访问。

    • 案例

      chmod 600 /etc/shadow     # 仅Root可读写
      chmod 644 /etc/passwd     # Root可读写,其他用户只读
  2. 禁用危险权限文件

    • 加固点:查找并移除不必要的SUID/SGID权限文件。

    • 案例

      # 查找所有SUID/SGID文件
      find / -perm /4000 -o -perm /2000 -exec ls -l {} \;
      # 移除危险文件权限(如不必要的setuid程序)
      chmod u-s /usr/bin/example_tool
  3. 挂载选项加固

    • 加固点:为关键分区添加noexecnosuid选项。

    • 案例:修改/etc/fstab

      /tmp  /tmp  ext4  defaults,noexec,nosuid,nodev  0 0
      /home /home ext4  defaults,nodev               0 0

4、内核参数加固

  1. 防SYN洪水攻击

    • 加固点:启用SYN Cookies防止DDoS攻击。

    • 案例:修改/etc/sysctl.conf

      net.ipv4.tcp_syncookies = 1       # 启用SYN Cookies
      net.ipv4.tcp_max_syn_backlog = 2048 # 增大SYN队列长度
  2. 禁用IP转发与源路由

    • 加固点:防止系统被用作路由器或遭受IP欺骗。

    • 案例

      net.ipv4.ip_forward = 0           # 禁用IPv4转发
      net.ipv4.conf.all.accept_source_route = 0  # 禁用源路由
  3. 限制核心转储文件

    • 加固点:防止通过核心转储泄露敏感信息。

    • 案例

      # 限制核心转储文件大小(单位:KB)
      ulimit -c 0
      # 永久生效:在/etc/security/limits.conf中添加
      * hard core 0

5、日志与审计加固

  1. 启用审计服务(auditd)

    • 加固点:监控关键文件和用户操作。

    • 案例:配置/etc/audit/rules.d/audit.rules

      # 监控/etc/passwd和/etc/shadow的修改
      -w /etc/passwd -p wa -k passwd_change
      -w /etc/shadow -p wa -k shadow_change
      # 监控用户提权操作(sudo)
      -a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -k sudo_use
  2. 日志远程存储

    • 加固点:防止本地日志被篡改,配置日志服务器。

    • 案例:修改/etc/rsyslog.conf

      # 将日志发送到远程服务器(替换IP)
      *.* @192.168.1.100:514
  3. 日志轮转与保留

    • 加固点:避免日志文件过大,保留90天日志。

    • 案例:修改/etc/logrotate.conf

      rotate 12          # 保留12个日志副本(按月轮转)
      maxage 90          # 日志保留90天

6、安全工具与模块

  1. 启用SELinux/AppArmor

    • 加固点:强制访问控制(MAC)限制进程权限。

    • 案例(SELinux):

      # 检查状态
      sestatus
      # 修改模式为enforcing
      setenforce 1
      # 永久生效:修改/etc/selinux/config
      SELINUX=enforcing
  2. 安装入侵检测工具(如AIDE)

    • 加固点:监控文件完整性。

    • 案例

      # 安装AIDE
      yum install aide -y        # CentOS/RHEL
      apt install aide -y        # Debian/Ubuntu
      # 初始化数据库
      aide --init
      # 每日自动检查
      echo "0 0 * * * /usr/sbin/aide --check" >> /etc/crontab
  3. 部署防暴力破解工具(如fail2ban)

    • 加固点:自动封禁多次登录失败的IP。

    • 案例

      # 安装fail2ban
      yum install fail2ban -y    # CentOS/RHEL
      apt install fail2ban -y    # Debian/Ubuntu
      # 配置SSH防护(/etc/fail2ban/jail.local)
      [sshd]
      enabled = true
      maxretry = 3               # 允许3次失败尝试
      bantime = 86400            # 封禁24小时

7、其他加固措施

  1. 限制用户历史命令记录

    • 加固点:防止敏感命令泄露。

    • 案例:修改/etc/profile

      # 减少历史命令保存条数
      export HISTSIZE=50
      # 不记录特定命令(如密码相关)
      export HISTIGNORE="passwd:*ssh*:mysql*"
  2. 禁用Ctrl+Alt+Del重启

    • 加固点:防止误操作或恶意重启。

    • 案例:注释/etc/systemd/system.conf中的配置:

      # 原内容:CtrlAltDelBurstAction=reboot-force
      # 修改为:
      #CtrlAltDelBurstAction=reboot-force
  3. 定期更新系统

    • 加固点:修复已知漏洞。

    • 案例

      # Debian/Ubuntu
      apt update && apt upgrade -y
      # CentOS/RHEL
      yum update -y --security

8、总结

通过账户加固、服务管理、文件权限控制、内核参数优化、日志审计、安全工具部署等综合措施,可显著提升Linux系统的安全性。实际操作中需结合业务场景调整策略,并通过工具(如Lynis、OpenSCAP)验证加固效果。

三、漏洞修复案例


案例1:Shellshock漏洞(CVE-2014-6271)
  • 影响版本:Bash ≤4.3

  • 漏洞描述:通过环境变量注入恶意代码,可远程执行任意命令。

  • 修复步骤

    # 更新Bash
    sudo apt-get update && sudo apt-get install --only-upgrade bash  # Debian/Ubuntu
    sudo yum update bash -y  # RHEL/CentOS
  • 验证方法

    env x='() { :;}; echo vulnerable' bash -c "echo test"  # 若输出"vulnerable"则未修复。

案例2:Dirty COW漏洞(CVE-2016-5195)
  • 影响版本:Linux内核 2.6.22 ≤ version ≤4.8.3

  • 漏洞描述:竞争条件漏洞,允许本地用户提权到root。

  • 修复步骤

    sudo apt-get update && sudo apt-get upgrade linux-image-$(uname -r)  # Debian/Ubuntu
    sudo yum update kernel -y  # RHEL/CentOS
    sudo reboot
  • 验证方法: 使用漏洞检测脚本(如dirtycow-detect)或检查内核版本是否≥4.8.3。


案例3:Heartbleed漏洞(CVE-2014-0160)
  • 影响版本:OpenSSL 1.0.1 ~1.0.1f

  • 漏洞描述:TLS心跳扩展漏洞,可泄露服务器内存中的敏感信息。

  • 修复步骤

    sudo apt-get update && sudo apt-get install openssl libssl1.0.0  # Debian/Ubuntu
    sudo yum update openssl -y  # RHEL/CentOS
  • 验证方法: 使用nmap --script ssl-heartbleed <目标IP>检测是否修复。


案例4:Sudo提权漏洞(CVE-2021-3156)
  • 影响版本:Sudo 1.8.2 ~1.8.31p2

  • 漏洞描述:堆溢出漏洞,本地用户无需密码即可获取root权限。

  • 修复步骤

    sudo apt-get install sudo -y  # Debian/Ubuntu(自动升级到最新)
    sudo yum update sudo -y  # RHEL/CentOS
  • 验证方法: 执行sudoedit -s /,若返回"sudoedit"错误而非崩溃则已修复。


案例5:Ghost漏洞(CVE-2015-0235)
  • 影响版本:glibc ≤2.17

  • 漏洞描述gethostbyname函数缓冲区溢出,可导致远程代码执行。

  • 修复步骤

    sudo apt-get update && sudo apt-get install libc6  # Debian/Ubuntu
    sudo yum update glibc -y  # RHEL/CentOS
  • 验证方法: 使用检测脚本check_ghost.sh或检查glibc版本≥2.18。


案例6:SSH Weak MAC Algorithms(CVE-2008-5161)
  • 影响版本:OpenSSH ≤7.2

  • 漏洞描述:支持弱加密算法(如MD5),易受中间人攻击。

  • 修复步骤: 编辑/etc/ssh/sshd_config,禁用不安全的MAC算法:

    MACs hmac-sha2-512,hmac-sha2-256

    重启服务:systemctl restart sshd

  • 验证方法: 使用ssh -Q mac或扫描工具(如nmap --script ssh2-enum-algos)确认禁用弱算法。


案例7:Polkit权限提升漏洞(CVE-2021-4034)
  • 影响版本:polkit ≤0.120

  • 漏洞描述:本地用户可通过环境变量注入执行任意代码。

  • 修复步骤

    sudo apt-get update && sudo apt-get install policykit-1 -y  # Debian/Ubuntu
    sudo yum update polkit -y  # RHEL/CentOS
  • 验证方法: 执行检测命令pkexec --version,确认版本≥0.121。


案例8:Apache HTTP Server漏洞(CVE-2021-41773)
  • 影响版本:Apache 2.4.49/2.4.50

  • 漏洞描述:路径遍历漏洞,可读取服务器敏感文件。

  • 修复步骤

    sudo apt-get install apache2 -y  # Debian/Ubuntu(升级到2.4.51+)
    sudo yum update httpd -y  # RHEL/CentOS
  • 验证方法: 使用漏洞检测POC或检查Apache版本≥2.4.51。


案例9:Log4j远程代码执行漏洞(CVE-2021-44228)
  • 影响版本:Log4j 2.x ≤2.14.1

  • 漏洞描述:JNDI注入漏洞,攻击者可通过日志记录触发RCE。

  • 修复步骤

    1. 升级Log4j到2.17.0+:

      # 手动替换JAR文件或通过包管理器更新
    2. 设置环境变量禁用JNDI:

      export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
  • 验证方法: 使用扫描工具(如log4j-detector)确认版本和配置。


案例10:Linux内核Netfilter漏洞(CVE-2024-1086)
  • 影响版本:Linux内核 5.14 ~6.6

  • 漏洞描述:释放后使用(Use-After-Free)漏洞,可导致本地提权。

  • 修复步骤

    sudo apt-get update && sudo apt-get install linux-image-generic  # Debian/Ubuntu
    sudo yum update kernel -y  # RHEL/CentOS
    sudo reboot
  • 验证方法: 检查内核版本是否升级到修复版本(如6.6.15+)。


总结

以上案例覆盖了从用户态工具(如Bash、Sudo)到内核级漏洞的修复流程,同时包含配置修复(如SSH、Apache)和第三方库升级(如Log4j)。建议在修复后:

  1. 通过版本检查或漏洞扫描工具验证。

  2. 定期订阅CVE公告(如Linux内核邮件列表)。

  3. 使用自动化工具(如unattended-upgrades)或漏洞管理平台(如Tenable、Qualys)。


网站公告

今日签到

点亮在社区的每一天
去签到