系统安全 - Linux /Docker 安全模型及实践

文章目录

  • 导图
  • Linux安全
    • Linux 安全模型
    • 用户层权限管理的细节
      • 多用户环境中的权限管理
      • 文件权限与目录权限
    • 最小权限原则的应用
    • Linux 系统中的认证、授权和审计机制
      • 认证机制
      • 授权机制
      • 审计机制
    • 小结
  • 内网安全
  • Docker安全
    • 1. Docker 服务隔离机制
      • Namespace 机制
      • Capabilities 机制
      • CGroups 机制
    • 2. Docker Daemon 安全风险
    • 3. Docker 镜像安全
      • 使用最精简的镜像
      • 最小权限原则
    • 4. 使用漏洞扫描工具
  • 小结

在这里插入图片描述


导图

在这里插入图片描述


Linux安全

Linux 安全模型

Linux 系统可以分为内核层用户层

  • 内核层负责对资源的直接管理,包括进程调度、内存管理、文件系统和硬件控制等。它的安全机制主要通过内置的权限管理、进程隔离和内存保护来确保稳定和安全。
    • 如果黑客能够成功突破内核层安全(例如通过漏洞获取 root 权限),他们可以绕过用户层的所有安全措施。这时,即使我们在用户层配置再复杂的权限,也无济于事。
  • 用户层是我们日常操作的主要部分,提供对系统资源的访问。开发者和运维人员通过用户层访问内核提供的服务。我们日常关注的安全措施,如文件权限、进程权限、日志管理等,都在用户层进行。

内核层安全重点

  • 内核层安全是通过定期更新和修补漏洞来维护的。Linux 社区会发布安全更新来修复内核中的已知漏洞,定期使用官方发行的镜像、打补丁来防止攻击者利用漏洞。

用户层安全重点

  • 权限配置:用户层的权限设置确保不同用户之间的数据和进程隔离,防止越权访问。
  • 进程隔离:Linux 通过权限和用户身份管理实现进程之间的隔离,确保一个用户的进程不会影响其他用户的进程或数据。

用户层权限管理的细节

多用户环境中的权限管理

在 Linux 多用户环境中,用户层的安全性依赖于正确的权限配置。Linux 系统使用 UID(用户 ID)和 GID(组 ID)来标识用户及其所属的组,权限则通过用户、组和其他人三类身份来控制文件和进程的访问。

主体 -> 请求 -> 客体模型

  • 主体是用户(或进程),请求是操作(如读、写、执行),客体是文件、目录或系统资源。
  • 例如,当一个用户试图读取 /etc/passwd 文件时,Linux 会检查该用户是否有权限执行这个请求,只有具备合适权限,操作才会成功。

文件权限与目录权限

Linux 中,所有文件和目录都有与之关联的权限,权限分为:

  • r(读):用户是否能读取文件或查看目录内容。
  • w(写):用户是否能修改文件或在目录中创建、删除文件。
  • x(执行):用户是否能执行文件或进入目录。
    在这里插入图片描述

权限通过 ls -l 命令可以查看,并通过 chmod 命令进行修改。对于文件和目录的权限作用有所不同:

  • 文件的权限:决定谁可以读取、修改和执行该文件。
  • 目录的权限:决定谁可以查看、添加、删除目录中的文件。

除了基本权限,Linux 还提供了额外的权限控制手段:

  • SUID/SGID:用于文件时,这些位允许用户以文件所有者或组的权限运行程序,常用于特定的系统命令。
  • 粘滞位(Sticky Bit):常用于共享目录(如 /tmp),确保用户只能删除自己创建的文件,防止滥用删除他人文件。 chmod +t /tmp可以阻止删除 /tmp 目录下其他用户的文件

最小权限原则的应用

在 Linux 系统中,最小权限原则是安全管理的核心。即为每个用户或进程分配最少的权限,以减少潜在的攻击面。尤其是在多用户共用服务器时,过多的权限可能会导致数据泄露或服务滥用。

