大数据权限认证 Kerberos 部署

文章目录

  • 1、什么是 Kerberos
  • 2、Kerberos 术语和原理
    • 2.1、Kerberos 术语
    • 2.1、Kerberos 原理
  • 3、Kerberos 服务部署
    • 3.1、前置条件
    • 3.2、安装依赖
    • 3.3、配置 krb5.conf
    • 3.4、配置 kdc.conf
    • 3.5、配置 kadm5.acl
    • 3.6、安装 KDC 数据库
    • 3.7、启动服务
    • 3.8、创建 Kerberos 管理员
    • 3.9、创建普通租户
    • 3.10、Kerberos 客户端安装
  • 4、Kerberos 用户管理
    • 4.1、KDC 支持两种方式管理
    • 4.2、查询所有用户(list_principals)
    • 4.3、查询用户详情(get_principal)
    • 4.4、新增用户(add_principal USER)
    • 4.5、修改用户(modify_principal)
    • 4.6、生成 keytab(ktadd)
    • 4.7、删除用户(delete_principal)
  • 5、Kerberos 有效期管理
    • 5.1、票据(登录)有效期
    • 5.2、用户有效期

1、什么是 Kerberos

  Kerberos 是一种网络身份验证协议,旨在支持使用密钥加密的客户端/服务器应用程序的强大身份验证。 Kerberos 为网络资源提供最高级别的安全性。
  Kerberos 应用客户端/服务器体系结构并支持用户到服务器的身份验证,而不是主机到主机的身份验证。在此模型中,安全性和身份验证将取决于密钥技术,其中网络上的每个主机都有自己的密钥。

2、Kerberos 术语和原理

2.1、Kerberos 术语

  • KDC(Key Distribute Center): 密钥分发中心,负责存储用户信息,管理发放票据。
  • Realm: Kerberos 所管理的一个领域或范围,称之为一个 Realm。例如:HADOOP.COM。
  • Principal: Kerberos 所管理的一个用户或者一个服务(又称为主体),可以理解为 Kerberos 中保存的一个账号,其格式通常如下:primary/instance@realm ,即账号/实例名@域名,其中 instance可以省略。例如:nn/bigdata2@HADOOP.COM、test@HADOOP.COM。
  • Keytab:Kerberos 中的用户认证,可通过密码或者密钥文件证明身份,keytab指密钥文件,使用 keytab 可以不用输入密码即可登录。例如:kinit test@HADOOP.COM -kt /root/test.keytab。

2.1、Kerberos 原理

  Kerberos 模型基于 Needham-Schroeder 的可信第三方协议,采用DES 加密(也可用其他算法替代),它与网络上的每个实体分别共享一个不同的秘密密钥,知道该秘密密钥就是身份的证明。这里以吃饭为例,简单阐述 Client 与 Kerberos 、TGS 及 Server 之间的关系如下:
认证模型
  Kerberos 有一个所有客户和秘密密钥的数据库,由于 Kerberos 知道每个人的秘密密钥,所以它能产生一个实体证实另一个实体身份的消息。Kerberos 还能产生会话密钥,只供一个客户机和一个服务器(或两个客户机)使用。会话密钥用来加密双方间的通信消息,通信完毕,即销毁会话密钥。

Kerberos 协议如下:

  • 客户从Kerberos 请求一张票据许可票据(TGT,Ticket Granting Ticket)作为票据许可服务(TGS,Ticket-Granting Service),该票据用用户的秘密密钥加密后发送给用户;
  • 为了使用特定的服务器,客户需要从 TGS 中请求一张票据,TGS 将票据发回给客户;
  • 客户将此票据提交给服务器和鉴别器,如果客户的身份没有问题,服务器就会让客户访问该服务。
    认证流程
    详细过程参考:《一文搞懂Kerberos》

3、Kerberos 服务部署

3.1、前置条件

  • 准备好域名,本文使用的域名是 HADOOP.COM;
  • 确保 Kerberos 认证的机器时间同步。

机器角色规划如下:
机器角色

3.2、安装依赖

sudo yum install -y krb5-server krb5-libs krb5-auth-dialog krb5-workstation

3.3、配置 krb5.conf

默认位置:/etc/krb5.conf ,用于客户端配置。

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = HADOOP.COM#default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {kdc = bigdata3admin_server = bigdata3}[domain_realm]
# .example.com = HADOOP.COM
# example.com = HADOOP.COM

