大数据系列之:Kerberos

大数据系列之:Kerberos

  • 基本概念
  • 工作流程
  • 安全特性
  • 应用场景
  • 总结
  • 加密原理
  • Kerberos认证流程
  • 更改您的密码
  • 授予账户访问权限
  • 票证管理
  • Kerberos 票据属性
  • 使用 kinit 获取票据
  • 使用 `klist` 查看票据
  • 使用 `kdestroy` 销毁票据
  • .k5identity 文件描述

Kerberos 是一种网络认证协议,广泛用于在不安全的网络环境中提供强大的身份验证服务。它基于对称密钥加密技术,旨在确保客户端和服务端之间的通信安全,防止未经授权的访问。

基本概念

KDC (Key Distribution Center): KDC 是 Kerberos 系统的核心组件,负责生成和分发票据(tickets)。

KDC 通常分为两个部分:

  • AS (Authentication Server): 负责验证用户的身份,并发放 TGT (Ticket-Granting Ticket)。
  • TGS (Ticket-Granting Service): 使用 TGT 验证用户身份,并发放服务票据(Service Tickets)。
  • TGT (Ticket-Granting Ticket): TGT 是 AS 发放的一种特殊票据,用于证明用户已经通过了身份验证。用户可以使用 TGT 向 TGS 请求服务票据。
  • Service Ticket: 服务票据是 TGS 发放的一种票据,用户可以使用它来访问特定的服务。

工作流程

用户请求 TGT:

  • 用户向 AS 发送请求,包含用户名和时间戳。
  • AS 验证用户身份(通常通过密码),如果验证成功,AS 生成一个 TGT 并加密后返回给用户。

用户请求服务票据:

  • 用户使用 TGT 向 TGS 发送请求,请求中包含所需服务的名称。
  • TGS 验证 TGT,如果验证成功,TGS 生成一个服务票据并加密后返回给用户。

用户访问服务:

  • 用户将服务票据发送给目标服务。
  • 服务验证服务票据,如果验证成功,允许用户访问服务。

安全特性

  • 对称密钥加密: Kerberos 使用对称密钥加密技术,确保数据在传输过程中不被窃取或篡改。
  • 时间同步: Kerberos 要求客户端和服务器之间的时间同步,以防止重放攻击。
  • 票据有效期: 票据有有限的有效期,过期后需要重新获取,这增加了系统的安全性。

应用场景

Kerberos 广泛应用于企业级网络环境,特别是在需要高度安全的身份验证和授权的情况下。

常见的应用场景包括:

  • Windows 域环境: Windows 域控制器使用 Kerberos 进行身份验证。
  • Linux 和 Unix 环境: 许多 Linux 和 Unix 系统支持 Kerberos 身份验证。
  • Web 服务: 一些 Web 服务使用 Kerberos 进行单点登录(SSO)。

总结

  • Kerberos 是一种强大而复杂的认证协议,能够有效保护网络资源不受未授权访问。
  • 通过使用对称密钥加密和时间同步机制,Kerberos 提供了高效且安全的身份验证服务。

加密原理

在这里插入图片描述

Kerberos认证流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

klist -ket zeppelin1.bigdata.net.keytab
Keytab name: FILE:zeppelin1.bigdata.net.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
1 2021-03-03T03:48:45 zeppelin/zeppelin1.bigdata.net@OPTICS.bigdata.COM
kinit -kt zeppelin1.bigdata.net.keytab zeppelin/zeppelin1.bigdata.net@OPTICS.bigdata.COM

在这里插入图片描述

更改您的密码

要更改您的 Kerberos 密码,请使用 kpasswd 命令。它会要求您输入旧密码(以防止其他人趁您不在时走到您的电脑前并更改您的密码),然后两次提示您输入新密码。(要求您输入两次的原因是为了确保您正确输入了密码。)例如,用户 david 会执行以下操作:

kpasswd
Password for david@EXAMPLE.COM:
Enter new password:
Enter new password again:

授予账户访问权限

如果您需要授予某人登录您的账户的权限,可以通过Kerberos来实现,而无需告诉他们您的密码。只需在您的主目录下创建一个名为.k5login的文件。该文件应包含您希望授予访问权限的每个人的Kerberos主体名称,每个主体名称必须单独占一行。以下是一个示例 .k5login 文件:

