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

Linux安全机制--系统层安全机制

我们知道纵深防御体系,如下图所示

系统的安全机制也是类似于此体系,接下来我们讲述系统层面的安全机制Linux 系统层安全机制是保障系统稳定运行、抵御恶意攻击的核心防线,我们讲述基础支撑模块,涵盖用户管理,软件包管理,文件系统管理。

一、用户管理

用户是系统访问的 “入口”,用户管理安全的核心目标是:避免非法账号创建、防止权限滥用、追溯用户操作,从源头减少身份相关的安全风险。

1. 账号生命周期管理:全流程管控账号状态

非法账号(如黑客后门账号)、僵尸账号(长期未使用)是系统安全的重大隐患,需通过 “创建 - 使用 - 禁用 - 删除” 全生命周期管控,确保账号 “按需存在、最小权限”。

生命周期阶段安全要求配置实践
账号创建禁止空密码、强制归属安全组、分配最小 UID/GID- 创建用户时指定组:useradd -g 普通组 -G 附加组 用户名(避免默认组混乱)- 强制设置密码:passwd 用户名(结合 PAM 策略,拒绝弱密码)- 禁止 UID=0 非 root 账号:grep -w "0" /etc/passwd(仅保留 root:x:0:0:...
账号使用限制登录时间 / IP、禁止共享账号、定期活跃度检查- 限制登录 IP:编辑 /etc/security/access.conf,添加 + : 用户名 : 192.168.1.0/24(仅允许指定网段登录)- 检查僵尸账号:lastlog(查看用户最后登录时间,对 6 个月未登录账号执行禁用)
账号禁用 / 删除离职 / 停用账号立即禁用,避免直接删除(保留审计痕迹)- 禁用账号:usermod -L 用户名(锁定密码,无法登录)或 usermod -s /sbin/nologin 用户名(禁止 shell 登录)- 彻底删除:userdel -r 用户名-r 同时删除家目录和邮件,避免残留数据)

2. 密码安全强化:抵御暴力破解与弱密码

弱密码(如 123456password)是账号被破解的主要原因,需通过 “复杂度 - 有效期 - 历史限制” 三重策略,强制用户使用安全密码。

(1)密码策略配置(依托 /etc/login.defs 与 PAM)
  • 核心配置文件/etc/login.defs(全局密码默认策略),结合 PAM 的 pam_cracklib.so 实现细粒度控制。
  • 关键参数与作用
    # /etc/login.defs 核心参数
    PASS_MAX_DAYS   90    # 密码最大有效期(90天,到期强制修改)
    PASS_MIN_DAYS   7     # 密码修改间隔(7天内不允许重复修改,防止频繁变更绕过审计)
    PASS_MIN_LEN    8     # 密码最小长度(与 PAM 策略叠加,取更严格值)
    PASS_WARN_AGE   7     # 密码到期前7天开始提醒用户
    
  • 禁止密码复用:通过 PAM 的 pam_pwhistory.so 限制使用历史密码,编辑 /etc/pam.d/system-auth
    password    requisite    pam_pwhistory.so remember=5    # 禁止使用最近5次用过的密码
    
(2)防御暴力破解:限制登录失败次数

通过 PAM 的 pam_tally2.so 或 fail2ban 工具,对多次登录失败的账号 / IP 进行锁定,防止暴力破解。

  • 临时锁定账号(pam_tally2):编辑 /etc/pam.d/login(本地登录)和 /etc/pam.d/sshd(SSH 登录),添加:
    # 登录失败5次锁定10分钟(even_deny_root 表示root也受限制)
    auth        required    pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=600
    
  • 查看 / 解锁账号pam_tally2 -u 用户名(查看失败次数)、pam_tally2 -u 用户名 -r(重置失败次数,解锁账号)。

3. 特权用户管控:限制 root 权限滥用

root 账号拥有系统最高权限,一旦泄露或滥用,后果严重。需通过 “禁止直接登录 - 细分权限 - 操作审计” 限制 root 权限。

(1)禁止 root 直接登录 SSH

SSH 是远程管理的主要方式,禁止 root 直接登录,强制通过普通用户 +sudo 提权,减少 root 账号暴露风险。

  • 配置 /etc/ssh/sshd_config
    PermitRootLogin no    # 禁止root直接登录
    AllowUsers 普通用户名  # 仅允许指定普通用户登录(可选,进一步缩小范围)
    
  • 生效:systemctl restart sshd