以下是几种常见的实践:

  1. 使用普通用户而非 root 用户运行服务
    例如,运行 MySQL 服务时,使用 mysqld 命令以 mysql 用户启动进程,而不是 root。这样,即使 MySQL 服务出现漏洞,攻击者也无法直接获取 root 权限。

    sudo -u mysql mysqld_safe
    
  2. 服务进程的权限隔离
    在启动 Nginx 时,Nginx 的工作进程使用 nobody 用户身份运行。这种方法确保了即使 Web 服务遭到攻击,也无法轻易危害到系统其他部分。

    # Nginx 进程运行状态
    ps aux | grep nginx
    root      7083  0.0  0.0 61032  5324 ?        Ss   Aug12   0:01 nginx: master process
    nobody   331122 0.0  0.0 90768  31776 ?       S    11:44   0:00 nginx: worker process
    

    nobody 通常拥有整个操作系统中最小的权限

  3. 通过文件属性保护关键文件
    使用 chattr +i 命令可以为重要的文件添加不可修改属性(immutable),防止即使有权限的用户修改关键配置文件。

    sudo chattr +i /etc/passwd
    

Linux 系统中的认证、授权和审计机制

认证机制

认证确保用户的身份合法,防止未经授权的用户访问系统资源。在 Linux 系统中,用户信息存储在 /etc/passwd/etc/shadow 文件中。

  • /etc/passwd:保存用户账户信息,但不会存储密码,而是将密码占位为 x

  • /etc/shadow:保存加密后的用户密码和密码策略(如密码有效期、密码失效天数等)。
    配置密码策略可以有效提升安全性,如使用 chage 命令设置密码过期时间:

    sudo chage -M 60 testuser  # 强制 testuser 每 60 天更改密码
    

弱密码检测
为了防止弱密码攻击,可以使用工具如 John the Ripper 对密码进行审计:

unshadow /etc/passwd /etc/shadow > mypasswd
john mypasswd  # 开始检测弱密码
john --show mypasswd  # 显示已破解的密码

授权机制

授权是在用户通过认证后,系统根据权限决定其能访问哪些资源。Linux 系统通过读、写、执行权限,控制用户对文件和目录的访问。除此之外,Linux 还提供了 ACL(访问控制列表)来实现更精细的权限控制。

最小权限原则的扩展
滥用 root 是 Linux 安全中的普遍问题,所有长时间运行的进程(如数据库、Web 服务)应尽量避免使用 root 权限,而使用特定用户账户来运行这些进程。例如:

sudo -u redis redis-server  # 使用非 root 账户运行 Redis

审计机制

审计是指对系统操作进行记录和分析,以便在出现问题时能够追踪到源头。在 Linux 系统中,主要的日志文件位于 /var/log 目录下,常见的日志包括:

  • /var/log/wtmp/var/run/utmp:记录用户登录和注销事件。 用户登录日志本身为二进制文件,我们无法直接通过文本方式查看,但是可以配合who/users/last/lastlog这样的命令来获取
  • /var/log/secure:记录与安全相关的事件,如用户的认证尝试。
  • /var/log/messages:记录系统及应用的普通信息。

可以通过命令 wholast 来查看用户登录日志。例如:

last  # 查看最近的用户登录记录

日志管理与分析

默认情况下,Linux 会通过 logrotate 对日志执行相应的保留策略(比如日志切割和旧日志删除等)。通过配置/etc/logrotate.conf可以对不同日志的保留策略进行修改日志可以通过 logrotate 来管理,定期归档旧日志,避免日志文件过大。

此外,使用日志分析工具如 ELK 或 Zabbix,可以对系统日志进行实时监控,配置安全报警规则来检测潜在的攻击行为。


小结

在这里插入图片描述

Linux 安全体系的核心是正确的权限配置和最小权限原则的实践。通过配置合适的权限、使用非 root 账户运行服务,以及对日志的有效监控,可以大大提升系统的安全性。配合 HIDS 等安全工具,为 Linux 系统提供额外的保护层。


内网安全

系统安全 - 内网安全与防护措施


Docker安全

  • Docker 服务:Docker 所提供的功能以及在宿主机 Linux 中的 Docker 进程。
  • Docker 镜像:通过 Dockerfile 构建出来的 Docker 镜像。
  • Docker 容器:实际运行的 Docker 容器,通常来说,一个 Docker 镜像会生成多个
  • Docker 容器。Docker 容器运行于 Docker 服务之上。

1. Docker 服务隔离机制

Namespace 机制