说明:

  • [logging]:服务端 志打印位置。
  • [libdefaults]:连接的默认配置 。
    • default_realm:设置默认领域。多个领域是配置在 [realms] 章节。
    • udp_preference_limit=1:禁止使用udp(可以防止一个 Hadoop 中的错误)
    • ticket_lifetime: 凭证生效的时限,一般为 24 小时。
    • renew_lifetime: 凭证最长可以被延期的时限,一般为 7 天。
    • 去掉 des256 加密支持,因为该加密算法需要 JCE 的额外支持,增加了对环境的依赖。
  • [realms]:配置所有需要访问的 Kerberos 域。
    • kdc:kdc 服务器地址(机器:端口),默认端口 88。
    • admin_server: admin 服务地址(机器:端口),默认端口 749。
    • default_domain: 指定默认的域名。

3.4、配置 kdc.conf

默认位置:/var/kerberos/krb5kdc/kdc.conf,这是 KDC 服务端配置文件,需要开通 88 端口。

[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]HADOOP.COM = {#master_key_type = aes256-ctsmax_renewable_life = 7d 0h 0m 0sacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}

说明:

  • [kdcdefaults] :KDC 默认行为配置,全局生效。
  • [realms]:配置每个域的信息。
    • MYREALM: 域名,建议统一使用大写。
    • acl_file: admin 的用户权限,需要用户自己创建。
    • supported_enctypes:支持的校验方式。
    • admin_keytab:KDC 进行校验的管理员 keytab。

3.5、配置 kadm5.acl

文件位置: /var/kerberos/krb5kdc/kadm5.acl ,用于 ACL(访问控制列表),此处提前配置管理员。

[root@bigdata3 etc]# sudo cat /var/kerberos/krb5kdc/kadm5.acl
*/admin@HADOOP.COM	*

3.6、安装 KDC 数据库

安装命令:

kdb5_util create -r HADOOP.COM -s

注意:我使用的 realname 就是 HADOOP.COM,可以根据需要改成自己的。

  • -r:指定域名,注意和配置文件域名保持一致。
  • -s:指定将数据库的主节点密钥存储在文件中,从而可以在每次启动 KDC 时自动重新生成主节点密钥。
  • -d: 指定数据库名,默认名为 principal。
[root@bigdata3 etc]# sudo kdb5_util create -r MYREALM -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/M@HADOOP.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:  # 输入 KDC 数据库密码,重要,admin
Re-enter KDC database master key to verify: #admin

说明:

  • 该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库文件。在重装时,可能需要需要删除数据库文件。
  • 对于 KDC 数据库密码,非常重要,请妥善保存。

3.7、启动服务

sudo chkconfig --level 35 krb5kdc on
sudo chkconfig --level 35 kadmin on
sudo service krb5kdc start
sudo service kadmin start

3.8、创建 Kerberos 管理员

可使用 kadmin.local (只允许在本机执行)或 kadmin 工具,管理 KDC 服务。

创建超级管理员的 Principle:root/admin

[root@bigdata3 etc]# sudo kadmin.local -q "addprinc root/admin"
Authenticating as principal root/admin@HADOOP.COM with password.
WARNING: no policy specified for root/admin@HADOOP.COM; defaulting to no policy
Enter password for principal "root/admin@HADOOP.COM": # root
Re-enter password for principal "root/admin@HADOOP.COM": # root
Principal "root/admin@HADOOP.COM" created.

一条命令创建:

sudo echo -e "root\nroot" | kadmin.local -q "addprinc root/admin"

3.9、创建普通租户

1、创建测试用户 test,此时用户只能通过密码方式访问(在生成 keytab 文件后,可通过 keytab 访问,一说生成 keytab 之后密码登录不可用)。

[root@bigdata3 etc]#   echo -e "test\ntest" | sudo kadmin.local -q "addprinc test"
# 注意上面创建了用户 test,密码也是 test
Authenticating as principal root/admin@HADOOP.COM with password.
WARNING: no policy specified for test@HADOOP.COM; defaulting to no policy
Enter password for principal "test@HADOOP.COM":
Re-enter password for principal "test@HADOOP.COM":
Principal "test@HADOOP.COM" created.

2、用户基本操作示例

# 1. 登录
[root@bigdata3 etc]# kinit test
Password for test@HADOOP.COM: # test# 2. 查看登录缓存
[root@bigdata3 etc]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T18:40:47  2024-03-02T18:40:47  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T18:40:47, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96# 3. 更新票据缓存有效期
[root@bigdata3 etc]# kinit -R
[root@bigdata3 etc]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T18:41:16  2024-03-02T18:41:16  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T18:40:47, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 ### 可以看到 Expires 时间已经更新,注意 renew until 是相对不变的# 4. 销毁登录缓存
[root@bigdata3 etc]# kdestroy
[root@bigdata3 etc]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)

