浅谈Elasticsearch安全和权限管理

Elasticsearch 安全和权限管理

Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎,它使得用户可以快速地存储、搜索和分析大量数据。在企业级应用中,保证数据的安全性和权限管理是至关重要的。本文将详细讲解 Elasticsearch 的安全和权限管理功能,包括身份验证、授权、加密和审计。

1. 身份验证

Elasticsearch 支持多种身份验证方式,包括基本身份验证、LDAP 身份验证、Active Directory 身份验证和 SAML 身份验证等。

1.1 基本身份验证

基本身份验证是最简单的身份验证方式,用户需要提供用户名和密码来访问 Elasticsearch。在 Elasticsearch 中,可以通过以下步骤配置基本身份验证:

  1. elasticsearch.yml 配置文件中启用基本身份验证:

    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    
  2. 使用内置的 elastic 用户创建其他用户和角色。例如,创建一个名为 my_admin 的用户,并为其分配 superuser 角色:

    POST /_security/user/my_admin
    {"password" : "mypassword","roles" : [ "superuser" ],"full_name" : "My Admin"
    }
    
  3. 使用创建的用户和密码访问 Elasticsearch:

    curl -u my_admin:mypassword http://localhost:9200/_cluster/health
    

1.2 基于令牌的身份验证

基于令牌的身份验证允许用户使用访问令牌(access token)来访问 Elasticsearch。访问令牌是一个短期有效的字符串,可以通过用户名和密码获取。在 Elasticsearch 中,可以通过以下步骤配置基于令牌的身份验证:

  1. 获取访问令牌:

    POST /_security/oauth2/token
    {"grant_type" : "password","username" : "my_admin","password" : "mypassword"
    }
    

    返回的响应中包含访问令牌:

    {"access_token": "AAEAAWVsYXN0aWNzZWFyY2gtdG9rZW4tZm9yLWV4YW1wbGU","type": "Bearer","expires_in": 1200
    }
    
  2. 使用访问令牌访问 Elasticsearch:

    curl -H "Authorization: Bearer AAEAAWVsYXN0aWNzZWFyY2gtdG9rZW4tZm9yLWV4YW1wbGU" http://localhost:9200/_cluster/health
    

1.3 基于证书的身份验证

基于证书的身份验证允许用户使用客户端证书来访问 Elasticsearch。在 Elasticsearch 中,可以通过以下步骤配置基于证书的身份验证:

  1. elasticsearch.yml 配置文件中启用基于证书的身份验证:

    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.client_authentication: required
    
  2. 配置客户端证书和私钥:

    xpack.security.http.ssl.keystore.path: "http.p12"
    xpack.security.http.ssl.truststore.path: "http.p12"
    
  3. 使用客户端证书访问 Elasticsearch:

    curl --cert client.crt --key client.key https://localhost:9200/_cluster/health
    

1.4 LDAP 身份验证

LDAP 身份验证是一种常见的身份验证方式,它使用 LDAP 目录来存储用户信息和密码。在 Elasticsearch 中,可以通过配置 elasticsearch.yml 文件来启用 LDAP 身份验证,例如:

xpack.security.authc:realms:ldap:type: ldaporder: 1url: "ldap://ldap.example.com:389"bind_dn: "cn=admin,dc=example,dc=com"bind_password: "password"user_search:base_dn: "ou=people,dc=example,dc=com"filter: "(uid={0})"

这里的 ldap 表示使用 LDAP 进行身份验证,url 表示 LDAP 服务器的地址和端口号,bind_dnbind_password 表示 LDAP 管理员的用户名和密码,user_search 表示用户信息的搜索条件。

1.5 Active Directory 身份验证

Active Directory 身份验证是一种常见的身份验证方式,它使用 Active Directory 目录来存储用户信息和密码。在 Elasticsearch 中,可以通过配置 elasticsearch.yml 文件来启用 Active Directory 身份验证,例如:

xpack.security.authc:realms:ad:type: active_directoryorder: 2url: "ldap://ad.example.com:389"bind_dn: "cn=admin,dc=example,dc=com"bind_password: "password"user_search:base_dn: "ou=people,dc=example,dc=com"filter: "(sAMAccountName={0})"