jennifer@ATHENA
david@EXAMPLE.COM

此文件将允许用户jennifer和david使用您的用户ID,前提是他们各自领域中的Kerberos票据有效。如果您将在网络上的其他主机上登录,您可能希望在这些主机上的每个.k5login文件中包含您自己的Kerberos主体名称。

使用.k5login文件比直接给出密码要安全得多,因为:
您可以随时通过从.k5login文件中移除相应的主体名称来撤销访问权限。
虽然用户对特定主机(或如果您的.k5login文件被共享,例如通过NFS,则是一组主机)上的您的账户有完全访问权限,但他们不会继承您的网络特权。
Kerberos记录了谁获取了票据,因此系统管理员可以在必要时查明特定时间哪些用户能够使用您的用户ID。

一个常见的应用场景是在root用户的主目录中放置一个.k5login文件,列出的Kerberos主体将获得对该机器的root访问权限。这使得系统管理员可以在不透露root密码的情况下,允许用户本地提升为root,或者远程以root身份登录,同时避免了在网络上传输root密码的风险。

票证管理

在许多系统中,Kerberos 被集成到登录程序中,您在登录时会自动获得票证。其他程序(如 ssh)可以将您的票证副本转发到远程主机。这些程序中的大多数在退出时也会自动销毁您的票证。然而,MIT 建议您在不再需要票证时明确地销毁它们,以确保安全。一种确保这一点的方法是将 kdestroy 命令添加到您的 .logout 文件中。此外,如果您要离开计算机并且担心入侵者利用您的权限,最安全的做法是销毁所有票证副本,或者使用锁定屏幕的屏保程序。

Kerberos 票据属性

Kerberos 票据可以具有多种属性:

  • 可转发的票据:如果一个票据是可转发的,那么 KDC 可以基于该可转发票据签发一个新的票据(必要时具有不同的网络地址)。这允许在不重新输入密码的情况下进行身份验证转发。例如,如果拥有可转发 TGT 的用户登录到远程系统,KDC 可以为该用户签发新的 TGT,使用远程系统的网络地址,从而使得在该主机上的身份验证像本地登录一样工作。
  • 当 KDC 基于可转发票据创建新票据时,它会在新票据上设置转发标志。任何基于设置了转发标志的票据创建的票据也将具有其转发标志。
  • 可代理的票据:类似于可转发票据,可代理票据允许服务接管客户端的身份。然而,与可转发票据不同的是,可代理票据仅针对特定服务签发。换句话说,不能基于可代理但不可转发的票据签发票证授予票据。
  • 代理票据:基于可代理票据签发的票据。
  • 预设日期的票据:带有无效标志签发的票据。在票据上列出的开始时间之后,它可以提交给 KDC 以获取有效的票据。
  • 带有预设日期标志的票证授予票据可用于获取预设日期的服务票据。
  • 可续期的票据:可以在用户不重新输入密码的情况下用于获取新的会话密钥。可续期票据有两个过期时间。第一个是此特定票据过期的时间。第二个是基于此可续期票据签发的任何票据可能的最晚过期时间。
  • 初始标志票据:基于身份验证协议签发的票据,而不是基于票证授予票据。希望确保用户的密钥最近已提供验证的应用服务器可以指定此标志必须设置才能接受票据。
  • 无效票据:必须被应用服务器拒绝。预设日期的票据通常带有此标志发出,并且在能够使用之前必须由 KDC 验证。
  • 预先认证的票据:只有在请求票据的客户端向 KDC 自身进行了认证后才会签发的票据。
  • 硬件认证标志:设置在需要使用硬件进行认证的票据上。预计该硬件仅由请求票据的客户端持有。
  • 传输策略检查标志:如果票据设置了此标志,则表明签发该票据的 KDC 实施了跨域检查策略并检查了票据上的跨域列表。跨域列表包含从首次签发票据的 KDC 所属领域到签发当前票据的 KDC 所属领域的所有中间域。如果没有设置此标志,则应用服务器必须自己检查跨域或拒绝票据。
  • 可作为委托方的标志:表示票据中指定的服务器根据该域的策略适合作为委托方。一些客户端应用程序可能会使用此标志来决定是否将票据转发到远程主机,尽管许多应用程序并不遵守此标志。
  • 匿名票据:其中的命名主体是该域的通用主体;实际上并没有指定将使用票据的具体个人。这种票据的目的仅仅是安全地分发会话密钥。

