#渗透测试#SRC漏洞挖掘#云技术基础03之容器相关

目录

一、Podman相关

(一)Podman简介

(二)Pod相关操作

二、容器相关

(一)容器概念

(二)容器的历史发展

(三)Capabilities相关

三、Kubernetes(k8s)相关

(一)Kubernetes简介

(二)Kubernetes的核心概念

(三)Kubernetes的操作

四、Git相关

(一)Git简介

(二)Git的安装

(三)Git的基本使用


一、Podman相关

(一)Podman简介

Podman是Docker的替代产品,它无守护进程。在运行容器时,若不加sudo启动可能会报错,因为默认禁止侦听1024以下端口,例如运行httpd容器可以使用sudo podman run -d --r-m --network host httpd命令。

(二)Pod相关操作

  1. 创建Pod
    • 可以创建名为wha的空pod,命令为podman pod create --name wha
    • 然后向这个pod中加入容器,如运行httpd容器和alpine/curl容器,可以分别使用podman run -d --pod wha httpdpodman run -pod wha -it alpine/curl /bin/asho命令,之后在容器内可以使用curl localhost进行相关操作。

二、容器相关

(一)容器概念

容器是一种轻量级的虚拟化技术,用于将应用程序及其所有依赖项打包在一起,以便在不同的计算环境中进行移植和运行。它提供了一种隔离的运行环境,使得不同应用程序能够在独立的文件系统、网络和进程空间中运行,从而提升了安全性和稳定性。容器是一个轻量级、可执行的软件包,包含运行某个特定应用所需的所有代码、运行时环境、库和配置文件。与运行在物理或虚拟机上的应用不同,容器与宿主机共享内核,但在用户空间中以隔离的方式运行。

(二)容器的历史发展

  1. 早期技术
    • 197x年代引入chroot,它是Linux上最原始的沙盒之一,可以指示进程的新根目录,但chroot中的进程可以访问网络、挂载和其他内核功能,攻击者如破解其中进程,则能够逃逸到主机其余部分。进入chroot目录可以使用sudo chroot /home/userlroots/min/ /bin/bash命令查看主机ip等操作,虽然chroot实现了某种形式的分段,但并不完美。
  2. 重要技术的引入
    • 1999年FreeBSD发布Jails,在chroot之上提供更多限制(Linux不支持)。
    • 2002年引入namespaces,在需要时可分离内核资源,位于单独namespace中的进程不知道主机网络或其他进程网络。Linux中有八种用户命名空间,包括挂载、进程ID、网络、进程间通信、UTS、用户ID、控制组、时间、syslog等。以PID命名空间为例,可以查看当前shell的PID(如使用echo $$),还可以在新命名空间中运行bash(如使用sudo unshare --fork --pid --mount /bin/bash)来创建容器化环境等操作来进一步隔离命名空间。
    • 2006年谷歌引入进程容器,后被称为cgroup,可将内存和CPU资源限制在特定进程中。结合cgroup和命名空间发布了Linux容器(LXC)项目,可创建在单独命名空间中运行的容器。

(三)Capabilities相关

  1. Capabilities概念
    • Linux将一些系统级任务分组为40多个类别,称为Capabilities。能力允许非特权进程运行特定的系统级任务,而无需授予其完全访问权。例如Docker默认不使用用户命名空间,为了防止特权内核调用,其使用内核capabilities和seccomp配置文件限制访问。Linux具有特权或非特权进程,具有正确权限的非特权进程可以写入系统文件,但特权进程几乎无所不能,当非特权用户只需要特殊权限时,可使用Capabilities。
  2. 常见Capabilities
    • CAP_CHOWN:允许进程修改文件所有者。
    • CAP_NET_ADMIN:对网络配置(IP、防火墙等)执行管理任务。
    • CAP_NET_BIND_SERVICE:允许绑定低于1024的端口。
    • CAP_NET_RAW:允许使用RAW套接字。
    • CAP_SYS_ADMIN:“根”权限(危险),启用过多的功能集。
    • CAP_SYS_BOOT:允许重新启动主机。
    • CAP_SYS_MODULE:允许加载和卸载内核模块。
    • CAP_SYS_TIME:允许进程设置系统时钟。
    • CAP_SYS_CHROOT:允许使用chroot。
    • CAP_AUDIT_WRITE:允许写入内核审计日志。
  3. 提权隐患示例
    • 以nmap工具为例,内核限制进程使用自定义数据包创建原始套接字的能力,非特权用户需要运行调用原始套接字能力的命令时存在提权操作。如先使用sudo cp /usr/bin/nmap /usr/bin/nmap - cap将nmap工具复制一份,再使用sudo setcap cap_net_raw+eip /usr/bin/nmap - cap赋予权限,最后使用nmap - cap --privileged 127.0.0.1 - sS进行扫描。这里的提权隐患在于随意提升工具的权限可能会被恶意用户利用,如果恶意用户获得对这个工具的控制,可能对系统进行破坏,绕过系统正常的安全机制,使系统更容易受到攻击等。

