云原生|kubernetes|2022年底cks真题解析(11-16)

news2024/12/23 13:25:10

前言:

接上一篇文章:云原生|kubernetes|2022年底cks真题解析(1-10)_晚风_END的博客-CSDN博客

2022年底的csk真题第二部分 11题到16题

十一,

Trivy 扫描镜像安全漏洞

题目:

Task
使用 Trivy 开源容器扫描器检测 namespace kamino 中 Pod 使用的具有严重漏洞的镜像。
查找具有 High 或 Critical 严重性漏洞的镜像,并删除使用这些镜像的 Pod。
注意:Trivy 仅安装在 cluster 的 master 节点上,
在工作节点上不可使用。
你必须切换到 cluster 的 master 节点才能使用 Trivy。

解析:

这道题比较的简单,具体的trivy扫描工具的部署见我的博客:云原生|kubernetes|安全漏扫神器trivy的部署和使用_晚风_END的博客-CSDN博客_trivy

当然了,在考试环境,不存在无法升级trivy-db数据库的问题,可以放心使用。trivy扫描镜像漏洞还是比较快的,基本每个镜像十来秒就扫描完了

根据题目要求,关键点在于如何找到给定的namespace kamino内的pod所有的所使用的镜像名称,下面提供一个比较简单的方法:

kubectl get po --help
。。。。。。。。。前面的略略略。。。。。。。。。。
Usage:
  kubectl get