使用 kinit 获取票据

如果您的站点已经将 Kerberos V5 与登录系统集成,您在登录时会自动获得 Kerberos 票据。否则,您可能需要显式地获取 Kerberos 票据,使用 kinit 程序。同样,如果您的 Kerberos 票据过期,也请使用 kinit 程序获取新的票据。

要使用 kinit 程序,只需键入 kinit,然后在提示符下输入您的密码。例如,Jennifer(用户名为 jennifer)在 Bleep, Inc.(一个虚构的公司,域名是 mit.edu,Kerberos 领域是 ATHENA.MIT.EDU)工作。她会键入:

shell% kinit
jennifer@ATHENA.MIT.EDU 的密码: <-- [在这里键入 Jennifer 的密码。]
shell%

如果您键入了错误的密码,kinit 会给出以下错误消息:

shell% kinit
jennifer@ATHENA.MIT.EDU 的密码: <-- [在这里键入错误的密码。]
kinit: 密码不正确
shell%

这样您就不会获得 Kerberos 票据。

默认情况下,kinit 假设您希望获取默认领域中自己的用户名的票据。假设 Jennifer 的朋友 David 来访,并希望借用她的窗口检查邮件。David 需要在自己的领域 EXAMPLE.COM 中获取自己的票据。他会键入:

shell% kinit david@EXAMPLE.COM
david@EXAMPLE.COM 的密码: <-- [在这里键入 David 的密码。]
shell%

David 就可以使用这些票据登录到他自己的机器。请注意,他在 Jennifer 的机器上本地输入了自己的密码,但从未通过网络传输。本地主机上的 Kerberos 完成了对另一个领域中的 KDC 的身份验证。

如果您希望将票据转发到另一台主机,需要请求可转发的票据。您可以通过指定 -f 选项来实现这一点:

shell% kinit -f
jennifer@ATHENA.MIT.EDU 的密码: <-- [在这里键入您的密码。]
shell%

请注意,kinit 不会告诉您它已获取了可转发的票据;您可以使用 klist 命令进行验证(参见 使用 klist 查看票据)。

通常,您的票据有效期为您系统默认的票据生命周期,许多系统默认为十小时。您可以使用 -l 选项指定不同的票据生命周期。在值后添加字母 s 表示秒,m 表示分钟,h 表示小时,d 表示天。例如,要获取有效期为三小时的可转发票据给 david@EXAMPLE.COM,您会键入:

shell% kinit -f -l 3h david@EXAMPLE.COM
david@EXAMPLE.COM 的密码: <-- [在这里键入 David 的密码。]
shell%

注意

您不能混合单位;指定 3h30m 的生命周期会导致错误。另外,请注意大多数系统指定了最大票据生命周期。如果您请求的票据生命周期超过最大值,它将自动缩短为最大生命周期。

使用 klist 查看票据

klist 命令用于显示您的票据。当您首次获取票据时,通常只会有一个票据授予票据。列表看起来会是这样的:

shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDUValid starting     Expires            Service principal
06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
shell%

票据缓存是指您的票据文件的位置。在上面的例子中,此文件名为 /tmp/krb5cc_ttypa。默认主体是您的 Kerberos 主体。

“有效开始时间”和“到期时间”字段描述了票据的有效期间。“服务主体”描述了每个票据。票据授予票据的第一部分为 krbtgt,第二部分为领域名称。

现在,假设 jennifer 连接到主机 daffodil.mit.edu,然后再次输入 klist,她将看到以下结果:

shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDUValid starting     Expires            Service principal
06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
06/07/04 20:22:30  06/08/04 05:49:19  host/daffodil.mit.edu@ATHENA.MIT.EDU
shell%

这里发生了什么:当 jennifer 使用 ssh 连接到主机 daffodil.mit.edu 时,ssh 程序向 KDC 展示了她的票据授予票据,并请求了一个针对主机 daffodil.mit.edu 的主机票据。KDC 发送了主机票据,ssh 随后将该票据展示给主机 daffodil.mit.edu,因此她无需输入密码即可登录。

