供应链安全

news2024/11/18 17:51:09

供应链安全

image-20230604074049179

目录

文章目录

    • 供应链安全
    • 目录
    • 本节实战
    • 可信任软件供应链概述
    • 构建镜像Dockerfile文件优化
    • 镜像漏洞扫描工具:Trivy
    • 检查YAML文件安全配置:kubesec
    • 准入控制器: Admission Webhook
    • 准入控制器: ImagePolicyWebhook
    • 关于我
    • 最后

本节实战

实战名称
💘 实战:安装Trivy-2023.6.4(测试成功)
💘 实战:安装kubesec-2023.6.4(测试成功)
💘 实战:准入控制器: ImagePolicyWebhook-2023.6.6(测试成功)

可信任软件供应链概述

**可信任软件供应链:**指在建设基础架构过程中,涉及的软件都是可信任的。

在K8s领域可信软件供应链主要是指镜像,因为一些软件交付物都是镜像,部署的最小载体。

image-20230604075034870

构建镜像Dockerfile文件优化

  • 减少镜像层:一次RUN指令形成新的一层,尽量Shell命令都写在一行,减少镜像层。
  • **清理无用文件:**清理对应的残留数据,例如yum缓存。
  • **清理无用的软件包:**基础镜像默认会带一些debug工具,可以删除掉,仅保留应用程序所需软件,防止黑客利用。
  • 选择最小的基础镜像:例如alpine
  • **使用非root用户运行:**USER指令指定普通用户

image-20230604080839825

  • 注意:

一次RUN指令形成新的一层,尽量Shell命令都写在一行,减少镜像层。

image-20230604082146569

image-20230604082224165

  • 删除掉这个缓存目录就行

image-20230604082247369

  • alpine镜像大小:5MB

image-20230604082310176

镜像漏洞扫描工具:Trivy

**Trivy:**是一种用于容器镜像、文件系统、Git仓库的漏洞扫描工具。发现目标软件存在的漏洞。

Trivy易于使用,只需安装二进制文件即可进行扫描,方便集成CI系统。

项目地址:https://github.com/aquasecurity/trivy

💘 实战:安装Trivy-2023.6.4(测试成功)

image-20230604082443017

  • 实验环境
实验环境:
centos7
  • 实验软件
链接:https://pan.baidu.com/s/17XstYWfyOWW3nyNgxhS4yQ?pwd=0820 
提取码:0820 
2023.6.4-trivy-code

image-20230604100019963

  • 安装步骤
1、下载软件
[root@k8s-master1 ~]#ll -h trivy_0.18.3_Linux-64bit.tar.gz #自己去官网下载,这里直接用提供的安装包
-rw-r--r-- 1 root root 11M Jun  4 07:39 trivy_0.18.3_Linux-64bit.tar.gz

2、移动二进制文件到/usr/bin目录
[root@k8s-master1 ~]#mkdir trivy
[root@k8s-master1 ~]#mv trivy_0.18.3_Linux-64bit.tar.gz trivy
[root@k8s-master1 ~]#cd trivy/
[root@k8s-master1 trivy]#tar xf trivy_0.18.3_Linux-64bit.tar.gz 
[root@k8s-master1 trivy]#ls
contrib  LICENSE  README.md  trivy  trivy_0.18.3_Linux-64bit.tar.gz
[root@k8s-master1 trivy]#mv trivy /usr/bin/

3、测试
[root@k8s-master1 ~]#trivy --help
NAME:
   trivy - A simple and comprehensive vulnerability scanner for containers

USAGE:
   trivy [global options] command [command options] target

VERSION:
   0.18.3

COMMANDS:
   image, i          scan an image
   filesystem, fs    scan local filesystem
   repository, repo  scan remote repository
   client, c         client mode
   server, s         server mode
   plugin, p         manage plugins
   help, h           Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --quiet, -q        suppress progress bar and log output (default: false) [$TRIVY_QUIET]
   --debug, -d        debug mode (default: false) [$TRIVY_DEBUG]
   --cache-dir value  cache directory (default: "/root/.cache/trivy") [$TRIVY_CACHE_DIR]
   --help, -h         show help (default: false)
   --version, -v      print the version (default: false)