Namespace是Docker用于实现轻量化容器隔离的核心机制。它为每个容器创建一个独立的名称空间,包括进程、网络、文件系统等,从而实现隔离。然而,这种隔离是"伪隔离",因为容器需要与宿主机共享某些关键资源,例如文件系统的某些部分(如/proc目录、/sys目录)和设备(如存储设备)。

在这里插入图片描述

Capabilities 机制

Capabilities机制为容器中的进程提供了更细粒度的权限控制。例如,容器中可能需要执行某些操作(如绑定低端口),但不应授予完整的ROOT权限。通过这种机制,可以限制容器的权限,降低Docker逃逸的风险。然而,过于严格的限制可能会导致容器内应用功能受限,因此需要仔细平衡。

CGroups 机制

CGroups用于控制Docker容器对CPU、内存、I/O等资源的占用,防止某个容器过度消耗宿主机资源。这对于防止资源耗尽攻击至关重要。

Docker 服务可以利用 CGroups 机制来实现对容器中内存、CPU 和 IO 等的限制。比如,通过下面的命令,我们就可以限制 Docker 容器只使用 2 个 CPU 和 100MB 的内存来运行了

docker run -it --cpus=2 --memory="100m" ubuntu:latest /bin/bash

所以,当一个宿主机中运行了多个 Docker 容器的时候,我们可以通过 CGroups,给每一个容器弹性地分配 CPU 资源。同样地,这个限制既不能过松,过松会导致某一个 Docker容器耗尽宿主机资源,也不能过严,过严会使得容器内的服务得不到足够的资源支持。这都需要我们自己经过慎重考量来进行配置,没有默认的安全机制可以辅助我们

在这里插入图片描述


2. Docker Daemon 安全风险

Docker守护进程运行时需要ROOT权限,因此它成为潜在攻击者的重要目标。如果守护进程被攻击者控制,黑客就可以通过Docker的API接口,执行任意操作,包括创建或修改镜像、访问宿主机文件系统等。特别是如果Docker的远程API端口未配置认证(默认监听2375端口),黑客可通过该接口直接控制Docker服务。

防护措施

  • API认证:启用TLS认证来保护Docker API接口,避免未经授权的访问。

    dockerd --tlsverify \
    --tlscacert=ca.pem \
    --tlscert=server-cert.pem \
    --tlskey=server-key.pem

    启用 TLS 验证:

    • –tlsverify:要求客户端和服务器之间的 TLS 双向认证。
      指定 CA 证书:

    • –tlscacert=ca.pem:使用 CA(Certificate Authority)证书文件 ca.pem 来验证连接的客户端。
      指定服务器证书:

    • –tlscert=server-cert.pem:指定 Docker 守护进程的服务器证书文件,server-cert.pem。
      指定服务器私钥:

    • –tlskey=server-key.pem:指定与服务器证书配套的私钥文件,server-key.pem。

    curl https://127.0.0.1:2376/images/json \
    --cert cert.pem \
    --key key.pem \
    --cacert ca.pem
    
    • https://127.0.0.1:2376:这是 Docker 守护进程的本地地址,端口 2376 是 Docker 守护进程的默认 TLS 端口。
      /images/json:这是 Docker API 的一个端点,用于获取 Docker 中所有镜像的 JSON 格式列表。
    • –cert cert.pem:指定客户端证书文件,cert.pem 用于身份验证。
    • –key key.pem:指定客户端私钥文件,key.pem 用于和 cert.pem 配合,完成双向认证。
    • –cacert ca.pem:指定 CA 证书,用于验证 Docker 守护进程的服务器证书是否由受信任的 CA 颁发。
  • 守护进程权限:采用最小权限原则,限制守护进程的权限。


在这里插入图片描述

3. Docker 镜像安全

使用最精简的镜像

避免使用功能过多的基础镜像,如常见的Node.js或Ubuntu镜像,这些镜像可能包含大量无用功能以及已知的安全漏洞。通过使用精简版本(如alpine),可以显著减少镜像的漏洞暴露面。

最小权限原则

默认情况下,Docker容器的进程以ROOT身份运行。这种配置不利于安全,尤其是在存在漏洞的情况下。因此,建议在Dockerfile中为容器的服务创建和使用低权限的用户,以限制其对宿主机的影响。例如,可以通过USER node来避免使用ROOT权限运行服务。