[(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide]
(TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]

OK,我们选用custom-columns自定义字段来输出镜像名称(这里以kube-system这个namespace为例):

kubectl get po -n kube-system --output=custom-columns="IMAGE:.spec.containers[*].image"
IMAGE
docker.io/calico/kube-controllers:v3.21.2
docker.io/calico/node:v3.21.2
docker.io/calico/node:v3.21.2
docker.io/calico/node:v3.21.2
registry.aliyuncs.com/google_containers/coredns:v1.8.4
registry.aliyuncs.com/google_containers/coredns:v1.8.4
registry.aliyuncs.com/google_containers/etcd:3.5.0-0
registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.10
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.22.10
registry.aliyuncs.com/google_containers/kube-proxy:v1.22.10
registry.aliyuncs.com/google_containers/kube-proxy:v1.22.10
registry.aliyuncs.com/google_containers/kube-proxy:v1.22.10
registry.aliyuncs.com/google_containers/kube-scheduler:v1.22.10
ccr.ccs.tencentyun.com/gcr-containers/metrics-server:v0.5.2

然后使用for循环检测:

 a=`kubectl get po -n kube-system  --output=custom-columns="IMAGE:.spec.containers[*].image"`
 
for i in $a;do trivy image --skip-update  -s 'HIGH,CRITICAL' $i;done

检测结果可以重定向到文件内,然后用搜索大法查看结果即可,有 High 或 Critical漏洞的pod删除掉即可。

解答:

1 切换到 Master 的 candidate 下
ssh master01

 

2 获取命名空间 kamino 下的所有 pod 的 image
a=`kubectl get po -n kamino  --output=custom-columns="IMAGE:.spec.containers[*].image"`
 
3, for 循环扫描
for i in $a;do trivy image --skip-update  -s 'HIGH,CRITICAL' $i;done >11.txt
4,
人肉搜索上面的扫描结果,有符合漏洞的pod手动删除并确认结果即可

十二,

Container 安全上下文

题目:

Context
Container Security Context 应在特定 namespace 中修改 Deployment。
Task
按照如下要求修改 sec-ns 命名空间里的 Deployment secdep
一、用 ID 为 30000 的用户启动容器(设置用户 ID 为: 30000)
二、不允许进程获得超出其父进程的特权(禁止 allowPrivilegeEscalation)
三、以只读方式加载容器的根文件系统(对根文件的只读权限)

解析:

这个题目是关于pod 的security context,配置的地方比较多,因此还是需要使用官方文档,以关键字 security context在官方文档内搜索即可。

 

解答:

按照题目要求,在线修改
kubectl -n sec-ns edit deployment secdep
在 template 字段下面的 spec 里面,添加或修改如下红字内容,并保存(考试中也是在 Deployment 下有两个 image 的)
请注意,考试先检查 spec 下面(非 containers 下面)是否有 securityContext: {},如果有则可以直接修改即可。否则重复添加是不生效的。
 template:
 metadata:
 creationTimestamp: null
 labels:
 app: secdep
 spec:
 containers:
 image: busybox:1.28
 imagePullPolicy: IfNotPresent
 name: sec-ctx-demo-1
 securityContext:
 allowPrivilegeEscalation: false
 readOnlyRootFilesystem: true
 resources: {}
 terminationMessagePath: /dev/termination-log
按照题目要求,在线修改
kubectl -n sec-ns edit deployment secdep
在 template 字段下面的 spec 里面,添加或修改如下红字内容,并保存(考试中也是在 Deployment 下有两个 image 的)
请注意,考试先检查 spec 下面(非 containers 下面)是否有 securityContext: {},如果有则可以直接修改即可。否则重复添加是不生效的。
 template:
 metadata:
 creationTimestamp: null
 labels:
 app: secdep
 spec:
 containers:
 image: busybox:1.28
 imagePullPolicy: IfNotPresent
 name: sec-ctx-demo-1
 securityContext:
 allowPrivilegeEscalation: false
 readOnlyRootFilesystem: true
 resources: {}
 terminationMessagePath: /dev/termination-log

 十三,

日志审计 log audit

题目:

Task
在 cluster 中启用审计日志。为此,请启用日志后端,并确保:
⚫ 日志存储在 /var/log/kubernetes/audit-logs.txt
⚫ 日志文件能保留 10 天
⚫ 最多保留 2 个旧审计日志文件
/etc/kubernetes/logpolicy/sample-policy.yaml 提供了基本策略。它仅指定不记录的内容。
注意:基本策略位于 cluster 的 master 节点上。
编辑和扩展基本策略以记录:
⚫ RequestResponse 级别的 persistentvolumes 更改
⚫ namespace front-apps 中 configmaps 更改的请求体
⚫ Metadata 级别的所有 namespace 中的 ConfigMap 和 Secret 的更改
此外,添加一个全方位的规则以在 Metadata 级别记录所有其他请求。
注意:不要忘记应用修改后的策略。

解析:

这道题需要配置的地方比较多,因此,还是需要官方文档查询的,关键字audit 审计 | Kubernetes

 

 需要编辑/etc/kubernetes/logpolicy/sample-policy.yaml ,按题目要求修改,然后修改apiserver的配置文件,增加后端配置,最终在/var/log/kubernetes/audit-logs.txt这个文件中可以看到有输出表明此题完成。

解答:

本题分数比较多,占 12%。 日志审计这一题需要自己调整的内容还是挺多的,因此要非常仔细,建议修改前备份一下原始的环境,要不然修改错了就会导致集群崩溃。

 配置审计策略
先备份配置文件
mkdir bak5
cp /etc/kubernetes/logpolicy/sample-policy.yaml bak5/
vim /etc/kubernetes/logpolicy/sample-policy.yaml
参考官方网址内容
注意这个文件里的最后一句英文,Please do not delete the above rule content, you can continue to add it below.
考试时,也有类似的一句话,大体是告诉你,不要删除上面的规则,你只可以在下面继续追加题目要求的规则。
……
rules:
###此处省略默认带有的一些规则,不要修改,而是继续添加如下规则。
 # namespaces changes at RequestResponse level
 - level: RequestResponse
 resources:
 - group: ""
 resources: ["persistentvolumes"] #根据题目要求修改,比如题目要求的是 namespaces。
 #the request body of persistentvolumes/pods changes in the namespace front-apps
 - level: Request
 resources:
 - group: ""
 resources: ["configmaps"] #根据题目要求修改,比如题目要求的是 persistentvolumes 或者 pods。
 namespaces: ["front-apps"]
 # Log configmap and secret changes in all other namespaces at the Metadata level.
 - level: Metadata
 resources:
 - group: ""
 resources: ["secrets", "configmaps"]
 # Also, add a catch-all rule to log all other requests at the Metadata level.
 - level: Metadata
 omitStages:
 - "RequestReceived"
配置 master 节点的 kube-apiserver.yaml
先备份配置文件
mkdir bak5
cp /etc/kubernetes/manifests/kube-apiserver.yaml bak5/
vi /etc/kubernetes/manifests/kube-apiserver.yaml
添加以下参数:注意空格要对齐,不建议放到最后,建议按照下图的位置放这四条信息。
#定义审计策略 yaml 文件位置,通过 hostpath 挂载
 - --audit-policy-file=/etc/kubernetes/logpolicy/sample-policy.yaml #主意检查,如果考试中已经存在了,则不要重复添加。
#定义审计日志位置,通过 hostpath 挂载
 - --audit-log-path=/var/log/kubernetes/audit-logs.txt #主意检查,如果考试中已经存在了,则不要重复添加。
#定义保留旧审计日志文件的最大天数为 10 天
 - --audit-log-maxage=10 #主意检查,如果考试中已经存在了,则不要重复添加。
#定义要保留的审计日志文件的最大数量为 2 个
 - --audit-log-maxbackup=2 #主意检查,如果考试中已经存在了,则不要重复添加。
#在 kube-apiserver.yaml 文件的 volumeMounts 标签下增加
 volumeMounts: #找到这个字段,添加下面内容
 - mountPath: /etc/kubernetes/logpolicy/sample-policy.yaml #这里也可以写到目录/etc/kubernetes/logpolicy/
 name: audit #注意,在 1.25 考试中,蓝色的内容已经默认有了,你只需要添加绿色字体的内容。可以通过红色字,在文件中定位。但模拟环境没有加,
需要你全部手动添加。这样是为了练习,万一考试中没有,你也会加。但是如果考试中已添加,你再添加一遍,则会报错,导致 api-server 启不起来。
 readOnly: true #这个为 true
 - mountPath: /var/log/kubernetes/
 name: audit-log #注意,在 1.25 考试中,蓝色的内容已经有了,你只需要添加绿色字体的内容。可以通过红色字,在文件中定位。但模拟环境没有加,
需要你全部手动添加。这样是为了练习,万一考试中没有,你也会加。
 readOnly: false #这个为 false
#在 kube-apiserver.yaml 文件的 volumes 标签下增加
 volumes: #找到这个字段,添加下面内容 #注意,在 1.25 考试中,蓝色的内容已经有了,volumes 这段无需修改,但是为了以防万一,模拟环境中没有
加,需要你手动添加。这样是为了练习,万一考试中没有,你也会加。
 - name: audit
 hostPath:
 path: /etc/kubernetes/logpolicy/sample-policy.yaml #这里如果写到目录/etc/kubernetes/logpolicy/,则下面的 type:应为 type: DirectoryOrCreate
 type: File
 - name: audit-log
 hostPath:
 path: /var/log/kubernetes/
 type: DirectoryOrCreate

十四,

启用 API server 认证

题目:

Context
由 kubeadm 创建的 cluster 的 Kubernetes API 服务器,出于测试目的,
临时配置允许未经身份验证和未经授权的访问,授予匿名用户 cluster-admin 的访问权限.
Task
重新配置 cluster 的 Kubernetes APl 服务器,以确保只允许经过身份验证和授权的 REST 请求。
使用授权模式 Node,RBAC 和准入控制器 NodeRestriction。
删除用户 system:anonymous 的 ClusterRoleBinding 来进行清理。
注意:所有 kubectl 配置环境/文件也被配置使用未经身份验证和未经授权的访问。
你不必更改它,但请注意,一旦完成 cluster 的安全加固, kubectl 的配置将无法工作。
您可以使用位于 cluster 的 master 节点上,cluster 原本的 kubectl 配置文件
/etc/kubernetes/admin.conf ,以确保经过身份验证的授权的请求仍然被允许。

解析:

首先,这道题需要根据题目要求登陆到正确的master服务器上,也就是说要ssh一下,然后修改配置前还是需要备份一下文件。

讲道理,这道题目是比较简单的,基本怎么修改题目里已经讲的非常清楚了,kubelet的配置是有问题的,但我们不需要更改这些,如果kubelet有问题,使用/etc/kubernetes/admin.conf 这个config文件即可。

解答:

确保只有认证并且授权过的 REST 请求才被允许
编辑/etc/kubernetes/manifests/kube-apiserver.yaml,修改下面内容
- --authorization-mode=AlwaysAllow
- --enable-admission-plugins=AlwaysAdmit
vi /etc/kubernetes/manifests/kube-apiserver.yaml
修改为
- --authorization-mode=Node,RBAC #注意,只保留 Node,RBAC 这两个,中间是英文状态下的逗号。在 1.25 考试中,这一条可能默认已经有
了,但还是要检查确认一下。
- --enable-admission-plugins=NodeRestriction #在 1.25 考试中,这一个原先为 AlwaysAdmit,需要修改为 NodeRestriction。
重启 kubelet
systemctl daemon-reload
systemctl restart kubelet
 删除题目要求的角色绑定
查
kubectl get clusterrolebinding system:anonymous
删
kubectl delete clusterrolebinding system:anonymous
再检查
kubectl get clusterrolebinding system:anonymous

十五,

TLS 安全配置

题目:

Task
通过 TLS 加强 kube-apiserver 安全配置,要求
1、kube-apiserver 除了 VersionTLS13 及以上的版本可以使用,其他版本都不允许使用。
2、密码套件(Cipher suite)为 TLS_AES_128_GCM_SHA256
通过 TLS 加强 ETCD 安全配置,要求
1、密码套件(Cipher suite)为 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

解析:

这道题还是需要查询官方文档

首先,我们需要ssh登陆题目指定的服务器,看看apiserver的配置和etcd的配置,可以发现默认的集群是没有配置tls安全的

根据题目的描述,我们需要修改的文件是kube-apiserver.yaml和etcd.yaml 这两个文件,官方文档以关键字VersionTLS13查询即可

 kube-apiserver | Kubernetes

 解答:

修改 kube-apiserver
修改之前,备份一下配置文件。
mkdir bak15
cp /etc/kubernetes/manifests/kube-apiserver.yaml bak15/
vim /etc/kubernetes/manifests/kube-apiserver.yaml
添加或修改相关内容,并保存(先检查一下,如果考试环境里已经给你这两条了,则你只需要修改即可)
 - --tls-cipher-suites=TLS_AES_128_GCM_SHA256
 - --tls-min-version=VersionTLS13
修改 etcd
修改之前,备份一下配置文件。
mkdir bak15
cp /etc/kubernetes/manifests/etcd.yaml bak15/
vim /etc/kubernetes/manifests/etcd.yaml
添加或修改相关内容,并保存
 - --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
修改完成后,需要等待 3 分钟,等集群应用策略后,再检查一下所有 pod,特别是 etcd 和 kube-apiserver 两个 pod,确保模拟环境是正常的。
kubectl get pod -A
kubectl -n kube-system get pod

十六,

Sysdig & falco

题目:

Task:
使用运行时检测工具来检测 Pod tomcat123 单个容器中频发生成和执行的异常进程。
有两种工具可供使用:
⚫ sysdig
⚫ falco
注: 这些工具只预装在 cluster 的工作节点 node02 上,不在 master 节点。
使用工具至少分析 30 秒 ,使用过滤器检查生成和执行的进程,将事件写到 /opt/KSR00101/incidents/summary 文件中,
其中包含检测的事件, 格式如下:
timestamp,uid/username,processName
保持工具的原始时间戳格式不变。
注: 确保事件文件存储在集群的工作节点上。
请注意,考试时,考题里已表明 sysdig 在工作节点上,所以你需要 ssh 到开头写的工作节点上。

解析:

sysdig是一个工具合集,netstat,top,htop,lsof等等命令的功能它都可以实现,考试系统是Ubuntu,在此系统下也是可以非常方便的安装sysdig

Ubuntu下安装sysdig的命令为:

apt-get install sysdig

sysdig的参数是比较多得,-M 30  就是持续扫描30秒的意思了。

根据题目要求,扫描后的输出要有一定的格式,格式查询可以如下命令:

sysdig -l | grep time
sysdig -l | grep uid
sysdig -l | grep proc

现在的考试应该是使用的containerd运行时,因此,需要先找出containerd的socket:

crictl info | grep sock

其次,扫描对象是容器,因此,需要找到容器的ID,命令如下:

crictl ps | grep tomcat123

得到以上信息后就进行扫描工作了:

sysdig -M 30 -p "%evt.time,%user.name,%proc.name" --cri /run/containerd/containerd.sock container.name=tomcat123 >> /opt/KSR00101/incidents/summary

最后的结果大概是这样的形式:

 

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

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

相关文章

神奇的HTML系列专栏总目录

📋 前言 🖱 博客主页:在下马农的碎碎念✍ 本文由在下马农原创,首发于CSDN📆 首发时间:2023/01/16📅 最近更新时间:2023/01/16🤵 此马非凡马,房星本是星。向前…

《Linux性能优化实战》学习笔记 Day02

02 | 内存池:如何提升内存分配的效率? 原文摘抄 在 Linux 系统中,用 Xmx 设置 JVM 的最大堆内存为 8GB,但在近百个并发线程下,观察到 Java 进程占用了 14GB 的内存。为什么会这样呢? 绝大部分高级语言都…

【图论】「极简复习版」最短路径 Java/C++ 实现

文章目录Dijkstra —— 单源最短路讲解图解Java朴素使用堆优化C朴素使用堆优化Floyd —— 多源最短路讲解JavaCDijkstra —— 单源最短路 讲解 时间复杂度 朴素 Dijkstra:O(n2)O(n^2)O(n2) ,nnn 是顶点数。堆优化 Dijkstra:O(mlogn)O(m\ l…

第五届字节跳动青训营 前端进阶学习笔记(三)CSS基本概念

文章目录前言CSS是什么1.CSS基本结构2.在面中使用CSS的方式3.CSS是如何工作的选择器1.通配选择器2.标签选择器3.id选择器4.类选择器5.属性选择器6.伪类选择器7.选择符颜色1.RGB颜色2.HSL颜色3.alpha透明度字体1.font-family2.font-size3.line-height4.text-align5.space6.text-…

从头搭建pytorch Docker镜像

目录前言正文从docker hub下载镜像创建容器并运行更新容器*安装python*安装anaconda安装pytorch参考文献:前言 此文不需要前言,请从正文开始 开始搭建 正文 默认大家都是有一定docker基础的,没有的话建议去花个20分钟学一下基础知识。相对…

如何利用极狐GitLab 轻松管理NPM依赖发布与更新?

本文来自: 任治桐 极狐(GitLab) 前端工程师 NPM 是 Node.js 的包管理工具,用来安装各种 Node.js 的扩展。本文将分享如何通过极狐GitLab,让 NPM 依赖发布更新更加快速和自动化,让你轻松管理依赖,拥有更多时间专注于核…

【Java|golang】1814. 统计一个数组中好对子的数目

给你一个数组 nums &#xff0c;数组中只包含非负整数。定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。比方说 rev(123) 321 &#xff0c; rev(120) 21 。我们称满足下面条件的下标对 (i, j) 是 好的 &#xff1a; 0 < i < j < nums.length nums[i] rev(…

算法之美~时间复杂度

时间复杂度 时间复杂度的全称是渐进时间复杂度&#xff0c;表示算法的执行时间与数据规模之间的增长关系1、只关注循环执行次数最多的一段代码2、加法法则&#xff1a;总复杂度等于量级最大的那段代码的复杂度3、乘法法则&#xff1a;嵌套代码的复杂度等于嵌套内外代码复杂度的…

文末有福利 | 零代码连接邮箱腾讯云企业网盘,附件管理超轻松

在日常工作中&#xff0c;想必大家每天都会收到各种各样的工作邮件&#xff0c;并且很多重要的文件材料也是通过邮件附件的形式来传输的&#xff0c;那么如何一站式管理这些文件&#xff0c;对于提高办公效率就至关重要了。关于邮件附件&#xff0c;相信大家也都碰到过这样的困…

【软件相关】Typora配置图片上传

文章目录0 前言1 确定需求2 开始配置2.1 软件储备2.2 插件安装2.3 gitee配置3 其他配置3.1 获取SMMS token参考链接0 前言 对于喜欢写Markdown文档的人来说&#xff0c;Typora无疑是一个写作利器&#xff0c;它有别于其他的Markdown软件&#xff0c;不是一边编辑一边渲染&#…

excel区分工时制度:如何计算996与955的工时差异

什么是996呢&#xff1f;是指早上9点上班&#xff0c;晚上9点下班&#xff0c;中午和晚上各有1小时吃饭时间&#xff0c;每周工作6天的工作模式。而955&#xff0c;也就是朝九晚五&#xff0c;中午就餐在工作时间内&#xff0c;但不能休息&#xff0c;共计8小时工作时间&#x…

[FUNC]在AHK中实现Pyhton的range函数

本文是用AutoHotkey复刻Python的range函数函数语法range(start, stop, step)参数说明&#xff1a;参数描述start计数从 start 开始。默认是从 0 开始。例如&#xff1a;range&#xff08;6&#xff09;等价于range(0,6)。stop计数到 stop 结束&#xff0c;但不包括 stop。例如&…

5、Ubuntu20常用操作_进程管理重定向和管道常用命令网络管理

进程管理 进程的概念 大家比较熟悉 Windows 下的可执行文件&#xff0c;就是那些扩展名为exe的文件。 大家知道&#xff0c;只需要鼠标双击这些程序&#xff0c; 就可以运行了。 程序运行起来后&#xff0c;我们把这个程序正在运行的 实例 称之为 进程 。 操作系统对每个进…

acwing86场周赛题解(模拟,dp,数学推导式)

目录 第一题&#xff1a;AcWing 4794. 健身 思路 核心代码 完整代码 第二题&#xff1a;4795. 安全区域 思路 核心代码 完整代码 第三题&#xff1a;4796. 删除序列 思路 核心代码 完整代码 谢谢您的阅读 第一题&#xff1a;AcWing 4794. 健身 4794. 健身 李华…

配置与管理DNS服务器

DNS概念 DNS是一种新的主机名称和IP地址转换机制&#xff0c;使用分层的分布式数据库来处理Internet上众多的主机和IP地址转换。当一个应用需要将域名翻译成为IP地址时&#xff0c;这个应用便成为域名系统的一个客户。这个客户将待翻译的域名放在一个DNS请求信息中&#xff0c;…

CHAPTER 10 Web服务与应用(二)

Web服务与应用10.1 Tomcat10.1.1 准备工作10.1.2 编写dockerfile10.1.3 创建tomcat用户和密码脚本文件10.1.4 编写启动脚本10.1.5 创建和测试镜像10.1.6 相关资源10.2 Jetty10.2.1 使用官方镜像10.2.2 相关资料10.3 LAMP10.3.1 使用官方镜像10.4 持续开发与管理10.4.1 Jenkins及…

[前端笔记——HTML介绍] 5.文档与网站架构

[前端笔记——HTML介绍] 5.文档与网站架构1.文档的基本组成部分&#xff08;1&#xff09;页眉&#xff08;2&#xff09;导航栏&#xff08;3&#xff09;主内容&#xff08;4&#xff09;侧边栏&#xff08;5&#xff09;页脚2.用于构建内容的HTML3.HTML布局元素细节3.1无语义…

205:vue+openlayer: 点击某feature,列表滑动,定位到相应的点的列表位置

第205个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers做一个互动,点击某个feature,在左侧的列表中显示出来,滚动条滑动,能显示在视觉区内。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其…

HTB打靶(Active Directory 101 Resolute)

nmap扫描 nmap -A -T4 10.10.10.169 Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-16 01:30 EST Stats: 0:00:04 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan SYN Stealth Scan Timing: About 74.65% done; ETC: 01:30 (0:00:01 remaining) St…

Maven学习(一):Maven简介及安装配置

Maven简介及安装配置一、Maven简介1.1、Maven是什么1.2、Maven的作用二、Maven安装配置2.1、大前提2.2、Maven下载2.3、windows版1、安装2、配置环境3、配置本地仓库2.4、mac版1、安装2、配置环境3、需要注意的点4、配置本地仓库一、Maven简介 1.1、Maven是什么 先对Maven做一…