这里的 ad 表示使用 Active Directory 进行身份验证,其他配置项与 LDAP 身份验证类似。

1.6 SAML 身份验证

SAML 身份验证是一种基于标准的身份验证方式,它使用 SAML 协议来实现身份验证。在 Elasticsearch 中,可以通过配置 elasticsearch.yml 文件来启用 SAML 身份验证,例如:

xpack.security.authc:realms:saml:type: samlorder: 3idp:metadata_path: "/path/to/idp-metadata.xml"sp:entity_id: "https://elasticsearch.example.com"acs: "https://elasticsearch.example.com/api/security/v1/saml"

这里的 saml 表示使用 SAML 进行身份验证,idp 表示身份提供者的元数据路径,sp 表示服务提供者的实体 ID 和断言消费服务的 URL。

1.7 结合 LDAP 或 Active Directory 进行身份验证

Elasticsearch 还支持与 LDAP(轻量级目录访问协议)或 Active Directory(AD)集成,以便在企业环境中进行集中式身份验证。要配置 LDAP 或 AD 集成,请按照以下步骤操作:

  1. elasticsearch.yml 配置文件中启用 LDAP 或 AD 集成:

    xpack.security.authc.realms:ldap1:type: ldaporder: 0url: "ldaps://ldap.example.com:636"bind_dn: "cn=admin,dc=example,dc=com"bind_password: "password"user_search:base_dn: "ou=users,dc=example,dc=com"filter: "(uid={0})"group_search:base_dn: "ou=groups,dc=example,dc=com"files:role_mapping: "role_mapping.yml"unmapped_groups_as_roles: false
    

    对于 Active Directory,配置如下:

    xpack.security.authc.realms:active_directory:type: active_directoryorder: 0domain_name: "example.com"url: "ldaps://ad.example.com:636"bind_dn: "cn=admin,dc=example,dc=com"bind_password: "password"files:role_mapping: "role_mapping.yml"unmapped_groups_as_roles: false
    
  2. role_mapping.yml 文件中配置用户和角色的映射关系。例如,将 LDAP 中的 cn=admins,ou=groups,dc=example,dc=com 组映射到 Elasticsearch 的 superuser 角色:

    superuser:- "cn=admins,ou=groups,dc=example,dc=com"
    
  3. 重启 Elasticsearch 以应用更改。

现在,Elasticsearch 将使用 LDAP 或 Active Directory 进行身份验证。用户可以使用其 LDAP 或 AD 凭据访问 Elasticsearch。

总之,Elasticsearch 提供了多种身份验证方式,包括基于用户名和密码的基本身份验证、基于令牌的身份验证、基于证书的身份验证以及与 LDAP 或 Active Directory 的集成。通过正确配置这些功能,可以确保 Elasticsearch 系统的安全性和满足企业级应用的需求。

2. 授权

授权是确定用户可以访问哪些资源和执行哪些操作的过程。在 Elasticsearch 中,可以通过角色和权限来实现授权。

2.1 角色和权限

在 Elasticsearch 中,角色是一组权限的集合,权限是一组允许或拒绝执行特定操作的规则。角色可以分配给用户,以便控制用户可以访问的资源和执行的操作。

Elasticsearch 提供了一些预定义的角色,例如:

  • superuser:具有所有权限的用户,可以执行任何操作。
  • kibana_admin:具有管理 Kibana 的权限,可以创建和管理仪表板、可视化等。
  • monitoring_user:具有访问监控数据的权限,可以查看 Elasticsearch 集群的性能和状态。

2.2 创建自定义角色

除了预定义的角色外,还可以创建自定义角色。例如,创建一个名为 read_only 的角色,只允许用户读取索引中的数据:

PUT /_security/role/read_only
{"indices": [{"names": [ "*" ],"privileges": [ "read" ]}]
}

创建一个名为 index_manager 的角色,允许用户创建和删除索引,但不能对数据进行读写操作:

PUT /_security/role/index_manager
{"indices": [{"names": [ "*" ],"privileges": [ "create_index", "delete_index" ]}]
}

2.3 分配角色给用户