(2)通过 sudo 细分权限(最小权限原则)

sudo 允许普通用户在指定范围内执行特权命令,避免直接授予 root 密码。核心是通过 /etc/sudoers 配置精细化权限。

  • 安全配置示例(编辑 /etc/sudoers,需用 visudo 命令避免语法错误):
    # 允许 user1 执行 /sbin/service、/bin/systemctl(管理服务),无需输入密码
    user1  ALL=(ALL)  NOPASSWD: /sbin/service, /bin/systemctl# 禁止 user2 执行 /usr/bin/passwd root(防止修改root密码)
    user2  ALL=(ALL)  !/usr/bin/passwd root# 限制 user3 仅在 192.168.1.100 主机执行特权命令
    user3  192.168.1.100=(ALL)  ALL
    
  • 审计 sudo 操作sudo 操作默认记录到 /var/log/secure(RHEL/CentOS)或 /var/log/auth.log(Debian/Ubuntu),可通过 grep "sudo" /var/log/secure 追溯操作。

二、软件包管理

软件包(如 nginxopenssl)是系统运行的核心组件,其安全风险主要来自 “来源不可信 - 版本有漏洞 - 被篡改”。软件包管理安全的目标是:仅安装可信来源、无漏洞的软件,防止恶意软件植入

1. 软件源安全:仅信任官方 / 验证源

第三方软件源可能包含恶意软件或篡改的包,需优先使用发行版官方源,并启用 GPG 签名验证,确保软件包完整性和来源可信。

(1)配置官方源,禁用第三方源
  • RHEL/CentOS(yum/dnf)
    • 查看当前源:yum repolist,禁用非官方源:yum-config-manager --disable 第三方源ID
    • 恢复官方源:通过 yum install centos-release(CentOS)或订阅 RHEL 官方源,确保 /etc/yum.repos.d/ 下仅保留官方 .repo 文件。
  • Debian/Ubuntu(apt)
    • 编辑 /etc/apt/sources.list,仅保留官方源地址(如 Ubuntu 官方源:deb http://archive.ubuntu.com/ubuntu/ jammy main restricted)。
    • 禁用第三方源:注释 /etc/apt/sources.list.d/ 下的非官方 .list 文件。
(2)启用 GPG 签名验证(强制校验)

GPG 签名由发行版厂商签发,用于验证软件包是否被篡改。需确保包管理器强制校验签名,拒绝未签名或签名无效的包。

  • yum/dnf 配置/etc/yum.conf):
    gpgcheck=1    # 1:启用GPG校验;0:禁用(绝对禁止设置为0)
    repo_gpgcheck=1    # 1:校验源 metadata 的签名(防止源信息被篡改)
    
  • apt 配置/etc/apt/apt.conf.d/99verify):
    APT::Get::AllowUnauthenticated "false";    # 拒绝未认证的包
    Acquire::AllowInsecureRepositories "false"; # 拒绝不安全的源(如 HTTP 源,优先 HTTPS)
    
  • 导入官方 GPG 密钥(若校验失败,需重新导入):
    • CentOS:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8
    • Ubuntu:apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 官方密钥ID

2. 软件包漏洞管理:定期更新与漏洞扫描

即使是官方源软件,也可能存在已知漏洞(如 OpenSSL 的 Heartbleed 漏洞),需通过 “定期更新 - 漏洞扫描 - 版本管控” 及时修复。

(1)定期更新软件包(修复已知漏洞)
  • 安全更新优先:避免盲目全量更新(可能破坏兼容性),优先更新安全补丁。
    • RHEL/CentOS:yum update --security(仅更新安全相关补丁)。
    • Debian/Ubuntu:apt update && apt upgrade -s-s 模拟更新,确认无风险后去掉 -s 执行)。
  • 自动化更新(服务器场景):使用 yum-cron(RHEL/CentOS)或 unattended-upgrades(Debian/Ubuntu)自动安装安全更新,配置示例:
    • Ubuntu 启用自动安全更新:
      apt install unattended-upgrades
      dpkg-reconfigure unattended-upgrades  # 交互式启用,选择“是”
      
      编辑 /etc/apt/apt.conf.d/50unattended-upgrades,确保仅更新安全源:
      Unattended-Upgrade::Allowed-Origins {"${distro_id}:${distro_codename}-security";  # 仅安全更新
      };
      