3、查看安装版本

[root@bigdata3 etc]# klist -V
Kerberos 5 version 1.15.1

3.10、Kerberos 客户端安装

1、依赖安装:

$ sudo yum install krb5-devel krb5-workstation  -y

2、配置 krb5.conf
可从 KDC 机器获取 krb5.conf 文件

4、Kerberos 用户管理

4.1、KDC 支持两种方式管理

  • KDC 本机使用 kadmin.local 管理,需要登录 KDC,无需输入 Kerberos 管理员密码;
  • 远程或在 KDC本机使用 kadmin管理,需要 Kerberos 管理员密码。

方式1:在 KDC 主机登录:

[root@bigdata3 etc]# kadmin.local
Authenticating as principal root/admin@HADOOP.COM with password.
kadmin.local:  # 可执行命令

方式 2:使用 kadmin 管理用户

[root@bigdata2 yum.repos.d]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@HADOOP.COM: # root

如果没有 root 用户可以在 KDC 主机增加一个:

sudo echo -e "root\nroot" | kadmin.local -q "addprinc root/admin" # 用户名密码为 root/root

4.2、查询所有用户(list_principals)

kadmin.local:  list_principals
HTTP/bigdata1@HADOOP.COM
HTTP/bigdata2@HADOOP.COM
K/M@HADOOP.COM
admin/admin@HADOOP.COM
dn/bigdata1@HADOOP.COM
dn/bigdata2@HADOOP.COM
dn/bigdata3@HADOOP.COM
jn/bigdata1@HADOOP.COM
jn/bigdata2@HADOOP.COM
jn/bigdata3@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/bigdata3@HADOOP.COM
kadmin/changepw@HADOOP.COM
kiprop/bigdata3@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
nn/bigdata1@HADOOP.COM
nn/bigdata2@HADOOP.COM
root/admin@HADOOP.COM
test@HADOOP.COM

4.3、查询用户详情(get_principal)