创建角色后,可以将其分配给用户。例如,将 read_only 角色分配给名为 my_user 的用户:

POST /_security/user/my_user
{"password" : "mypassword","roles" : [ "read_only" ],"full_name" : "My User"
}

现在,my_user 只能读取索引中的数据,无法执行其他操作,如创建或删除索引。

2.4 使用角色模板

角色模板是一种动态生成角色的方法,可以根据用户的属性来生成角色。例如,创建一个名为 user_specific_index 的角色模板,允许用户访问其用户名作为前缀的索引:

PUT /_security/role/user_specific_index
{"indices": [{"names": [ "{user.name}_*" ],"privileges": [ "read", "write" ]}]
}

现在,名为 john 的用户可以访问 john_* 索引,而名为 jane 的用户可以访问 jane_* 索引。

2.5 使用 API 键进行授权

API 键是一种用于授权的机制,允许用户使用 API 键来访问 Elasticsearch,而无需提供用户名和密码。API 键可以具有与用户相同或更少的权限。要创建 API 键,请执行以下操作:

POST /_security/api_key
{"name": "my_api_key","role_descriptors": {"read_only": {"indices": [{"names": [ "*" ],"privileges": [ "read" ]}]}}
}

返回的响应中包含 API 键:

{"id" : "VuaCfGcBCdbkQmijuKPS","name" : "my_api_key","api_key" : "ui2lp2axTNmsyakw9tvNnw"
}

使用 API 键访问 Elasticsearch:

curl -H "Authorization: ApiKey VuaCfGcBCdbkQmijuKPS:ui2lp2axTNmsyakw9tvNnw" http://localhost:9200/_cluster/health

现在,用户可以使用 API 键来访问 Elasticsearch,而无需提供用户名和密码。请注意,API 键具有与创建它的用户相同或更少的权限。

2.6 集成第三方身份提供商进行授权

Elasticsearch 还支持与第三方身份提供商(如 SAML、OpenID Connect 等)集成,以便在企业环境中进行集中式授权。要配置第三方身份提供商集成,请按照以下步骤操作:

  1. elasticsearch.yml 配置文件中启用第三方身份提供商集成。以 SAML 为例:

    xpack.security.authc.token.enabled: true
    xpack.security.authc.realms.saml1:type: samlorder: 2idp.metadata.path: "https://idp.example.com/metadata"idp.entity_id: "https://idp.example.com/metadata"sp.entity_id:  "https://sp.example.com/metadata"sp.acs: "https://sp.example.com/acs"sp.logout: "https://sp.example.com/logout"attributes.principal: "nameid:persistent"attributes.groups: "groups"
    
  2. 在 Kibana 中配置 SAML 集成:

    xpack.security.authc.providers:saml.saml1:order: 0realm: "saml1"
    
  3. 重启 Elasticsearch 和 Kibana 以应用更改。

现在,Elasticsearch 将使用第三方身份提供商进行授权。用户可以使用其 SAML 凭据访问 Elasticsearch。

2.7 访问控制

基于角色的访问控制(RBAC)是一种授权策略,通过将权限分配给角色,然后将角色分配给用户来实现。在 Elasticsearch 中,可以使用 RBAC 来控制用户对索引、文档和字段的访问权限。

2.7.1 索引级别的访问控制

在 Elasticsearch 中,可以为角色分配特定索引的访问权限。例如,创建一个名为 logs_read 的角色,只允许用户读取名为 logs-* 的索引:

PUT /_security/role/logs_read
{"indices": [{"names": [ "logs-*" ],"privileges": [ "read" ]}]
}

logs_read 角色分配给名为 log_viewer 的用户:

POST /_security/user/log_viewer
{"password" : "mypassword","roles" : [ "logs_read" ],"full_name" : "Log Viewer"
}

现在,log_viewer 用户只能读取 logs-* 索引,无法访问其他索引。

配置 elasticsearch.yml 文件方式:

xpack.security.authz:roles:admin:cluster:- allindices:- names: '*'privileges:- alluser:cluster:- monitorindices:- names: 'logs-*'privileges:- read