(2)软件包漏洞扫描

通过工具扫描已安装软件包的漏洞,生成修复建议,弥补 “定期更新” 可能遗漏的风险。

  • 常用工具:yum-security /debsums/ OpenSCAP
    • yum-security(RHEL/CentOS):查看已安装包的漏洞:yum list-security --installed
    • debsums(Debian/Ubuntu):校验已安装包的文件完整性(检测是否被篡改):debsums -c-c 仅显示篡改的文件)。
    • OpenSCAP(跨发行版):基于安全基线扫描漏洞,生成报告:
      yum install openscap-scanner scap-security-guide  # 安装
      oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_standard --report /tmp/scan-report.html /usr/share/xml/scap/ssg/content/ssg-centos8-ds.xml  # 扫描并生成报告
      

3. 避免恶意软件:禁止安装未知包与源码编译风险

  • 禁止安装未知来源包:不直接下载 rpm/deb 包手动安装(如 rpm -ivh 未知包.rpm),若必须安装,需先校验 GPG 签名:
    • 校验 RPM 包:rpm --checksig 包名.rpm(显示 gpg OK 才可信)。
    • 校验 DEB 包:dpkg-sig --verify 包名.deb
  • 谨慎源码编译安装:源码编译(如 ./configure && make && make install)的软件无法通过包管理器管控,易存在漏洞且难以更新。若必须编译,需:
    1. 从官方网站下载源码,校验源码包的 SHA256 哈希(如 sha256sum 源码包.tar.gz 与官方提供的哈希对比)。
    2. 编译时启用安全选项(如 -fstack-protector-strong 栈保护)。

三、文件系统管理

文件系统是数据的 “容器”,其安全目标是:防止数据泄露、篡改或丢失,确保文件访问符合权限规则。除此前提到的 “挂载选项”“完整性检查” 外,还需重点关注 “分区隔离”“磁盘加密”“日志保护” 等机制。

1. 分区安全:独立分区隔离风险

将系统按 “功能模块” 拆分独立分区(如 /var/home/tmp),可防止单个分区满导致系统崩溃,同时限制恶意程序跨分区扩散。

(1)核心分区拆分建议
分区作用安全配置
/根分区,存储系统核心文件挂载选项:defaults,nodev(禁止设备文件),建议大小 50-100GB
/boot引导分区,存储内核与引导文件挂载选项:defaults,ro(只读挂载,防止内核被篡改),大小 1-2GB
/var存储日志、邮件、缓存独立分区(避免日志满导致 / 分区耗尽),挂载选项:defaults,noexec,nosuid(禁止执行程序)
/home用户家目录独立分区(隔离用户数据与系统数据),挂载选项:defaults,nodev
/tmp临时文件目录独立分区或 tmpfs 挂载(tmpfs /tmp tmpfs defaults,noexec,nosuid,size=4G 0 0),重启后数据清空
(2)分区满的应急处理