假设您的 Kerberos 票据允许您登录到另一个域中的主机,例如 trillium.example.com,该主机也位于另一个 Kerberos 领域 EXAMPLE.COM。如果您 ssh 到这个主机,您将收到一个针对 EXAMPLE.COM 领域的票据授予票据,以及一个新的针对 trillium.example.com 的主机票据。klist 将显示如下内容:
% klist

shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDUValid starting     Expires            Service principal
06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
06/07/04 20:22:30  06/08/04 05:49:19  host/daffodil.mit.edu@ATHENA.MIT.EDU
06/07/04 20:24:18  06/08/04 05:49:19  krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU
06/07/04 20:24:18  06/08/04 05:49:19  host/trillium.example.com@EXAMPLE.COM
shell%

根据您的主机和领域的配置,您还可能看到一个服务主体为 host/trillium.example.com@ 的票据。如果是这样,这意味着您的主机不知道 trillium.example.com 所属的领域,因此它向 ATHENA.MIT.EDU KDC 请求了引荐。下次您连接到 trillium.example.com 时,这条奇怪的记录将用于避免再次请求引荐。

根据您的主机和域的配置,您可能会看到一个带有服务主体 host/trillium.example.com@ 的票据。如果出现这种情况,这意味着您的主机不知道 trillium.example.com 属于哪个域,因此它向 ATHENA.MIT.EDU 的 KDC 请求了引荐。下次您连接到 trillium.example.com 时,这个看起来奇怪的条目将被用于避免再次请求引荐。

您可以使用 -f 选项查看适用于您的票据的标志。这些标志包括:
F: 可转发(Forwardable)
f: 已转发(forwarded)
P: 可代理(Proxiable)
p: 代理(proxy)
D: 可预设日期(postDateable)
d: 预设日期(postdated)
R: 可续期(Renewable)
I: 初始(Initial)
i: 无效(invalid)
H: 硬件认证(Hardware authenticated)
A: 预认证(preAuthenticated)
T: 转发策略已检查(Transit policy checked)
O: 可委托(Okay as delegate)
a: 匿名(anonymous)
以下是一个示例列表。在这个例子中,用户 Jennifer 获取了初始票据(I),这些票据是可转发的(F)和预设日期的(d),但尚未验证(i):

shell% klist -f
Ticket cache: /tmp/krb5cc_320
Default principal: jennifer@ATHENA.MIT.EDUValid starting      Expires             Service principal
31/07/05 19:06:25  31/07/05 19:16:25  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDUFlags: FdiI
shell%

在以下示例中,用户 david 的票据从另一台主机转发(f)到此主机。这些票据是可以再次转发的(F)

shell% klist -f
Ticket cache: /tmp/krb5cc_p11795
Default principal: david@EXAMPLE.COMValid starting     Expires            Service principal
07/31/05 11:52:29  07/31/05 21:11:23  krbtgt/EXAMPLE.COM@EXAMPLE.COMFlags: Ff
07/31/05 12:03:48  07/31/05 21:11:23  host/trillium.example.com@EXAMPLE.COMFlags: Ff
shell%

使用 kdestroy 销毁票据

您的 Kerberos 票据是证明您确实是您自己的凭证,如果有人获得了存储这些票据的计算机的访问权限,票据可能会被窃取。一旦发生这种情况,拥有这些票据的人可以在票据过期之前冒充您。因此,当您离开计算机时,应该销毁您的 Kerberos 票据。

销毁票据非常简单。只需输入 kdestroy

shell% kdestroy
shell%

如果 kdestroy 未能销毁您的票据,它会发出提示音并显示错误消息。例如,如果 kdestroy 找不到任何可销毁的票据,它会显示以下消息:

shell% kdestroy
kdestroy: 在销毁缓存时未找到凭据缓存文件
shell%

.k5identity 文件描述

.k5identity 文件位于用户的家目录中,包含了一组规则,用于根据访问的服务器选择客户端主体。这些规则用于在可能的情况下从缓存集合中选择一个凭证缓存。

空白行和以 # 开头的行将被忽略。每一行的格式如下:

principal_field=value ...