这里的 adminuser 表示角色名称,cluster 表示集群级别的权限,indices 表示索引级别的权限。在定义完角色和权限后,可以将用户分配到不同的角色,例如:

POST /_security/user/john/_roles
{"roles": ["admin"]
}

这里的 john 表示用户名,admin 表示要分配的角色名称。

2.7.2 字段级别的访问控制 (Field-Level Security, FLS)

字段级别的访问控制(FLS)允许您限制用户访问文档中特定字段的权限。例如,创建一个名为 logs_read_sensitive 的角色,只允许用户读取 logs-* 索引中的 timestampmessage 字段:

PUT /_security/role/logs_read_sensitive
{"indices": [{"names": [ "logs-*" ],"privileges": [ "read" ],"field_security" : {"grant" : [ "timestamp", "message" ]}}]
}

logs_read_sensitive 角色分配给名为 sensitive_log_viewer 的用户:

POST /_security/user/sensitive_log_viewer
{"password" : "mypassword","roles" : [ "logs_read_sensitive" ],"full_name" : "Sensitive Log Viewer"
}

现在,sensitive_log_viewer 用户只能访问 logs-* 索引中的 timestampmessage 字段,无法访问其他字段。

配置 elasticsearch.yml 文件方式:

xpack.security.field_level_security:enabled: truegrant:- field: "user"value: "john"except: ["password"]

这里的 enabled 表示是否启用字段级别的访问控制,grant 表示允许访问的字段和值。在定义完字段级别的访问控制后,可以将其应用到索引中,例如:

PUT /logs
{"mappings": {"properties": {"user": {"type": "text","fielddata": true,"fields": {"keyword": {"type": "keyword"}}},"password": {"type": "text","fielddata": true,"fields": {"keyword": {"type": "keyword"}}}}},"settings": {"index": {"query": {"default_field": "user"},"security": {"field_level_security": {"grant": [{"field": "user","value": "john","except": ["password"]}]}}}}
}

这里的 logs 表示索引名称,userpassword 表示字段名称。在定义完索引后,可以使用查询 DSL 来访问索引中的数据,例如:

GET /logs/_search
{"query": {"match": {"user": "john"}}
}
2.7.3 文档级别的访问控制 (Document-Level Security, DLS)

文档级别的访问控制(DLS)允许您限制用户访问特定文档的权限。例如,创建一个名为 logs_read_team1 的角色,只允许用户读取 logs-* 索引中 team 字段值为 team1 的文档:

PUT /_security/role/logs_read_team1
{"indices": [{"names": [ "logs-*" ],"privileges": [ "read" ],"query": {"term": { "team": "team1" }}}]
}

logs_read_team1 角色分配给名为 team1_log_viewer 的用户:

POST /_security/user/team1_log_viewer
{"password" : "mypassword","roles" : [ "logs_read_team1" ],"full_name" : "Team1 Log Viewer"
}

现在,team1_log_viewer 用户只能访问 logs-* 索引中 team 字段值为 team1 的文档,无法访问其他文档。

2.7.4 IP 白名单

您可以通过配置 Elasticsearch 的网络层来限制哪些 IP 地址可以访问 Elasticsearch。这可以通过在 elasticsearch.yml 配置文件中设置 http.hosthttp.publish_host 参数来实现。

例如,只允许来自 IP 地址 192.168.1.100 的请求访问 Elasticsearch:

http.host: 192.168.1.100
http.publish_host: 192.168.1.100

请注意,这种方法只限制了哪些 IP 地址可以访问 Elasticsearch,而不限制用户可以执行的操作。因此,建议将 IP 白名单与其他访问控制方法(如基于角色的访问控制)结合使用。

2.7.5 匿名访问

Elasticsearch 支持配置匿名访问,允许未经身份验证的用户访问 Elasticsearch。匿名用户将被分配一个或多个预定义的角色,以限制其访问权限。

要启用匿名访问,请在 elasticsearch.yml 配置文件中添加以下配置:

xpack.security.authc:anonymous:username: _anonymousroles: read_onlyauthz_exception: true

在此示例中,匿名用户将被分配 read_only 角色,只能读取索引中的数据。请注意,启用匿名访问可能会导致安全风险,因此请谨慎使用。