若分区满(如 /var 因日志过大满),需及时清理:

  • 查看分区使用率:df -h
  • 清理大文件:du -sh /var/log/* 找到大日志文件,删除或压缩(如 gzip /var/log/messages-202405*)。

2. 磁盘加密:防止物理层面数据泄露

若服务器物理被盗或磁盘丢失,未加密的磁盘会导致数据直接泄露。Linux 支持 “全盘加密” 和 “分区加密”,通过 LUKS(Linux Unified Key Setup)实现标准加密方案。

(1)分区加密(以 /dev/sdb1 为例)
  1. 安装 cryptsetup 工具yum install cryptsetup(RHEL/CentOS)或 apt install cryptsetup(Debian/Ubuntu)。
  2. 初始化 LUKS 加密(会清除分区数据,需提前备份):
    cryptsetup luksFormat /dev/sdb1  # 输入 "YES" 确认,设置加密密码(复杂度需高)
    
  3. 解锁加密分区
    cryptsetup luksOpen /dev/sdb1 encrypted_part  # 映射为 /dev/mapper/encrypted_part
    
  4. 格式化并挂载
    mkfs.xfs /dev/mapper/encrypted_part  # 格式化为 xfs  filesystem
    mount /dev/mapper/encrypted_part /mnt/encrypted  # 挂载到指定目录
    
  5. 开机自动解锁(需配置密钥文件,避免手动输入密码):
    • 创建密钥文件:dd if=/dev/urandom of=/etc/luks-key bs=1024 count=4(生成随机密钥)。
    • 导入密钥到 LUKS:cryptsetup luksAddKey /dev/sdb1 /etc/luks-key
    • 编辑 /etc/crypttabencrypted_part /dev/sdb1 /etc/luks-key luks
    • 编辑 /etc/fstab/dev/mapper/encrypted_part /mnt/encrypted xfs defaults 0 0
(2)全盘加密(LVM+LUKS)

服务器场景常用 “LVM 逻辑卷 + LUKS 加密”,实现灵活分区与全盘保护,核心步骤与分区加密类似,仅需将加密对象改为 LVM 物理卷(如 /dev/sda2)。

3. 日志文件安全:防止篡改与丢失

日志(如 /var/log/secure/var/log/audit/audit.log)是安全事件溯源的关键证据,需防止日志被篡改或删除。

(1)日志文件权限控制
  • 限制日志文件仅 root 可写,其他用户只读或不可访问:
    chmod 600 /var/log/audit/audit.log  # 仅 root 可读写
    chown root:root /var/log/secure     # 确保所有者为 root
    
  • 通过 logrotate 配置日志轮转(避免日志过大),同时保留历史日志(至少 30 天),编辑 /etc/logrotate.d/syslog
    /var/log/messages /var/log/secure {daily          # 每日轮转rotate 30      # 保留30天历史compress       # 压缩历史日志delaycompress  # 延迟压缩(保留最新轮转日志未压缩)notifempty     # 空日志不轮转create 0600 root root  # 新日志文件权限为 0600
    }
    
(2)日志远程备份(防止本地篡改)

将日志实时发送到远程日志服务器(如 ELK Stack、rsyslog 服务器),即使本地日志被篡改,远程备份仍可用于溯源。

  • 配置 rsyslog 远程发送(客户端):编辑 /etc/rsyslog.conf,添加远程服务器地址:
    *.* @@192.168.1.200:514  # @@ 表示 TCP 协议,192.168.1.200 为远程日志服务器IP
    
    生效:systemctl restart rsyslog

http://www.dtcms.com/a/405926.html

相关文章:

  • 大模型之bert变种
  • 华为HCIE认证-“天花板”级考试的难度解析
  • 【网络协议】数字签名与证书
  • LinkedList模拟实现
  • 如何自己做淘宝网站网页设计策划
  • 神奇的位运算——力扣136.只出现一次的数字
  • 【征文计划】深度剖析 Rokid SLAM 算法:从传感器融合到空间重建的完整技术链路
  • Pygame中实现图像旋转效果-高级2-2
  • 高新苏州网站建设wordpress首页等待画面
  • 两学一做知识问答网站施工企业招标领导小组组长的职责
  • Spring AI:RAG函数调用
  • 基于Amazon S3设置AWS Transfer Family Web 应用程序
  • 稳石氢能出席AEM电解水学术与产业化论坛,大标方AEM制氢设备批量化生产荣获技术卓越奖。
  • 渲染 Python 中用 LaTeX 语法定义的数学公式 - 例子
  • 菊风金融智能双录:为金融业务合规与信任保驾护航
  • Debian安装PVE
  • 云计算实验2——CentOS中zookeeper的安装
  • 网络管理实验1:ASN.1软件应用
  • 前端开发用什么工具?前端开发工具推荐清单、实用对比与我的使用心得
  • 做亚马逊有什么网站可以借鉴大连城市建设档案馆官方网站
  • 协议不通,数据何通?耐达讯自动化Modbus TCP与Profibus网关技术破解建筑自动化最大瓶颈
  • 新零售模式下仓储变化与发展趋势
  • Stable Video Diffusion:将潜在视频扩散模型扩展到大规模数据集——论文阅读
  • [linux仓库]解剖ELF:从文件头到进程地址空间的完美映射
  • Lisp 与 C# 交互中,类型码(TypeCode)的映射关系
  • Java基础(十四):枚举类详解
  • python+springboot+uniapp基于微信小程序的任务打卡系统
  • 【多线程】计算机领域中的各种锁
  • python+uniapp基于微信小程序的医院陪诊预约系统
  • 免费html网页模板 html5网站模板 静态网页模板