FROM ubuntu# 创建一个 node 用户,没有密码、没有 home 目录、并且没有登录 shell
RUN groupadd -r node && useradd -r -g node -s /bin/false node# 切换到 node 用户运行后续命令
USER node# 运行应用程序(假设 index.js 是您的应用入口)
CMD ["node", "index.js"]
  1. groupadd -r node: 创建一个名为 node 的系统组 (-r 标志表示系统组)。
  2. useradd -r -g node -s /bin/false node: 创建一个名为 node 的用户:
    • -r: 系统用户(不会创建 home 目录)。
    • -g node: 将用户添加到 node 组。
    • -s /bin/false: 禁止用户登录,表示这是一个非交互式用户。
  3. USER node: 切换到 node 用户来运行后续命令,确保容器中的进程不是以 root 身份运行。
  4. CMD ["node", "index.js"]: 使用 node 来运行您的应用程序 index.js。使用数组形式的 CMD 可以避免 shell 的使用,直接执行命令。

通过不为用户指定密码、不允许登录 shell 以及避免创建 home 目录,为容器中的 node 用户设置了最低权限,减少了潜在的攻击面。

确保 index.js 文件已经存在于正确的路径中,或者可以在 Dockerfile 中通过 COPY 指令将其复制到镜像内。


4. 使用漏洞扫描工具

工具如Clair可以自动分析Docker镜像中的已知漏洞,提供静态分析,并与已知的漏洞数据库进行比对,从而识别和修复潜在的安全问题。


小结

在讨论Docker安全时,虽然容器技术提供了一定的隔离机制,但这些机制并不是完美的,特别是在伪隔离和共享部分资源的情况下,存在Docker逃逸的风险。通过合理配置Namespace、Capabilities、CGroups、守护进程认证和镜像最小化,可以显著提高Docker环境的安全性。此外,采用漏洞扫描工具可进一步加强安全。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

JavaWeb - 8 - 请求响应 分层解耦

请求响应 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程…

Oracle中MONTHS_BETWEEN()函数详解