2.7.6 跨集群复制 (Cross-Cluster Replication, CCR)

跨集群复制(CCR)是一种在多个 Elasticsearch 集群之间同步数据的方法。通过 CCR,您可以将数据从一个集群(称为领导者集群)复制到另一个集群(称为追随者集群)。这可以用于实现地理冗余、负载均衡和数据访问控制。

在 CCR 中,您可以为追随者集群中的用户分配不同的角色和权限,以限制其对领导者集群中的数据的访问。例如,您可以允许追随者集群中的用户只读取特定索引,而不允许他们修改数据或访问其他索引。

要配置 CCR,请按照以下步骤操作:

  1. 在领导者集群和追随者集群中启用 CCR:

    xpack.security.enabled: true
    xpack.ccr.enabled: true
    
  2. 在追随者集群中创建一个远程集群连接,指向领导者集群:

    cluster.remote.leader_cluster:seeds: ["leader_cluster_ip:9300"]
    
  3. 在追随者集群中创建一个跟随索引,以复制领导者集群中的数据:

    PUT /follower_index/_ccr/follow
    {"remote_cluster": "leader_cluster","leader_index": "leader_index"
    }
    
  4. 为追随者集群中的用户分配角色和权限,以限制其对领导者集群中的数据的访问。

总之,Elasticsearch 提供了多种访问控制功能,包括基于角色的访问控制、字段级别的访问控制和文档级别的访问控制。通过正确配置这些功能,可以确保 Elasticsearch 系统的安全性和满足企业级应用的需求。

3. 加密

为了保护数据的安全和隐私,Elasticsearch 提供了多种加密功能,包括传输层安全(TLS)和数据加密。

3.1 传输层安全(TLS)

传输层安全(TLS)是一种加密协议,用于在网络上保护数据的传输。在 Elasticsearch 中,可以通过以下步骤启用 TLS:

  1. 生成证书和私钥,可以使用 Elasticsearch 的 elasticsearch-certutil 工具生成自签名证书。

  2. elasticsearch.yml 配置文件中启用 TLS:

    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: "elastic-certificates.p12"
    xpack.security.transport.ssl.truststore.path: "elastic-certificates.p12"
    
  3. 重启 Elasticsearch 以应用更改。

3.2 数据加密

3.2.1 磁盘加密

Elasticsearch 本身不提供数据加密功能。但是,你可以使用文件系统级别的加密来保护 Elasticsearch 存储的数据。以下是一些建议:

  1. 使用文件系统级别的加密,如 dm-crypt(Linux)、BitLocker(Windows)或 FileVault(macOS)。这些工具可以对 Elasticsearch 数据存储的文件进行加密,从而保护数据的安全。

  2. 使用硬件加密,如自加密硬盘(Self-Encrypting Drives,SEDs)。这些硬盘具有内置的加密功能,可以在硬件级别对数据进行加密,提供更高的安全性和性能。

3.2.2 快照加密

Elasticsearch 支持创建快照以备份数据。为了保护快照中的数据,可以使用以下方法对快照进行加密:

  1. 使用加密的存储服务,如 Amazon S3 或 Google Cloud Storage。这些服务提供了服务器端加密(Server-Side Encryption,SSE)功能,可以自动对存储的数据进行加密。

  2. 使用客户端加密库,如 Amazon S3 Encryption Client 或 Google Cloud Storage Client Libraries。这些库提供了客户端加密(Client-Side Encryption,CSE)功能,可以在上传数据到存储服务之前对数据进行加密。

3.2.3 数据脱敏

数据脱敏是一种数据保护技术,通过对敏感数据进行处理,使其无法识别特定个人,同时保留数据的可用性。在 Elasticsearch 中,可以使用以下方法对数据进行脱敏:

  1. 使用 Ingest Node 处理数据。Ingest Node 是 Elasticsearch 的一个功能,可以在数据索引之前对数据进行预处理。你可以使用 Ingest Pipelines 和 Processors 对敏感数据进行脱敏处理,如删除、替换或哈希。

  2. 使用 Logstash 处理数据。Logstash 是一个数据处理管道,可以从多种来源获取数据,对数据进行处理,然后将数据发送到 Elasticsearch。你可以使用 Logstash 的 Filters 对敏感数据进行脱敏处理,如删除、替换或哈希。