kadmin.local:  get_principal test
Principal: test@HADOOP.COM
Expiration date: [never]
Last password change: 五 3月 01 15:12:13 CST 2024
Password expiration date: [never]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: 五 3月 01 15:12:13 CST 2024 (root/admin@HADOOP.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 1, aes256-cts-hmac-sha1-96
Key: vno 1, aes128-cts-hmac-sha1-96
Key: vno 1, des3-cbc-sha1
Key: vno 1, arcfour-hmac
Key: vno 1, camellia256-cts-cmac
Key: vno 1, camellia128-cts-cmac
Key: vno 1, des-hmac-sha1
Key: vno 1, des-cbc-md5
MKey: vno 1
Attributes:
Policy: [none]

4.4、新增用户(add_principal USER)

1、使用默认配置

kadmin.local:  add_principal Leo825 # 新增 Leo825 租户
WARNING: no policy specified for Leo825@HADOOP.COM; defaulting to no policy
Enter password for principal "Leo825@HADOOP.COM":  # 输入密码 Leo825
Re-enter password for principal "Leo825@HADOOP.COM":  # 再次输入密码 Leo825
Principal "Leo825@HADOOP.COM" created.
kadmin.local:  quit # 退出# 测试
[root@bigdata3 etc]# kinit Leo825
Password for Leo825@HADOOP.COM: # 输入密码 Leo825
[root@bigdata3 etc]# klist
Ticket cache: FILE:/tmp/krb5cc_0 # 登录成功
Default principal: Leo825@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T19:05:24  2024-03-02T19:05:24  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T19:05:24

2、指定有效期

kadmin.local:  addprinc
usage: add_principal [options] principaloptions are:[-randkey|-nokey] [-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife][-kvno kvno] [-policy policy] [-clearpolicy][-pw password] [-maxrenewlife maxrenewlife][-e keysaltlist][{+|-}attribute]# 用户有效期 -expire
addprinc -expire "2020-9-9 20:00" test5
# 用户有效期 + 用户密码有效期 -pwexpire
addprinc -expire "2020-9-9 20:00" -pwexpire "2020-9-10 20:00" test6
# 用户有效期 + 用户密码有效期 + 票据生命有效期
modify_principal -expire "6/6/2009 12:01am EST" -pwexpire "6/7/2009 12:01am EST" -maxlife "12:00" user1

4.5、修改用户(modify_principal)

usage: modify_principal [options] principaloptions are:[-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife][-kvno kvno] [-policy policy] [-clearpolicy][-maxrenewlife maxrenewlife] [-unlock] [{+|-}attribute]attributes are:allow_postdated allow_forwardable allow_tgs_req allow_renewableallow_proxiable allow_dup_skey allow_tix requires_preauthrequires_hwauth needchange allow_svr password_changing_serviceok_as_delegate ok_to_auth_as_delegate no_auth_data_requiredlockdown_keyswhere,[-x db_princ_args]* - any number of database specific arguments.Look at each database documentation for supported arguments

4.6、生成 keytab(ktadd)

[root@bigdata3 etc]# kadmin.local
Authenticating as principal Leo825/admin@HADOOP.COM with password.
kadmin.local:  ktadd -k /tmp/Leo825.keytab Leo825
Entry for principal Leo825 with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/tmp/Leo825.keytab.

通过 keytab 方式认证:

kinit Leo825@HADOOP.COM -kt /tmp/Leo825.keytab

4.7、删除用户(delete_principal)

kadmin.local:  delete_principal Leo825
Are you sure you want to delete the principal "Leo825@HADOOP.COM"? (yes/no): yes
Principal "Leo825@HADOOP.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.

5、Kerberos 有效期管理

Kerberos 可以支持两个层面的有效期管理,包括:登录(票据)有效期(ticket lifetime)和 用户有效期(user lifetime)

5.1、票据(登录)有效期

  登录有效期用于控制用户在客户端登录前后的生命周期管理,包括登录、销毁和刷新等操作(可类比 web 系统登录,可以登入、登出和刷新 session)。登录有效期受客户端配置、KDC 端配置和 Principal 属性控制。

使用 klist 可以看到当前登录有效期信息:

[root@bigdata3 etc]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T19:22:49  2024-03-02T19:22:49  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T19:22:49

重点参数:

  • Valid starting:Ticket 认证开始时间
  • Expires:Ticket 认证过期时间
  • renew until:Ticket 认证的刷新截止时间

当然Ticket 认证过期时间不是随机的,而是有客户端和 kdc 端重点参数 Ticket 生命有效期(ticket_lifetime)规定的。同样的,最大刷新时间也不是无限制可刷新,而是有参数 Ticket 最大可刷新有效期(renew_lifetime) 控制的:

  • ticket lifetime:Ticket 生命有效期
  • renew_lifetime:Ticket 最大可刷新有效期

例如,客户端配置:

[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = HADOOP.COM#default_ccache_name = KEYRING:persistent:%{uid}

5.2、用户有效期

  用户有效期用于控制 Kerberos 用户可登录系统的生命周期。用户有效期只有使用 kadmin 管理员工具配置。可配置对Kerberos 用户的用户有效期和用户密码有效期。

# 72小时后
kadmin.local: modify_principal -expire "72 hours" # 用户有效期-pwexpire "6/7/2020 12:01am EST" principal_name # 用户密码有效期#以上为行为方便,实际需要保持在同一行执行

参数:

  • expire:用户有效期
  • pwexpire:用户密码有效期

参数一览

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

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

相关文章

idea 手动打 jar 包

1.在 File 中找到并点击 Project Structure 2.按图中高亮的部分依次点击 3.在 Main Class 处设置要打包的类,记得在 Directory for ... 处设置目录为根目录,设置好以后点击两次 OK 回到首页 4.在页面上方找到 Build ,点击 Build Artifacts...…

【Linux】在 Ubuntu 系统下使用 Screen 运行 Python 脚本

在 Ubuntu 系统下使用 Screen 运行 Python 脚本的优点 在 Ubuntu 操作系统中,Screen 是一种非常有用的工具,特别是在需要长时间运行的任务或者需要在后台运行的任务中。结合 Python 脚本,Screen 提供了一种灵活且高效的方式来管理和执行任务…

ECOVADIS评估-自2024年1月1日起发布的记分卡的资格标准说明

EcoVadis评分(0-100分)反映了进行评估时公司的企业社会责任管理体系的质量。EcoVadis奖牌和奖章计划旨在表彰按EcoVadis评估方法中所述,已完成EcoVadis评估流程并展示出相对强大的管理系统来解决企业社会责任标准的合格公司。奖牌和奖章的资格…

docker常用操作命令

常用的命令,详细的命令下方有具体介绍 docker ps 查看正在运行的容器 docker ps -a 查看全部容器 docker images 查看本地镜像 docker search [镜像名称] 查询镜像 docker run --name mynginx -d nginx:latest: 使用docker镜像nginx:latest以后台模…

在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些?

在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些? 安装Docker: 首先,需要在Windows操作系统上激活WSL2功能。这是因为Docker作为一个容器工具,依赖于已存在并运行的Linux内核环境。可以通过使用winget来安装Docker。具体…

排序(2)——希尔排序

希尔排序(缩小增量排序) 基本思想 希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后&…

Linux - 基本背景

1、linux发展史 1.1、UNIX发展历史 1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。1969-1970年,AT&T的贝尔实验室研究…

[SD] 安装使用stable diffusion webui

1.下载基础版本并解压: https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/download/v1.0.0-pre/sd.webui.zip 2.运行update.bat 这步的目的是升级到最新版本,并下载相应的依赖库。 这步可能会提示某些git仓库无法clone到本地&#…

[工具探索]-Gitlab的CI/CD操作

在 GitLab 中,CI(持续集成)是一项强大的功能,它允许你自动化构建、测试和部署你的代码。 在 GitLab CI/CD 中,.gitlab-ci.yml 文件是用于定义构建和部署流程的配置文件。它使用一种基于 YAML 的语法。 下面是一个简单…

dp——路径距离

能帮到你的话,就给个赞吧 😘 文章目录 01 62. 不同路径02 63. 不同路径 II03 64. 最小路径和04 72. 编辑距离05 120. 三角形最小路径和06 124. 二叉树中的最大路径和07 174. 地下城游戏08 514. 自由之路09 576. 出界的路径数10 931. 下降路径最小和11 13…

AcWing 1229. 日期问题 解题思路及代码

先贴个题目: 以及原题链接:1229. 日期问题 - AcWing题库https://www.acwing.com/problem/content/1231/ 这题其实和之前的回文日期相似,可以直接暴力枚举,然后得解,放个小片段: for (int date 19600101; …

UI自动化-(web端下拉选择框弹出框滚动条操作-实操入门)

1、下拉选择框操作 在 UI 自动化中,操作下拉选择框可以通过以下步骤进行: 定位下拉选择框元素:通过适当的元素定位方法,找到下拉选择框的元素。打开下拉框:例如通过点击(.click)来操作下拉框元素打开下拉框。选择选项:可以通过以下几种方式选择下拉框中的选项:根据索…

uni-app 页面跳转动画

API的方式 uni.navigateTo({url: ../test/test,animationType: pop-in,animationDuration: 200 }); uni.navigateBack({delta: 1,animationType: pop-out,animationDuration: 200 });pages.json中配置的方式 "style": {"app-plus": {"animationType…

【代码学习】pytorch_lightning

在Follow别人工作时,经常发现别人使用pytorch_lightning模板,比如这篇分布式信源信道联合编码工作就是用了lightning-hydra-template模板,有必要学习下这个框架。

高级语言期末2009级A卷(计算机学院)

1.编写bool函数&#xff0c;判定给定的正整数n&#xff0c;M是否满足&#xff1a;M为n的质因数&#xff08;能整除n的质数&#xff09; #include <stdio.h> #include <stdbool.h> #include <math.h>bool Isprime(int n) {if(n<1)return false;for(int i2…

时隔n年再度会看Vue,Git

时隔n年再度会看Vue,Git 曾经沧海难为水&#xff0c;除却巫山不是云。不知道这句话用在这里合不合适&#xff0c;好多东西在记忆中都淡化了。但是互联网确是有记忆的。研究以前项目的时候&#xff0c;翻看到gitee码云上托管的项目&#xff0c;就像是自己的孩子重新又回来了一样…

突破编程_C++_面试(异常处理)

面试题 1 &#xff1a;什么是异常处理&#xff1f;为什么需要它&#xff1f; 在C中&#xff0c;异常处理是一种处理程序运行时错误的机制。它允许程序员在程序的某个部分中定义和处理可能会出现的异常情况&#xff0c;即“异常”。这些异常情况通常是由错误条件、非法操作或其…

Laravel Octane 和 Swoole 协程的使用分析

之前在工作中使用 Laravel Octane 的 concurrently 处理并发时&#xff0c;发现在队列和定时任务中不会触发并发效果。经过分析&#xff0c;作了如下猜测&#xff1a;队列和定时任务都属于一个独立的进程&#xff0c;与 Octane 服务无关&#xff0c;而 Octane concurrently 恰恰…

C#高级:DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…

数据页和缓存页(BufferPool)

1. 数据页&#xff08;dataPage&#xff09; 什么是数据页&#xff1f; 数据页是 MySQL 存储引擎在磁盘和内存之间传输数据的基本单位&#xff0c;默认大小为16KB。 数据页的结构&#xff1a; 表头&#xff1a;储存与页相关的元信息&#xff0c;比如&#xff0c;页号&#…