文章目录 前言一、MONTHS_BETWEEN()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中,MONTHS_BETWEEN()函数可以用来计算两个日期之间的月份差。它返回一个浮点数,表示两个日期之间的整月数。 一、MONTHS_BETWEEN()的语法 MONTHS_BETWEEN(dat…

水下声呐数据集,带标注

水下声呐数据集,带标注 水下声呐数据集 数据集名称 水下声呐数据集 (Underwater Sonar Dataset) 数据集概述 本数据集是一个专门用于训练和评估水下目标检测与分类模型的数据集。数据集包含大量的水下声呐图像,每张图像都经过专业标注,标明…

vSAN05:vSAN延伸集群简介与创建、资源要求与计算、高级功能配置、维护、故障处理

目录 vSAN延伸集群延伸集群创建延伸集群的建议网络配置vSAN延伸集群的端口见证主机的资源要求vSAN延伸集群中见证节点带宽占用vSAN延伸集群的允许故障数vSAN延伸集群不同配置下的空间占用 vSAN延伸集群的HA配置vSAN延伸集群的DRS配置vSAN存储策略以及虚拟机/主机策略的互操作vS…

华为最新业绩出炉!上半年营收4175亿元,同比增长34%!

华为2024年上半年经营业绩分析:稳健发展,符合预期 [中国,深圳,2024年8月29日] 今日,华为发布了其2024年上半年的经营业绩,整体表现稳健,结果符合预期。在复杂多变的全球市场环境下,华为凭借强大的创新能力和市场洞察力,实现了销售收入和净利润的显著增长。 上半年,华…

C语言:预编译过程的剖析

目录 一.预定义符号和#define定义常量 二.#define定义宏 三.宏和函数的对比 四、#和##运算符 五、条件编译 在之前,我们已经介绍了.c文件在运行的过程图解,大的方面要经过两个方面。 一、翻译环境 1.预处理(预编译) 2.编译 3…

Spring Boot 整合 Keycloak

1、概览 本文将带你了解如何设置 Keycloak 服务器,以及如何使用 Spring Security OAuth2.0 将 Spring Boot 应用连接到 Keycloak 服务器。 2、Keycloak 是什么? Keycloak 是针对现代应用和服务的开源身份和访问管理解决方案。 Keycloak 提供了诸如单…

Unity MVC框架演示 1-1 理论分析

本文仅作学习笔记分享与交流,不做任何商业用途,该课程资源来源于唐老狮 1.一般的图解MVC 什么是MVC我就不说了,老生常谈,网上有大量的介绍,想看看这三层都起到什么职责?那就直接上图吧 2.我举一个栗子 我有…

人工智能新闻和发展 (24001)- By 10/4/2024

1. 谷歌增强了搜索中的人工智能,允许对图像进行语音提问。 Google adding AI to answer voiced questions about images | AP NewsGoogle is pumping more artificial intelligence into its search engine. New features will enable people to voice questions a…

15分钟学 Python 第39天:Python 爬虫入门(五)

Day 39:Python 爬虫入门数据存储概述 在进行网页爬虫时,抓取到的数据需要存储以供后续分析和使用。常见的存储方式包括但不限于: 文件存储(如文本文件、CSV、JSON)数据库存储(如SQLite、MySQL、MongoDB&a…

无神论文解读之ControlNet:Adding Conditional Control to Text-to-Image Diffusion Models

一、什么是ControlNet ControlNet是一种能够控制模型生成内容的方法,能够对文生图等模型添加限制信息(边缘、深度图、法向量图、姿势点图等),在当今生成比较火的时代很流行。 这种方法使得能够直接提供空间信息控制图片以更细粒…

PCL 1.8.1 + VTK 1.8.0 + QT5.14.2+ VS2017 环境搭建

先看看效果: PCL 1.8.1下载安装: Tags PointCloudLibrary/pcl GitHub 安装完成后: 如果VTK想重新编译的,可以看我的这篇博客:

Spring14——案例:利用AOP环绕通知计算业务层接口执行效率

前面介绍了这么多种通知类型,具体该选哪一种呢? 我们可以通过一些案例加深下对通知类型的学习。 34-案例:利用AOP环绕通知计算业务层接口执行效率 需求分析 这个需求也比较简单,前面我们在介绍AOP的时候已经演示过: 需求:任意业务层接口…

冯诺依曼体系|操作系统

目录 一、硬件:冯诺依曼体系 1.冯诺依曼体系结构 2.冯诺依曼体系结构组成 3.内存的重要性 (1)提升运行速度 (2)提升运行效率 二、软件:操作系统 1.什么是操作系统 (1)内部理…

【GeekBand】C++设计模式笔记6_Decorator_装饰模式

1. “单一职责”模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。典型模式 DecoratorBridge 2. Decorator 装饰模…

地理空间数据存储与处理:MySQL空间数据类型的优化与应用!

在 MySQL 数据库中,空间数据类型用于存储和处理地理空间数据。这些数据类型允许我们在开发时可在数据库中存储和操作地理位置、几何形状和地理空间关系等信息。 一、什么是空间数据类型 MySQL 中的空间数据类型主要包括以下几种: GEOMETRY&#xff1a…

iMazing只能苹果电脑吗 Win和Mac上的iMazing功能有区别吗

在当今数字时代,管理和备份手机数据变得越来越重要。无论是转移照片、备份短信,还是管理应用程序,一个强大的工具可以大大简化这些操作。iMazing作为一款备受好评的iOS设备管理软件,已经成为许多用户的选择。但是,许多…

SpringBoot+ElasticSearch7.12.1+Kibana7.12.1简单使用

案例简介 本案例是把日志数据保存到Elasticsearch的索引中,并通过Kibana图形化界面的开发工具给查询出来添加的日志数据,完成从0到1的简单使用 ElasticSearch职责用法简介 ElasticSearch用在哪 ElasticSearch在我这个案例中,不是用来缓解增…

STM32编码器接口解析及抗噪声措施探讨

1. 引言 在现代控制系统中,编码器扮演着非常重要的角色。它就像一个精密的测量工具,可以告诉我们机械部件的位置和运动状态。在STM32微控制器中,编码器接口可以轻松地与各种编码器连接,实现精确的控制。我将在这里探讨STM32编码器…

图文深入理解Oracle Network配置管理(一)

List item 本篇图文深入介绍Oracle Network配置管理。 Oracle Network概述 Oracle Net 服务 Oracle Net 监听程序 <oracle_home>/network/admin/listener.ora <oracle_home>/network/admin/sqlnet.ora建立网络连接 要建立客户机或中间层连接&#xff0c;Oracle…