4. 审计

审计是记录和分析用户活动的过程,以确保系统的安全和合规性。Elasticsearch 提供了审计日志功能,可以记录用户执行的操作和产生的事件。

要启用审计日志,需要在 elasticsearch.yml 配置文件中添加以下配置:

xpack.security.audit.enabled: true

启用审计日志后,Elasticsearch 将记录用户执行的操作和产生的事件,并将其存储在日志文件中。可以通过 Kibana 或其他日志分析工具查看和分析审计日志。

总之,Elasticsearch 提供了一系列安全和权限管理功能,包括身份验证、授权、加密和审计。通过正确配置这些功能,可以确保 Elasticsearch 系统的安全和合规性。

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

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

相关文章

安全防控 | AIRIOT智能安防管理解决方案

现代社会对安全和便捷性的需求越来越高,特别是在大型商业园区、住宅社区和办公大楼等场所。传统的安防系统往往存在一些痛点: 通行效率问题:传统门禁系统通常导致人员排队等待,降低了通行效率。车辆通行管理不当会导致交通拥堵和停车问题。 …

Elasticsearch 线上实战问题及解决方案探讨

1、reindex相关问题 1.1 问题描述 我有 1tb 的一个大索引若干,要迁移到另外一个新集群去,有没有好办法?reindex好像会中断...... reindex 是不是就算设置了频率也会莫名的中断,而且没地方查到错误?1000多万的数据&…

【axios封装】万字长文,TypeScript实战,封装一个axios - 基础封装篇

目录 前言版本环境变量配置引入的类型1、AxiosIntance: axios实例类型2、InternalAxiosRequestConfig: 高版本下AxiosRequestConfig的拓展类型3、AxiosRequestConfig: 请求体配置参数类型4、AxiosError: 错误对象类型5、AxiosResponse: 完整原始响应体类型 目标效果开始封装骨架…

dialog打开时重新渲染

在 Vue 中打开 dialog 常用的方法是使用 el-dialog 控件。当 dialog 打开时&#xff0c;常常需要重新渲染对应的内容。这个功能可以通过监听 visible 属性实现。 具体实现方法如下&#xff1a; 在 el-dialog 控件上监听 visible 属性 <template><el-dialog :visibl…

鸿运主动安全监控云平台存在任意文件读取漏洞 附POC

@[toc] 鸿运主动安全监控云平台存在任意文件读取漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途…

蓝桥杯物联网竞赛_STM32L071_5_串口接收发送数据

理论&#xff1a; 串口采取异步通信&#xff0c;即不依赖时钟节拍来接收或发送数据&#xff0c;而是采用互相约定的波特率传输数据。 波特率与单位时间传输的比特数有关&#xff0c;波特率越大传输的数据越多 传输一个比特花费的时间T 1 / 比特率 接受和发送数据的时候需要…

leetcode 210.课程表 II

题目链接&#xff1a;leetcode 210 1.题目 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如&#xff0c;想要…

leetcode:455. 分发饼干

一、题目 原题链接&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a;int findContentChildren(int* g, int gSize, int* s, int sSize) 二、思路 将胃口数组和饼干尺寸数组降序排序 遍历两个数组&#xff0c;从胃口数组中找到符合饼干尺…

网络入门---网络的大致了解

目录标题 网络发展的简单认识协议作用的理解协议的本质什么是协议分层网络通信所面对的问题OSI七层模型TCP/IP模型协议报头的理解局域网通信局域网通信基本原理报头的问题局域网的特点跨网的网络链接如何查看mac地址 网络发展的简单认识 通过之前的学习我们知道计算机是给人提…

使用docker-compose优雅部署nacos

查看代码中引入nacos版本 在应用的pom.xml中搜索nacos关键字&#xff0c;找到相关的nacos依赖 点击以来左边的图标&#xff0c;找到依赖管理器中的pom.xml&#xff0c;并全局搜索nacos&#xff0c;即可找到对应的nacos客户端版本 使用docker-compose部署nacos version: 3s…