三、Kubernetes(k8s)相关

(一)Kubernetes简介

Kubernetes,通常简称为K8s,是一个开源的容器编排平台。它可以自动化部署、扩展和管理容器化应用程序,能够在多个服务器上高效地运行容器,确保应用的高可用性和可扩展性。

(二)Kubernetes的核心概念

  1. Pod
    • Pod是Kubernetes中最小的可部署单元,可以包含一个或多个容器,这些容器共享网络命名空间和存储卷,并且被一起调度和管理。
  2. Deployment
    • 用于管理Pod的副本数量和更新策略,可以确保应用始终保持指定数量的副本在运行,并且可以实现滚动更新等功能。
  3. Service
    • 定义了一组Pod的访问方式,提供了一个稳定的IP地址和端口,使得外部可以通过这个地址访问到一组Pod。
  4. Node
    • 是Kubernetes中的工作节点,可以是物理服务器或虚拟机。每个Node上运行着Kubelet和容器运行时,负责管理容器的生命周期。

(三)Kubernetes的操作

  1. 安装
    • 可以安装Minikube(一种用于本地开发的Kubernetes环境),先下载Minikube的安装包(根据操作系统选择合适版本),然后按照安装向导进行安装,安装完成后使用minikube start命令启动Minikube。
  2. 部署应用
    • 创建一个Deployment,例如部署一个Nginx服务器可以使用kubectl create deployment nginx --image = nginx命令,然后查看Deployment状态使用kubectl get deployments命令。为了让外部可以访问到Nginx服务器,需要创建一个Service,使用kubectl expose deployment nginx --port = 80 --type = NodePort命令,查看Service信息使用kubectl get services命令。
  3. 扩展应用
    • 扩展Deployment的副本数量,如将Nginx的副本数量扩展到3,可以使用kubectl scale deployment nginx --replicas = 3命令,查看副本数量是否已经扩展使用kubectl get deployments命令,获取Service的NodePort后,可以在浏览器中使用<Minikube IP>:<NodePort>的地址访问Nginx服务器。
  4. 更新应用
    • 更新Deployment的镜像,如将Nginx的镜像更新为一个新的版本,可以使用kubectl set image deployment/nginx nginx = new - image:version命令,查看更新进度使用kubectl rollout status deployment/nginx命令。

四、Git相关

(一)Git简介

Git是一个分布式版本控制系统,用于跟踪文件的变化,方便团队协作开发软件项目。它可以记录文件的历史版本,允许开发者在不同版本之间切换,并且可以合并多个开发者的修改。

(二)Git的安装

  1. 不同操作系统的安装方法
    • Windows:可以从Git官方网站下载安装程序进行安装。
    • macOS:可以使用Homebrew等包管理器安装Git。
    • Linux:可以通过系统的包管理器安装Git,例如在Ubuntu上可以使用sudo apt - get install git