安装结束。😘

示例:

# 容器镜像扫描
trivy image nginx
trivy image -i nginx.tar

# 打印指定(高危、严重)漏洞信息
trivy image -s HIGH nginx
trivy image -s HIGH,CRITICAL nginx

# JSON格式输出并保存到文件
trivy image  -f json -o output.json nginx

image-20230604100055238

image-20230604100136164

漏洞数据库:

image-20230604100308961

image-20230604100536478

image-20230604100602798

检查YAML文件安全配置:kubesec

**kubesec:**是一个针对K8s资源清单文件进行安全配置评估的工具,根据安全配置最佳实践来验证并给出建议。

官网:https://kubesec.io

项目地址:https://github.com/controlplaneio/kubesec

💘 实战:安装kubesec-2023.6.4(测试成功)

image-20230604094550285

  • 实验环境
实验环境:
centos7
  • 实验软件
链接:https://pan.baidu.com/s/1SvQ1ijvplpe-hfUv6cCUgQ?pwd=0820 
提取码:0820 
2023.6.4-kubesec-code

image-20230604101235356

  • 安装步骤
1、下载软件
root@k8s-master1 ~]#ll -h kubesec_linux_amd64.tar.gz 
-rw-r--r-- 1 root root 3.9M Jun  4 07:39 kubesec_linux_amd64.tar.gz

2、解压
[root@k8s-master1 ~]#tar xf kubesec_linux_amd64.tar.gz 
[root@k8s-master1 ~]#mv kubesec /usr/bin/

3、验证
[root@k8s-master1 ~]#kubesec --help

Validate Kubernetes resource security policies

Usage:
  kubesec [command]

Available Commands:
  help        Help about any command
  http        Starts kubesec HTTP server on the specified port
  scan        Scans Kubernetes resource YAML or JSON
  version     Prints kubesec version

Flags:
  -h, --help   help for kubesec

Use "kubesec [command] --help" for more information about a command.

安装结束。😘

示例:

kubesec scan deployment.yaml

或者使用容器环境执行检查
docker run -i kubesec/kubesec scan /dev/stdin < deployment.yaml

kubesec内置一个HTTP服务器,可以直接启用,远程调用。

  • 二进制
kubesec http 8080 &
  • Docker容器
docker run -d -p 8080:8080 kubesec/kubesec http 8080

示例:
curl -sSX POST --data-binary @deployment.yaml http://192.168.31.71:8080/scan

测试过程:

[root@k8s-master1 ~]#kubectl create deployment web --image=nginx --dry-run=client -oyaml > deployment.yaml
[root@k8s-master1 ~]#kubesec scan deployment.yaml

image-20230604101504341

[root@k8s-master1 ~]#docker run -d -p 8085:8080 kubesec/kubesec http 8080 #宿主机端口:容器端口
[root@k8s-master1 ~]#curl -sSX POST --data-binary @deployment.yaml http://172.29.9.31:8085/scan #宿主机的8085端口

image-20230604102239164

准入控制器: Admission Webhook

**Admission Webhook:**准入控制器Webhook是准入控制插件的一种,用于拦截所有向APISERVER发送的请求,并且可以修改请求或拒绝请求。

Admission webhook为开发者提供了非常灵活的插件模式,在kubernetes资源持久化之前,管理员通过程序可以对指定资源做校验、修改等操作。例如为资源自动打标签、pod设置默认SA,自动注入sidecar容器等。

相关Webhook准入控制器:

  • MutatingAdmissionWebhook:修改资源,理论上可以监听并修改任何经过ApiServer处理的请求
  • ValidatingAdmissionWebhook:验证资源
  • ImagePolicyWebhook:镜像策略,主要验证镜像字段是否满足条件

image-20230604143906349

准入控制器: ImagePolicyWebhook