Jmeter-分布式压测(远程启动服务器,windows)

1 前提条件 JDK已部署&#xff0c;版本一致Jmeter已部署&#xff0c;版本一致多台服务器连接的同一网络(例如&#xff1a;同一wifi)防火墙处于关闭状态&#xff08;或者对应默认端口处于开放状态&#xff09;虚拟网络适配器都处于关闭状态查找到每一台服务器的IP 2 主服务器配…

蓝桥杯第229题 迷宫与陷阱 BFS C++ 模拟 带你理解迷宫的深奥

题目 迷宫与陷阱 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/229/learning/?page1&first_category_id1&name%E8%BF%B7%E5%AE%AB%E4%B8%8E%E9%99%B7%E9%98%B1 思路和解题方法 首先&#xff0c;定义了一个结构体node来表示迷宫中的每个节点&#xff0c;包…

3种在ArcGIS Pro中制作山体阴影的方法

山体阴影可以更直观的展现地貌特点&#xff0c;表达真实的地形&#xff0c;这里为大家介绍一下在ArcGIS Pro中制作山体阴影的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&#xff0c;常见的GIS数据…

计算机网络实用工具之masscan

简介 MASSCAN 是 TCP 端口扫描器&#xff0c;它异步传输 SYN 数据包并生成类似于最著名的端口扫描器 nmap 的结果。在内部&#xff0c;它的操作更像是scanrand、unicornscan和ZMap&#xff0c;采用异步传输。它是一个灵活的实用程序&#xff0c;允许任意地址和端口范围 官网 …

openssl+EVP详解

EVP&#xff08;Enveloped Public Key&#xff09;是 OpenSSL 中用于提供对称加密、非对称加密和哈希功能的高级加密接口。EVP 库提供了一个抽象的加密框架&#xff0c;使得可以在不同的算法实现之间进行切换&#xff0c;而不需要改变应用程序的代码。以下是一些 EVP 开发的主要…

揭秘Git高手的10个秘密武器:让你的工作效率飙升!

Git和GitHub是每个软件工程师都必须了解的最基本的工具。它们是开发人员日常工作不可或缺的一部分&#xff0c;每天都要与之互动。 精通Git不仅能简化你的日常操作&#xff0c;还能显著提高生产力。在这篇文章中&#xff0c;我们将探讨一组能够极大提升生产力的命令。 随着对…

适用于 Windows 的最佳电脑数据恢复软件是什么?

数据丢失是数字世界中令人不快的一部分&#xff0c;它会在某一时刻影响许多计算机用户。很容易意外删除一些重要文件&#xff0c;这可能会在您努力恢复它们时带来不必要的压力。幸运的是&#xff0c;数据恢复软件可以帮助恢复已删除的文件&#xff0c;即使您没有备份它们。这是…

智慧公厕为高速服务区公厕做出的贡献

在现代社会&#xff0c;科技的飞速发展改变了人们的生活方式&#xff0c;也深刻影响着城市的基础设施和公共服务。而在这个数字化时代的背景下&#xff0c;智慧公厕作为城市智能化管理的一部分&#xff0c;为高速服务区公厕带来了一系列的创新和贡献&#xff0c;为旅客的出行提…

动态规划经典例题leetcode思路代码详解

目录 动态规划基础篇例题 leetcode70题.爬楼梯 leetcode746题.使用最小花费爬楼梯 leetcode198题.打家劫舍 leetcode62题.不同路径 leetcode64题.最小路径和 leetcode63题.63不同路径II 动态规划基础篇例题 这一篇的例题解答是严格按照我上一篇写的动态规划三部曲做的&…

AI 发展的三次危机

前几天闹得沸沸扬扬的OpenAI宫斗事件终于落下帷幕&#xff0c;事情以奥特曼回归OpenAI继续担当CEO并且重组董事会结局。 看起来还算一个不错的结果。 OpenAI 作为目前全球大模型的领先者和佼佼者&#xff0c;他的一举一动肯定会影响整个人类 AI 的发展历程&#xff0c;这次宫…