(三)Git的基本使用

  1. 仓库操作
    • 初始化仓库:在一个新的项目目录中,使用git init命令初始化一个Git仓库。
    • 添加文件:使用git add <文件名>命令将文件添加到暂存区,也可以使用git add.将当前目录下的所有文件添加到暂存区。
    • 提交更改:使用git commit - m "提交说明"命令将暂存区的文件提交到本地仓库。
    • 查看状态:使用git status命令查看当前仓库的状态,包括哪些文件被修改、哪些文件在暂存区等。
    • 查看历史记录:使用git log命令查看提交历史记录。
  2. 分支管理
    • 创建分支:使用git branch <分支名>命令创建一个新分支。
    • 切换分支:使用git checkout <分支名>命令切换到指定分支。
    • 合并分支:当在一个分支上完成工作后,可以将其合并到另一个分支。首先切换到目标分支,然后使用git merge <源分支名>命令进行合并。
  3. 远程仓库操作
    • 添加远程仓库:使用git remote add <远程仓库名> <远程仓库地址>命令添加一个远程仓库。
    • 推送更改:使用git push <远程仓库名> <分支名>命令将本地分支的更改推送到远程仓库。
    • 拉取更改:使用git pull <远程仓库名> <分支名>命令从远程仓库拉取最新的更改并合并到本地分支。
  4. 安全相关
    • 避免敏感信息泄露:不要在Git仓库中提交敏感信息,如密码、密钥、个人身份信息等。如果不小心提交了敏感信息,可以使用git rm --cached <文件名>命令从暂存区删除文件,然后使用git commit --amend命令修改上一次提交;创建一个.gitignore文件,列出不需要被跟踪的文件和目录;确保与Git远程仓库的通信是加密的,可以使用SSH或HTTPS协议进行通信。
    • 定期备份:定期备份Git仓库,以防止数据丢失,可以使用Git的备份工具,或者将仓库复制到其他存储设备中。
    • 定期进行安全审计:定期检查Git仓库的安全性,包括权限设置、敏感信息泄露等,可以使用第三方工具进行安全审计。
  5. 协作开发相关
    • 克隆仓库:如果要参与一个项目,可以使用git clone <远程仓库地址>命令克隆仓库到本地。
    • 处理冲突:当多个开发者同时修改同一个文件时,可能会出现冲突,在合并分支时,需要手动解决冲突,然后提交更改。

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

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

相关文章

前端搭建低代码平台,微前端如何选型?

目录 背景 一、微前端是什么&#xff1f; 二、三大特性 三、现有微前端解决方案 1、iframe 2、Web Components 3、ESM 4、EMP 5、Fronts 6、无界&#xff08;文档&#xff09; 7、qiankun 四、我们选择的方案 引入qiankun并使用&#xff08;src外层作为主应用&#xff09; 主应…

Ubuntu 22.04.4 LTS + certbot 做自动续签SSL证书(2024-11-14亲测)

certbot 做自动续签SSL证书 为了为您的域名 csbst.xyz 设置 SSL 证书并启用 HTTPS&#xff0c;您可以使用 Certbot。Certbot 是一个易于使用的客户端&#xff0c;它可以自动获取和安装 SSL/TLS 证书&#xff0c;以便使您的网站支持 HTTPS。 以下是在您的服务器上使用 Certbot …

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code&#xff0c;选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code&#xff0c;同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

git分支合并到远程后如何回滚合并

在GitLab中删除远程仓库的某个特定commit并不是一个直接的操作&#xff0c;因为Git版本控制系统的设计是为了保持历史记录的完整性和不可变性。然而&#xff0c;你可以通过以下步骤来实现删除某个特定的commit&#xff1a; 回退到目标commit之前的状态&#xff1a; 首先&#x…

C++——视频问题总结

1、C和C的区别 CC面向过程对象注重程序的实现逻辑程序的整体设计内容C语言采用了一种有序的编程方法——结构化编程&#xff1a;将一个大型程序分解为一个个小型的&#xff0c;易于编写的模块&#xff0c;所有模块有序调动&#xff0c;形成了一个程序的完整的运行链C将问题分解…

如何为 SeaTunnel 配置 MySQL 用户并授予权限

在使用 SeaTunnel 进行数据处理与传输时&#xff0c;保障数据源的连接与权限配置尤为重要。本文将逐步解析如何在 MySQL 中创建用于 SeaTunnel 访问的用户&#xff0c;并授予其适当的权限&#xff0c;以满足不同操作需求。 1. 创建用户 在 MySQL 中&#xff0c;创建用户是配置…

Linux——GPIO输入输出裸机实验