💘 实战:准入控制器: ImagePolicyWebhook-2023.6.6(测试成功)

image-20230604144330994

  • 实验环境
实验环境:
1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
   k8s version:v1.20.0
   docker://20.10.7
  • 实验软件
链接:https://pan.baidu.com/s/1RGJtAhqWXMNVxk7vauaCeA?pwd=0820 
提取码:0820 
2023.6.6-ImagePolicyWebhook-code

image-20230606062210205

  • 课件步骤

image-20230604144422288

image-20230604144431538

image-20230604144441669

1、准备配置文件

(在k8s-master1上操作)

  • 创建admission_configuration.yaml文件
#创建/etc/kubernetes/image-policy目录及/etc/kubernetes/image-policy/admission_configuration.yaml文件
[root@k8s-master1 ~]#mkdir /etc/kubernetes/image-policy/
[root@k8s-master1 ~]#vim /etc/kubernetes/image-policy/admission_configuration.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ImagePolicyWebhook
  configuration:
    imagePolicy:
      kubeConfigFile: /etc/kubernetes/image-policy/connect_webhook.yaml  # 连接镜像策略服务器配置文件
      allowTTL: 50 # 控制批准请求的缓存时间,单位秒
      denyTTL: 50 # 控制拒绝请求的缓存时间,单位秒
      retryBackoff: 500 # 控制重试间隔,单位毫秒
      defaultAllow: true # 确定webhook后端失效的行为
  • 创建connect_webhook.yaml文件
[root@k8s-master1 ~]#vim /etc/kubernetes/image-policy/connect_webhook.yaml
apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority: /etc/kubernetes/image-policy/webhook.pem # 数字证书,用于验证远程服务
    server: https://172.29.9.32:8081/image_policy # 镜像策略服务器地址,必须是https
  name: webhook
contexts:
- context:
    cluster: webhook
    user: apiserver
  name: webhook
current-context: webhook
preferences: {}
users:
- name: apiserver
  user:
    client-certificate: /etc/kubernetes/image-policy/apiserver-client.pem # webhook准入控制器使用的证书
    client-key: /etc/kubernetes/image-policy/apiserver-client-key.pem # 对应私钥证书

注:涉及的证书文件,下一步将生成,然后会拷贝到相应路径。

2、部署镜像服务器

(在k8s-node1上操作。)

自己用python开发一个简单的webhook端点服务器,作用是拒绝部署的镜像乜有指定标签(即latest)。

(1) 自签HTTPS证书

来到k8s-node1节点:

  • 将压缩包image-policy-webhook.zip拷贝到k8s-node1节点并解压:
[root@k8s-node1 ~]#ll
total 4
-rw-r--r-- 1 root root 2910 Jun  5 07:09 image-policy-webhook.zip
[root@k8s-node1 ~]#unzip image-policy-webhook.zip 
Archive:  image-policy-webhook.zip
   creating: image-policy-webhook/
  inflating: image-policy-webhook/Dockerfile  
  inflating: image-policy-webhook/main.py     
  inflating: admission_configuration.yaml     
  inflating: connect_webhook.yaml    
  inflating: image-policy-certs.sh   
[root@k8s-node1 ~]#ls
admission_configuration.yaml  connect_webhook.yaml  image-policy-certs.sh  image-policy-webhook  image-policy-webhook.zip
  • 查看当前image-policy-certs.sh自签脚本文件:
[root@k8s-node1 ~]#cat image-policy-certs.sh 
[root@k8s-node1 ~]#cat image-policy-certs.sh 
cat > ca-config.json <<EOF  
{
  "signing": {
    "default": {
      "expiry": "87600h"    
    },
    "profiles": {
      "kubernetes": {       
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
EOF

cat > ca-csr.json <<EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}
EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

cat > webhook-csr.json <<EOF
{
  "CN": "webhook",
  "hosts": [
   "172.29.9.32"
   ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes webhook-csr.json | cfssljson -bare webhook

cat > apiserver-client-csr.json <<EOF
{
  "CN": "apiserver",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes apiserver-client-csr.json | cfssljson -bare apiserver-client
  • 执行脚本:
[root@k8s-node1 ~]#sh image-policy-certs.sh 
[root@k8s-node1 ~]#ll
total 5784
-rw-r--r-- 1 root root     508 Oct 21  2021 admission_configuration.yaml
-rw-r--r-- 1 root root     956 Jun  5 07:15 apiserver-client.csr
-rw-r--r-- 1 root root     182 Jun  5 07:15 apiserver-client-csr.json
-rw------- 1 root root    1679 Jun  5 07:15 apiserver-client-key.pem
-rw-r--r-- 1 root root    1306 Jun  5 07:15 apiserver-client.pem
-rw-r--r-- 1 root root     294 Jun  5 07:15 ca-config.json
-rw-r--r-- 1 root root     960 Jun  5 07:15 ca.csr
-rw-r--r-- 1 root root     212 Jun  5 07:15 ca-csr.json
-rw------- 1 root root    1679 Jun  5 07:15 ca-key.pem
-rw-r--r-- 1 root root    1273 Jun  5 07:15 ca.pem
-rw-r--r-- 1 root root 5850685 Jun  5 07:15 cfssl.tar.gz
-rw-r--r-- 1 root root     632 Oct 21  2021 connect_webhook.yaml
-rw-r--r-- 1 root root    1365 Jun  5 07:13 image-policy-certs.sh
drwxr-xr-x 2 root root      39 Jul  9  2021 image-policy-webhook
-rw-r--r-- 1 root root    2910 Jun  5 07:09 image-policy-webhook.zip
-rw-r--r-- 1 root root    1001 Jun  5 07:15 webhook.csr
-rw-r--r-- 1 root root     202 Jun  5 07:15 webhook-csr.json
-rw------- 1 root root    1679 Jun  5 07:15 webhook-key.pem
-rw-r--r-- 1 root root    1330 Jun  5 07:15 webhook.pem
  • 拷贝证书文件到k8s-master1对应目录:
[root@k8s-node1 ~]#scp  webhook.pem apiserver-client-key.pem apiserver-client.pem root@172.29.9.31:/etc/kubernetes/image-policy/
The authenticity of host '172.29.9.31 (172.29.9.31)' can't be established.
ECDSA key fingerprint is SHA256:XfMhwZeoqC6kPHaF1uPzLdY9t2ZgNoNvyEd0kJd24eY.
ECDSA key fingerprint is MD5:ec:5e:37:9d:fc:e7:af:e1:9e:3a:ac:21:81:92:b5:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.29.9.31' (ECDSA) to the list of known hosts.
root@172.29.9.31's password: 
webhook.pem                                                                                                                                                       100% 1330     1.3MB/s   00:00    
apiserver-client-key.pem                                                                                                                                          100% 1679   858.4KB/s   00:00     
apiserver-client.pem                                                                                                                                              100% 1306   330.6KB/s   00:00     

[root@k8s-master1 ~]#cd  /etc/kubernetes/image-policy/
[root@k8s-master1 image-policy]#ll
total 20
-rw-r--r-- 1 root root  509 Jun  5 07:01 admission_configuration.yaml
-rw------- 1 root root 1679 Jun  5 07:27 apiserver-client-key.pem    
-rw-r--r-- 1 root root 1306 Jun  5 07:27 apiserver-client.pem        
-rw-r--r-- 1 root root  633 Jun  5 07:04 connect_webhook.yaml        
-rw-r--r-- 1 root root 1330 Jun  5 07:27 webhook.pem

(2) Docker容器启动镜像策略服务

  • 构建镜像:
[root@k8s-node1 ~]#pwd
/root
[root@k8s-node1 ~]#ls
admission_configuration.yaml  apiserver-client-key.pem  ca.csr       ca.pem                image-policy-certs.sh     webhook.csr       webhook.pem
apiserver-client.csr          apiserver-client.pem      ca-csr.json  cfssl.tar.gz          image-policy-webhook      webhook-csr.json
apiserver-client-csr.json     ca-config.json            ca-key.pem   connect_webhook.yaml  image-policy-webhook.zip  webhook-key.pem
[root@k8s-node1 ~]#cd image-policy-webhook
[root@k8s-node1 image-policy-webhook]#ls
Dockerfile  main.py
[root@k8s-node1 image-policy-webhook]#cat Dockerfile 
FROM python
RUN useradd python
RUN mkdir /data/www -p
COPY . /data/www
RUN chown -R python /data
RUN pip install flask -i https://mirrors.aliyun.com/pypi/simple/
WORKDIR /data/www
USER python
CMD python main.py
[root@k8s-node1 image-policy-webhook]#docker build -t image-policy-webhook .
[root@k8s-node1 image-policy-webhook]#docker images|grep image-policy-webhook
image-policy-webhook                                 latest           331d1c0b42d8   18 seconds ago   936MB
  • 启动容器:
docker run -d -u root --name=image-policy-webhook \
-v $PWD/webhook.pem:/data/www/webhook.pem \
-v $PWD/webhook-key.pem:/data/www/webhook-key.pem \
-e PYTHONUNBUFFERED=1 -p 8081:8080 \
image-policy-webhook

#注意:这里的证书文件是放置在/root下的;
#注意:课件里宿主机端口用的是8080,但自己宿主机8080端口被nodeCache占用了,因此这里使用8081.

[root@k8s-node1 ~]#docker ps -l
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                                       NAMES
7145eb5dfa6d   image-policy-webhook   "/bin/sh -c 'python …"   5 seconds ago   Up 4 seconds   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp   image-policy-webhook
[root@k8s-node1 ~]#docker logs 7145eb5dfa6d
 * Serving Flask app 'main'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on https://127.0.0.1:8080
 * Running on https://172.17.0.2:8080
Press CTRL+C to quit
[root@k8s-node1 ~]#

3、启用准入控制插件

[root@k8s-master1 ~]#vim /etc/kubernetes/manifests/kube-apiserver.yaml  
    - --enable-admission-plugins=NodeRestriction,ImagePolicyWebhook                                       
    - --admission-control-config-file=/etc/kubernetes/image-policy/admission_configuration.yaml
  
  ……
      - mountPath: /etc/kubernetes/image-policy
      name: image-policy
      readOnly: true
  ……    
  - hostPath:
      path: /etc/kubernetes/image-policy
      type: DirectoryOrCreate
    name: image-policy

image-20230605072444579

image-20230605073026157

报错退出,此时可以看到静态pod kube-apiserver-k8s-master1发生重启了。

4、测试

  • k8s-node1上持续查看容器image-policy的日志
[root@k8s-node1 ~]#docker logs -f image-policy-webhook

image-20230606060756135

  • 创建不带tag的deployment资源测试
[root@k8s-master1 image-policy]#kubectl create deployment web-no-tag --image=nginx
deployment.apps/web-no-tag created
[root@k8s-master1 image-policy]#kubectl get deployment 
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
web-no-tag   0/1     0            0           10s
[root@k8s-master1 image-policy]#kubectl describe replicaset web-no-tag-78bd59988f

image-20230606061153276

image-20230606061227059

  • 创建tag的deployment资源测试
[root@k8s-master1 image-policy]#kubectl create deployment web-with-tag --image=nginx:1.16                                                                                                           
deployment.apps/web-with-tag created
[root@k8s-master1 image-policy]#kubectl get deployment
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
web-no-tag     0/1     0            0           2m45s
web-with-tag   1/1     1            1           6s

image-20230606061325400

带有tag的镜像会被成功创建,不带tag的镜像会被ImagePolicyWebhook拒绝,符合预期。

测试结束。😘

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码
x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号
《云原生架构师实战》

image-20230107215126971

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230306221144511

🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎
https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

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

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

相关文章

openpnp - 底部相机支架的制作

文章目录 openpnp - 底部相机支架的制作概述END openpnp - 底部相机支架的制作 概述 前几天总结了底部相机校验通不过的原因(openpnp - 底部相机矫正(subject not found)的原因总结), 并且可以校验通过了. 好景不长, 在校验通过的第三天(中间再穿插做其他事情), 从头做了一次…

【ArcGIS Pro二次开发】(38):清理字段值(空格、空值)

由于一些不规范的输入&#xff0c;或是其它数据转换而来&#xff0c;要素类或者独立表的字段值经常含有空值、空格等影响数据质量的内容。 这个工具的目的就是清理、转换这些字段内容&#xff0c;提高数据质量。 一、要实现的功能 如上图所示&#xff0c;点击【清洗字段值】按…

springboot+vue+java仓库管理系统_0r36w

部门管理员&#xff1a; 申购入库&#xff1a;发起申购&#xff0c;进行入库申请。 调拨申请&#xff1a;发起资产调拨的申请以及查看申请的详情信息。 出库管理&#xff1a;查看调拨的详情信息&#xff0c;可以进行资产的申请报废以及申请维修。 资产报废查询&#xff1a;查看…

薛定谔maestro 安装

【1】先删除之前不能用的文件包 【2】tar -xvf 解压包 进行解压 【3】cd 解压出来的文件下 【4】sudo ./INSTALL 【也可以不用sudo&#xff0c;我的电脑不知道上面问题&#xff0c;需要用sudo&#xff0c;否则在之后创建生成文件夹的时候没有权限】 【5】根据操作一步一步…

电子行业 K 公司对接 Nexperia EDI 项目案例

项目背景 Nexperia 是一家全球领先的半导体制造商&#xff0c;专注于提供高性能、高可靠性和创新性的半导体解决方案。公司成立于2017年&#xff0c;是前飞思卡尔半导体业务的一部分&#xff0c;并在全球范围内拥有多个设计、研发和生产基地。 Nexperia 使用 EDI&#xff08;…

【VMware】虚拟机安装centos7

目录 一、创建虚拟机 1、自定义 2、选择需要安装的操作系统 3、选择虚拟机安装位置 4、选择处理器配置&#xff08;可先默认&#xff09; 5、设置虚拟内存&#xff08;一般4096&#xff09; 6、选择网络连接方式 7、选择I/O控制器 8、选择磁盘类型 9、选择磁盘 10、指定磁盘容…

真刑!几行代码端了整个教务系统。。

今天给大家伙分享一个网络安全的案例&#xff0c;程序员和网安同学都可以看看&#xff0c; 前言&#xff1a;本文中涉及到的相关漏洞已报送厂商并得到修复&#xff0c;本文仅限技术研究与讨论&#xff0c;严禁用于非法用途&#xff0c;否则产生的一切后果自行承担 漏洞成因 事…

佩戴舒适的蓝牙耳机哪款比较好用?佩戴舒适度最好的蓝牙耳机推荐

​关于蓝牙耳机佩戴舒适度及音质表现的问题&#xff0c;经常有很多小伙伴在问&#xff0c;或许大家更习惯用价格去界定一个蓝牙耳机的定位。本篇文章主要给大家介绍哪款蓝牙耳机比较好用&#xff0c;很值得入手的蓝牙耳机&#xff0c;一起来看看吧。 一、南卡OE蓝牙耳机&#…

知识小结——HTTP协议相关

目录 TCP/IP URI / URL HTTPS 总结时间&#xff1a; TCP/IP协议簇 对TCP的理解 对UDP的理解 HTTP&#xff08;超文本传输协议&#xff09;是什么&#xff1f; HTTPS&#xff08;安全超文本传输协议&#xff09;是什么&#xff1f; HTTPS的特点&#xff1a; HTTPS协议…

【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序

linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序 一、背景描述二、vi命令编辑三、启动程序四、拓展--启动脚本 一、背景描述 需求&#xff1a;发现线上的 iotp-irsb-server-v1.0.0.2.jar 包中配置文件的日志级别配置错误&#xff0c;需要在线修改jar包中文件的…

99.实战网页构建定价部分-第二节

上节课我们完成的定价页面是这样的 上节课我们完成的定价页面是这样的 ● 首先我们先给卡片加上背景颜色 .princing-plan {background-color: #fdf2e9;border-radius: 11px;padding: 4.8rem; }● 之后我们调整下框子的大小和位置 ● 接着我们给基础价格再调价一项&#x…

低代码开发平台介绍

低代码开发平台近两年发展迅猛&#xff0c;并迅速渗透到各个细分领域。本文简要介绍低代码开发的概念以及特性&#xff0c;并结合低代码开发的应用场景介绍两个低代码开发平台。 1、低代码开发概念 1.1 低代码开发介绍 低代码开发&#xff08;Low-code Development&#xff0…

SQL调优:让Java内存分担计算

作者: 剽悍一小兔 CSDN前端优质创作者&#xff0c;打破编程小说次元壁第一人《JavaScript百炼成仙》作者&#xff0c;专注Java硬核干货分享&#xff0c;分享创造快乐&#xff0c;技术成就梦想&#xff01; 我们在工作中&#xff0c;经常会因为一条慢sql调半天。这一节&#xff…

无线蓝牙耳机什么牌子好?八大真无线蓝牙耳机排名

蓝牙耳机作为当前热门的数码产品&#xff0c;无论何时都能用上&#xff0c;蓝牙耳机的快速发展逐渐的取代有线耳机&#xff0c;摆脱线条的束缚&#xff0c;更方便携带。当然&#xff0c;随着蓝牙耳机的设计各种各样&#xff0c;导致很多的小伙伴在选购耳机的时候&#xff0c;不…

简易协程工具【Wait! - Easy Coroutines】

Wait! - Easy Coroutines | Utilities Tools | Unity Asset StoreUse the Wait! - Easy Coroutines from Iterant Games on your next project. Find this utility tool & more on the Unity Asset Store.https://prf.hn/l/b3AQw5a 1、概述 Wait - Easy Coroutines&#…

chatgpt赋能python:建立Python文件的完整指南

建立Python文件的完整指南 如果您正在寻找一个易于学习和使用的编程语言&#xff0c;Python就是一个不错的选择。Python的第一印象常常让人感到吃惊&#xff0c;因为它的代码与许多编程语言相比要短得多&#xff0c;然而它的功能非常强大且使用范围广泛。在本文中&#xff0c;…

【位图布隆过滤器海量数据面试题】

文章目录 1 位图2 布隆过滤器 1 位图 首先我们来看看一个腾讯的面试题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 分析&#xff1a; 40亿个不重复整形数据&#xff0c;大概有160亿字节…

Linux---vim的使用

专栏&#xff1a;Linux 个人主页&#xff1a;HaiFan. 本章为大家带来Linux工具—vim Linux工具 关于rzszyumvim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集简单vim配置配置文件的位置常用配置选项 关于rzsz 这个工具用于windows机器和Linux机器通过Xshell传输…

字符串--字符指针、字符串的访问和输入/输出(字符串空格问题,输入带双引号的字符串)

一、字符指针 字符指针&#xff08;Character Pointers&#xff09;是指向字符型数据的指针变量。 每个字符串在内存中都占用一段连续的存储空间&#xff0c;并有唯一确定的首地址。因此&#xff0c;只要将字符串的首地址赋值给字符指针&#xff0c;即可让字符指针指向一个字符…

安卓主板/开发板定制开发生产,MTK/高通/紫光展锐安卓开发板

智物通讯是一家致力于行业安卓主板定制开发的公司&#xff0c;提供包括MTK四核/八核方案、MTK、高通、紫光展锐系列行业主板方案定制等多样化的服务。 用户可以根据实际需求选择各种不同的模块类型&#xff0c;包括4G模块和5G模块。其中4G模块方案有MT6761、MT6762、MT6765、M…