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

#渗透测试#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.kler.cn/a/393181.html

相关文章:

  • 鸿蒙next版开发:ArkTS组件点击事件详解
  • 探索Pillow库:Python图像处理的瑞士军刀
  • Web大学生网页作业成品——婚礼婚纱网页设计与实现(HTML+CSS)(6个页面)
  • 24/11/12 算法笔记<强化学习> Policy Gradient策略梯度
  • vue2或vue3的name属性有什么作用?
  • vue3 pdf base64转成文件流打开
  • 如何用Chrome的Network面板分析HTTP报文
  • 壁仞科技上市前最后一波 校招 社招 内推
  • 基于Java Springboot在线教育学习系统
  • 卫导调零天线功率倒置算法原理及MATLAB仿真
  • 【paper】分布式无人水下航行器围捕智能目标
  • ONLYOFFICE 8.2深度测评:集成PDF编辑、数据可视化与AI功能的强大办公套件
  • Git的使用(基础语句)
  • [AIGC] Python批量处理Excel中的ASR语音文本数据
  • vue项目多入口文件。vue.config.js如何修改配置
  • Python 操作 Excel 表格从简单到高级用法
  • C 语言 数组交换最小值和最大值
  • goframe开发一个企业网站 统一返回响应码 18
  • 2024-11-13 Unity Addressables2——寻址资源设置
  • 【vue2.0入门】vue基本语法
  • 【论文笔记】Prefix-Tuning: Optimizing Continuous Prompts for Generation
  • Spring框架之策略模式 (Strategy Pattern)
  • NoETL
  • 【网络安全】OSI网络安全体系结构
  • 接口自动化分支管理规范
  • Android音频架构