学习了正点原子Linux环境下的GPIO的输入输出的裸机实验学习&#xff0c;现在进行一下小结&#xff1a; 启动文件start.S的编写 .global _start .global _bss_start _bss_start:.word __bss_start.global _bss_end _bss_end:.word __bss_end_start:/*设置处理器进入SVC模式*/m…

Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件

前一篇文章中讲述了如何使用cyberchef提取HTTP/TLS数据包中的文件,详见《Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件》,链接这里,本文讲述下如何使用cyberchef提取FTP/TCP数据包中的文件。 FTP 是最为常见的文件传输协议,和HTTP协议不同的是FTP协议传输…

深度学习和图像处理

看来你对深度学习和图像处理很感兴趣呢&#xff0c;让我来一一解答你的疑惑吧。 深度学习高纬度特征 首先&#xff0c;我猜你是想问“深度学习中的高维特征”吧。在深度学习中&#xff0c;随着网络层数的加深&#xff0c;网络的感受野逐渐变大&#xff0c;语义表达能力也随之增…

51c大模型~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244 #猎户座 「草莓」即将上线&#xff0c;OpenAI新旗舰大模型曝光&#xff0c;代号「猎户座」 ChatGPT 要进化了&#xff1f; 本月初&#xff0c;OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片&#xff0…

Object类中的方法

Object类提供了如下几个常用方法&#xff1a; Class<?> getClass()&#xff1a;返回该对象的运行时类。boolean equals(Object obj)&#xff1a;判断指定对象与该对象是否相等。int hashCode()&#xff1a;返回该对象的hashCode值。在默认情况下&#xff0c;Object类的…

【NOIP提高组】潜伏者

【NOIP提高组】潜伏者 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; R国和S国正陷入战火之中&#xff0c;双方都互派间谍&#xff0c;潜入对方内部&#xff0c;伺机行动。 历尽艰险后&#xff0c;潜伏于 S 国的R 国间谍小C 终于摸清了S 国…

深入理解 `@TableId(type = IdType.AUTO)`:使用方法及其与其他主键生成策略的区别

在MyBatis-Plus&#xff08;简称MP&#xff09;中&#xff0c;TableId 注解是用来标注实体类中主键的字段的&#xff0c;而 type IdType.AUTO 是一个常见的配置选项&#xff0c;它指定了主键的生成策略。在实际开发中&#xff0c;如何配置主键生成策略对数据库的性能和稳定性有…

安培环路定理

回忆 静电场中的回路定理&#xff1a;→静电场是保守场 安培环路定理 1、圆形回路包围无限长载流直导线 &#xff08;1&#xff09;回路逆时针 &#xff08;2&#xff09;回路顺时针 规定&#xff1a; 回路正向由右手螺旋定则判断&#xff08;根据回路绕行方向&#xff0c;…

Locally Linear Embedding (LLE)

Locally Linear Embedding (LLE) Locally Linear Embedding (LLE) 是一种非线性降维算法&#xff0c;通常用于高维数据的流形学习。其核心思想是&#xff1a;假设数据点在局部是线性结构&#xff0c;通过保留每个数据点的局部线性结构关系&#xff0c;将数据嵌入到低维空间中。…

wsl配置ubuntu22.04,并配置docker

wsl配置ubuntu22.04&#xff0c;并配置docker 文章目录 wsl配置ubuntu22.04&#xff0c;并配置docker一、在Windows上安装Linux子系统前提条件安装步骤 二、wsl安装系统到其他盘①查看wsl运行状态&#xff0c;将其保持在关闭状态②导出当前Linux的镜像③注销之前的系统并检查④…

「QT」文件类 之 QDir 目录类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

Xcode 16 pod init失败的解决方案

目录 前言 一、错误重现 二、解决方案 1.右击项目修改文件展示方式 2.修改.xcodeproj文件 3.参考文档 前言 我们使用Xcode创建新项目之后&#xff0c;执行pod init报错。我们看一下如何解决。 一、错误重现 RuntimeError - PBXGroup attempted to initialize an object …

Mysql-DDL语句

文章目录 DDL 语句DDL 操作库创建数据库修改数据库使用数据库 DDL 操作表Mysql 的数据类型创建表修改表结构 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Mysql专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月14日11点30分 DDL 语…