如果服务器主体满足所有字段约束条件,则选择该主体作为客户端主体。以下字段被识别:

  • realm
  • 如果已知服务器主体的域(realm),则将其与值进行匹配,该值可以使用 shell 通配符。对于基于主机的服务器主体,通常只有在 krb5.conf 中有主机名映射时,域才会被知道。
  • service
  • 如果服务器主体是基于主机的主体,则将其服务组件与值进行匹配,该值可以使用 shell 通配符。
  • host
  • 如果服务器主体是基于主机的主体,则将其主机名组件转换为小写,并与值进行匹配,该值可以使用 shell 通配符。
  • 如果服务器主体符合 .k5identity 文件中的多个行的约束条件,则使用第一个匹配行的主体。如果没有行匹配,则将通过其他方式选择凭证,例如域启发式或当前主要缓存。

示例

以下示例 .k5identity 文件在服务器主体属于该领域时选择客户端主体 alice@KRBTEST.COM,在服务器主机位于子域内时选择主体 alice/root@EXAMPLE.COM,以及在访问 mail.example.com 上的 IMAP 服务时选择主体 alice/mail@EXAMPLE.COM:

alice@KRBTEST.COM       realm=KRBTEST.COM
alice/root@EXAMPLE.COM  host=*.servers.example.com
alice/mail@EXAMPLE.COM  host=mail.example.com service=imap

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

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

相关文章

WPF 免费UI 控件HandyControl

示例效果和代码 直接可以用 Button 按钮 | HandyOrg 1.安装 , 输入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …

windows部署docker

1.下载docker 打开浏览器&#xff0c;访问 Docker Desktop 下载页面。 2.安装 Docker Desktop 运行安装程序&#xff1a; 双击下载的 Docker Desktop 安装包&#xff0c;启动安装程序。 选择安装选项&#xff1a; 按照屏幕上的指示进行操作。建议选择默认选项&#xff0c;包…

【Linux】远程登录时,使用图形界面报错:MoTTY X11 proxy: Unsupported authorisation protocol

1、问题描述 使用 MobaXterm 远程登录Ubuntu后,使用sudo权限运行图形界面程序报错: MoTTY X11 proxy: Unsupported authorisation protocol (gpartedbin:10518): Gtk-WARNING **: 22:01:34.377: cannot open display: localhost:10.02、查看SSH配置 修改 SSH 服务端配置,…

解决 Hugging Face SentenceTransformer 下载失败的完整指南:ProxyError、SSLError与手动下载方案

问题背景 在使用 Hugging Face 的 SentenceTransformer 加载预训练模型 all-MiniLM-L6-v2 时&#xff0c;遇到了以下错误&#xff1a; 代理连接失败&#xff08;ProxyError / SSLError: KRB5_S_TKT_NYV&#xff09;大文件下载中断&#xff08;unexpected EOF while reading&a…

MySQL——DQL的单表查询

1、查询表中所有的字段&#xff08;列&#xff09; 语法&#xff1a;select * from 表名; * 是通配符&#xff0c;用来表示所有的字段&#xff08;列&#xff09;。 select 表示查询哪些列。 from 表示从哪张表中查询。 2、查询表中指定的字段 语法&#xff1a;select 列…

开源RuoYi AI助手平台的未来趋势

近年来&#xff0c;人工智能技术的迅猛发展已经深刻地改变了我们的生活和工作方式。 无论是海外的GPT、Claude等国际知名AI助手&#xff0c;还是国内的DeepSeek、Kimi、Qwen等本土化解决方案&#xff0c;都为用户提供了前所未有的便利。然而&#xff0c;对于那些希望构建属于自…

[WUSTCTF2020]CV Maker1

进来是个华丽的界面&#xff0c;我们先跟随这个网页创造一个用户 发现了一个上传端口&#xff0c;尝试上传一个php文件并抓包 直接上传进不去&#xff0c;加个GIF89A uploads/d41d8cd98f00b204e9800998ecf8427e.php 传入 并且报告了 上传路径&#xff0c;然后使用蚁剑连接

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定义&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09; 是一种设计思想&#xff1a;对象不再由你自己创建和管理&#xff0c;而是交给 Spring 容器…

Vue2-实现elementUI的select全选功能

文章目录 使用 Element UI 的全选功能自定义选项来模拟全选 在使用 Element UI 的 el-select组件时&#xff0c;实现“全选”功能&#xff0c;通常有两种方式&#xff1a;一种是使用内置的全选功能&#xff0c;另一种是通过自定义选项来模拟全选。 使用 Element UI 的全选功能…

小菜Go:Ubuntu下Go语言开发环境搭建

前置要求Ubuntu环境搭建 文章推荐 此处推荐一个比较好的文章&#xff0c;基本按部就班就欧克~ 安装虚拟机&#xff08;VMware&#xff09;保姆级教程&#xff08;附安装包&#xff09;_vmware虚拟机-CSDN博客 安装可能遇到的问题 虚拟机安装遇到的问题如&#xff1a;Exception…

安卓中app_process运行报错Aborted,怎么查看具体的报错日志

我在pc端生成了一个jar包&#xff0c;可以正常执行&#xff0c;但是导入到安卓的/data/local/tmp下面执行就会报错 执行命令如下&#xff1a; adb shell cd /data/local/tmp app_process -Djava.class.path/data/local/tmp/demo.jar /data/local/tmp com.example.demo.Hello然…

Python 面向对象 - 依赖倒置原则 (DIP)

1. 核心概念 依赖倒置原则(Dependency Inversion Principle, DIP) 是SOLID原则中的"D"&#xff0c;包含两个关键点&#xff1a; 高层模块不应依赖低层模块&#xff0c;二者都应依赖抽象抽象不应依赖细节&#xff0c;细节应依赖抽象 2. 使用场景 典型应用场景 系…

centos7 yum install docker 安装错误

1、错误信息&#xff1a; [rootlocalhost atguigu]# yum install docker 已加载插件&#xff1a;fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…

【Gorm】模型定义

intro package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite" // GORM 使用该驱动来连接和操作 SQLite 数据库。 )type Product struct {gorm.Model // 嵌入GORM 内置的模型结构&#xff0c;包含 ID、CreatedAt、UpdatedAt、DeletedAt 四个字段Cod…

R语言从专家到小白

文章目录 下载安装R下载安装R StudioCRAN 下载安装R Index of /bin https://cran.r-project.org/ 下载安装R Studio https://posit.co/download/rstudio-desktop/ CRAN R综合档案网络。 CRAN 镜像是一个提供 R 语言软件和包的在线服务&#xff0c;用户可以从不同的地区选择…

Java的Selenium的特殊元素操作与定位之时间日期控件

分为两种情况: 控件没有限制手动输入&#xff0c;则直接调用sendKeys方法写入时间数据 //时间日期控件处理 chromeDriver.get ("https://www,fliggy,com/?ttidsem.000000736&hlreferidbaidu.082076&route sourceseo"); chromeDriver.findElement (By.xpat…

38常用控件_QWidget的enable属性(2)

实现用另一个按钮切换之前按钮的“可用”状态 在同一个界面中,要求不同的控件的 objectName 也是必须不同的.(不能重复&#xff09; 后续就可以通过 ui->objectName 方式来获取到对应的控件对象了 ui->pushButton // 得到了第一个按钮对应的对象 ui->pushButton 2 //…

【Linux学习笔记】初识进程概念和进程PCB

【Linux学习笔记】初识冯诺依曼体系和进程PCB &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】初识冯诺依曼体系和进程PCB前言一. 冯诺依曼体系结构1.1 关于冯诺依曼体系的要点&#xff1a; 二. 操…

7.3 主成分分析(PCA)

一、协方差矩阵 这节是介绍 SVD 在统计和数据分析中的一个主要应用&#xff0c;即主成分分析。例子来自于人类的基因组&#xff0c;脸部识别和金融&#xff0c;目的是理解一个大的数据矩阵&#xff08;测量值&#xff09;。对于 n n n 个样本&#xff0c;我们每个测量 m m m…

anaconda安装使用+pytorch环境配置(cpu)+pycharm环境配置(详细教程)

一、anaconda下载 1.anaconda官网尝试下载&#xff1a; 官网网址&#xff1a;Anaconda | Built to Advance Open Source AI 1.进入官网 2.点击Products->Distribution&#xff0c;跳过注册进入下载页面 3.选择系统下载 2.清华镜像下载 1.网址&#xff1a;Index of /anac…