Kerberos基础

news2024/11/25 4:26:22

一. Kerberos概述

Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。

Hadoop使用Kerberos作为用户和服务的强身份验证和身份传播的基础。Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。 Kerberos是第三方认证机制,其中用户和服务依赖于第三方(Kerberos服务器)来对彼此进行身份验证。 Kerberos服务器本身称为密钥分发中心或KDC。 在较高的层面上,它有三个部分:

一个认证服务器(AS)执行初始认证并颁发票证授予票证(TGT)
一个票据授权服务器(TGS)发出基于初始后续服务票证TGT
一个用户主要来自AS请求认证。AS返回使用用户主体的Kerberos密码加密的TGT,该密码仅为用户主体和AS所知。用户主体使用其Kerberos密码在本地解密TGT,从那时起,直到ticket到期,用户主体可以使用TGT从TGS获取服务票据。服务票证允许委托人访问各种服务。

Kerberos简单来说就是一个用于安全认证第三方协议,它采用了传统的共享密钥的方式,实现了在网络环境不一定保证安全的环境下,client和server之间的通信,适用于client/server模型,由MIT开发和实现。

Kerberos服务是单点登录系统,这意味着您对于每个会话只需向服务进行一次自我验证,即可自动保护该会话过程中所有后续事务的安全。

由于每次解密TGT时群集资源(主机或服务)都无法提供密码,因此它们使用称为keytab的特殊文件,该文件包含资源主体的身份验证凭据。 Kerberos服务器控制的主机,用户和服务集称为领域。

二. Kerberos术语

Princal(安全个体):Kerberos所管理的一个用户或者一个服务,可以理解为Kerberos中保存的一个账号,其格式通常如下:primary**/**instance@realm

Realm:Kerberos所管理的一个领域或范围,称之为一个Realm。

keytab:Kerberos中的用户认证,可通过密码或者密钥文件证明身份,keytab指密钥文件。

KDC(key distribution center): 认证过程的票据生成管理服务,其中包含两个服务,AS(Authentication Service)和TGS(Ticket Granting Service)。
Ticket:一个记录,客户用它来向服务器证明自己的身份,包括客户标识,会话密钥,时间戳.
AS(Authentication Server):认证服务器, 为client生成TGT的服务。
TGS(Ticket Grantion Server): 许可证服务器, 为client生成某个服务的ticket
TGT(Ticket-grantion Ticket) : 用于获取ticket的票据
AD(Account Database): 存储所有client的白名单,只有存在于白名单的client才能顺利申请到ticket

三. Kerberos认证流程

(1)客户端执行kinit命令,输入Principal及Password,向AS证明身份,并请求获取TGT。
(2)AS检查Database中是否存有客户端输入的Principal,如有则向客户端返回TGT。
(3)客户端获取TGT后,向TGS请求ServerTicket。
(4)TGS收到请求,检查Database中是否存有客户端所请求服务的Principal,如有则向客户端返回ServerTicket。
(5)客户端收到ServerTicket,则向目标服务发起请求。
(6)目标服务收到请求,响应客户端。

四.Kerberos部署

4.1 概述

Cloudera提供了非常简便的Kerberos集成方式,基本做到了自动化部署。

系统:CentOS 7.3

操作用户:admin

角色分布如下:

角色部署节点
KDC, AS, TGS,Kerberos Agent192.168.0.200
Kerberos Agent192.168.0.[201-202]

假设slaves文件如下:

192.168.0.201
192.168.0.202

4.3 Kerberos安装

在192.168.0.200上安装服务端:

yum -y install krb5-server openldap-clients

在192.168.0.[201-202]上安装客户端:

pssh -h slaves -P -l root -A "yum -y install krb5-devel krb5-workstation"

在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它们分别反映了realm name 以及 domain-to-realm mappings。

4.4 修改配置

4.4.1 配置krb5.conf

/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = XICHUAN.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
  EXAMPLE.COM = {
   kdc = master01-dev
   admin_server = master01-dev
  }

[domain_realm]
  .example.com = XICHUAN.COM
  example.com = XICHUAN.COM

说明

[logging]:表示server端的日志的打印位置

[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置

  1. default_realm = EXAMPLE.COM 默认的realm,必须跟要配置的realm的名称一致。

  2. udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误

  3. ticket_lifetime 表明凭证生效的时限,一般为24小时。

  4. renew_lifetime 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败

[realms]:列举使用的realm。

  1. kdc:代表要kdc的位置。格式是 机器:端口

  2. admin_server: 代表admin的位置。格式是机器:端口

  3. default_domain:代表默认的域名

[appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。

分发krb5.conf至所有client:

//这一步可以不需要,因为在Cloudera Manager中启用配置krb5.conf后,它会自动帮你部署到客户端。

pscp -h slaves krb5.conf /tmp
pssh -h slaves "cp /tmp/krb5.conf /etc"

4.4.2 配置kdc.conf

默认放在 /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 XICHUAN.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes128-cts:normal aes256-cts 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
  max_life = 24h
  max_renewable_life = 7d
 }

说明:

XICHUAN.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
max_renewable_life = 8d 涉及到是否能进行ticket的renwe必须配置。
master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,推荐不使用。
acl_file:标注了admin的用户权限。文件格式是:
Kerberos_principal permissions [target_principal][restrictions]支持通配符等。
admin_keytab:KDC进行校验的keytab。后文会提及如何创建。
supported_enctypes:支持的校验方式。注意把aes256-cts去掉。

4.4.3 配置kadm5.acl

修改服务端192.168.0.200上的配置文件/var/kerberos/krb5kdc/kadm5.acl,以允许具备匹配条件的admin用户进行远程登录权限:

*/admin@XICHUAN.COM *

说明:

标注了admin的用户权限,需要用户自己创建。文件格式是:
Kerberos_principal permissions [target_principal][restrictions]
支持通配符等。最简单的写法是:
*/admin@XICHUAN.COM *
代表名称匹配*/admin@XICHUAN.COM 都认为是admin,权限是 * 代表全部权限。

4.5 创建Kerberos数据库

在192.168.0.200上对数据库进行初始化,默认的数据库路径为/var/kerberos/krb5kdc,如果需要重建数据库,将该目录下的principal相关的文件删除即可,请牢记数据库密码。

kdb5_util create -r XICHUAN.COM -s

说明:

[-s] 表示生成 stash file ,并在其中存储master server key(krb5kdc)
[-r] 来指定一个realm name , 当krb5.conf中定义了多个realm时使用
当 Kerberos database创建好之后,在 /var/kerberos/ 中可以看到生成的 principal相关文件

4.6 启动Kerberos服务

在192.168.0.200上执行:

#启动服务命令 
systemctl start krb5kdc 
systemctl start kadmin 

#加入开机启动项 
systemctl enable krb5kdc 
systemctl enable kadmin

查看进程:

[root@master01-dev ~]# netstat -anpl|grep kadmin
tcp        0      0 0.0.0.0:749             0.0.0.0:*               LISTEN      67465/kadmind       
tcp        0      0 0.0.0.0:464             0.0.0.0:*               LISTEN      67465/kadmind       
tcp6       0      0 :::749                  :::*                    LISTEN      67465/kadmind       
tcp6       0      0 :::464                  :::*                    LISTEN      67465/kadmind       
udp        0      0 0.0.0.0:464             0.0.0.0:*                           67465/kadmind       
udp6       0      0 :::464                  :::*                                67465/kadmind       
[root@master01-dev ~]# netstat -anpl|grep kdc
tcp        0      0 0.0.0.0:88              0.0.0.0:*               LISTEN      67402/krb5kdc       
tcp6       0      0 :::88                   :::*                    LISTEN      67402/krb5kdc       
udp        0      0 0.0.0.0:88              0.0.0.0:*                           67402/krb5kdc       
udp6       0      0 :::88                   :::*                                67402/krb5kdc  

4.7 创建Kerberos管理员principal

 #需要设置两次密码 
kadmin.local -q "addprinc root/admin"
#使用cloudera-scm/admin作为CM创建其它principals的超级用户
kadmin.local -q "addprinc cloudera-scm/admin"

principal的名字的第二部分是admin,那么根据之前配置的acl文件,该principal就拥有administrative privileges,这个账号将会被CDH用来生成其他用户/服务的principal。

注意需要先kinit保证已经有principal缓存。

[root@master01-dev ~]# kinit cloudera-scm/admin
Password for cloudera-scm/admin@XICHUAN.COM: 
[root@master01-dev ~]# klist 
Ticket cache: KEYRING:persistent:0:0
Default principal: cloudera-scm/admin@XICHUAN.COM

Valid starting       Expires              Service principal
09/01/2022 11:51:17  09/02/2017 11:51:16  krbtgt/BOCLOUD.COM@XICHUAN.COM
	renew until 09/08/2022 11:51:16

Kerberos客户端支持两种,一是使用 principal + Password,二是使用 principal + keytab

principal + Password适合用户进行交互式应用,例如hadoop fs -ls这种,后者适合服务,例如yarn的rm、nm等。
principal + keytab就类似于ssh免密码登录,登录时不需要密码了。

五.Kerberos使用

5.1 Kerberos主体Principal介绍

在官网上有详细的介绍Principal的介绍,链接为:http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-user/What-is-a-Kerberos-Principal_003f.html

主体是Kerberos可以为其分配票证的唯一标识。主体可以具有任意数量的组件。每个组件都由一个组件分隔符(通常为 /)分隔。最后一个组成部分是领域,由领域分隔符(通常为@)与主体的其余部分分隔。如果主体中没有领域组件,则将假定主体在使用它的上下文中位于默认领域中

Principal的格式一般为:primary/instance@REALM

primary是Principal的一部分,如果是用户,则为用户名,如果是主机则为主机名。

instance是一个可选字符串,用于限定主服务器。该实例与主实例之间用斜杠(/)隔开。对于用户而言,该实例通常为null,但用户可能还具有一个附加的主体,即一个名为admin的实例,用该实例来管理数据库。主体jennifer@XICHUAN.COM与主体root/admin@XICHUAN.COM完全分开 ,具有单独的密码和单独的权限。对于主机,实例是标准主机名,例如 xichuan.com。

REALM是您的Kerberos领域。在大多数情况下,您的Kerberos域是您的域名,以大写字母表示。例如,机器daffodil.example.com就在领域中EXAMPLE.COM

5.2 Kerberos 命令使用

kadmin.local 与 kadmin区别:
kadmin.local:需要在 KDC server 上面操作,无需密码即可管理资料库
kadmin:可以在任何一台 KDC 领域的系统上面操作,但是需要输入管理员密码

5.2.1登陆kinit

kinit root/admin@XICHUAN.COM

[root@node01 ~]# kinit root/admin@XICHUAN.COM
Password for root/admin@XICHUAN.COM: root
[root@node01 ~]# 

或者使用keytap登陆

kinit -kt /opt/xichuan.keytab xichuan/admin

[root@node01 ~]# kinit -kt /opt/xichuan.keytab xichuan/admin
[root@node01 ~]# 

5.2.2查询登陆状态klist

klist

[root@node01 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: root/admin@XICHUAN.COM

Valid starting       Expires              Service principal
10/26/2022 15:19:15  10/27/2022 15:19:15  krbtgt/XICHUAN.COM@XICHUAN.COM
	renew until 11/02/2022 15:19:15

5.2.3退出登陆kdestroy

kdestroy

[root@node01 ~]# kdestroy
[root@node01 ~]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)

5.2.4登录KDC后台 kadmin.local

kadmin.local

[root@node02 etc]# kadmin.local
Authenticating as principal root/admin@XICHUAN.COM with password.
kadmin.local:  

如果找不到kadmin.local命令,可以使用find / -name kadmin 来查找
一般的位置为:/usr/bin/kadmin

5.2.5查看用户列表 listprincs

listprincs

[root@node01 ~]# kadmin
Authenticating as principal root/admin@XICHUAN.COM with password.
Password for root/admin@XICHUAN.COM: 
kadmin:  listprincs
HTTP/node01@XICHUAN.COM
HTTP/node02@XICHUAN.COM
HTTP/node03@XICHUAN.COM
K/M@XICHUAN.COM
cloudera-scm/admin@XICHUAN.COM
hdfs/node01@XICHUAN.COM
hdfs/node02@XICHUAN.COM
hdfs/node03@XICHUAN.COM
hive/node01@XICHUAN.COM
httpfs/node01@XICHUAN.COM
hue/node03@XICHUAN.COM
impala/node01@XICHUAN.COM
impala/node02@XICHUAN.COM
impala/node03@XICHUAN.COM
kadmin/admin@XICHUAN.COM
kadmin/changepw@XICHUAN.COM
kadmin/node02@XICHUAN.COM
kiprop/node02@XICHUAN.COM
krbtgt/XICHUAN.COM@XICHUAN.COM
kudu/node01@XICHUAN.COM
kudu/node02@XICHUAN.COM
kudu/node03@XICHUAN.COM
mapred/node01@XICHUAN.COM
root/admin@XICHUAN.COM
yarn/node01@XICHUAN.COM
yarn/node02@XICHUAN.COM
yarn/node03@XICHUAN.COM
zookeeper/node01@XICHUAN.COM
zookeeper/node02@XICHUAN.COM
zookeeper/node03@XICHUAN.COM
kadmin:  

5.2.6修改账号密码change_password

change_password root/admin@XICHUAN.COM

[root@node01 ~]# kadmin
Authenticating as principal root/admin@XICHUAN.COM with password.
Password for root/admin@XICHUAN.COM: 
kadmin:  change_password root/admin@XICHUAN.COM
Enter password for principal "root/admin@XICHUAN.COM": root
Re-enter password for principal "root/admin@XICHUAN.COM": root
Password for "root/admin@XICHUAN.COM" changed.
kadmin: 

5.2.7创建用户addprinc

addprinc -pw root xichuan/admin #创建用户名hadoop用户,密码为123456

[root@node01 ~]# kadmin
Authenticating as principal root/admin@XICHUAN.COM with password.
Password for root/admin@XICHUAN.COM: root
kadmin:  addprinc -pw root xichuan/admin   #创建用户名hadoop用户,密码为123456 
WARNING: no policy specified for xichuan/admin@XICHUAN.COM; defaulting to no policy
Principal "xichuan/admin@XICHUAN.COM" created.


创建用户时,不带REALM时,使用默认的REALM

5.2.8删除用户delprinc

delete_principal test/admin

[root@node01 ~]# kadmin
Authenticating as principal root/admin@XICHUAN.COM with password.
Password for root/admin@XICHUAN.COM: root
kadmin:  delete_principal test/admin
Are you sure you want to delete the principal "test/admin@XICHUAN.COM"? (yes/no): yes
Principal "test/admin@XICHUAN.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.
kadmin:

5.2.9导出keytab文件

ktadd -k /opt/xichuan.keytab -norandkey xichuan/admin@XICHUAN.COM

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


-norandkey 表示密码不改变

默认导出的目录为当前目录,在kadmin.local命令上操作

5.2.10查看keytab文件中的用户列表

klist -ket /opt/xichuan.keytab

[root@node02 opt]#  klist -ket /opt/xichuan.keytab 
Keytab name: FILE:/opt/xichuan.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (aes256-cts-hmac-sha1-96) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (aes128-cts-hmac-sha1-96) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (des3-cbc-sha1) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (arcfour-hmac) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (camellia256-cts-cmac) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (camellia128-cts-cmac) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (des-hmac-sha1) 
   1 10/26/2022 15:41:35 xichuan/admin@XICHUAN.COM (des-cbc-md5) 


5.2.11更新票据kinit

kinit -R

[root@node01 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: xichuan/admin@XICHUAN.COM

Valid starting       Expires              Service principal
10/26/2022 15:45:07  10/27/2022 15:45:07  krbtgt/XICHUAN.COM@XICHUAN.COM
	renew until 11/02/2022 15:45:07
[root@node01 ~]# kinit -R
[root@node01 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: xichuan/admin@XICHUAN.COM

Valid starting       Expires              Service principal
10/26/2022 15:45:54  10/27/2022 15:45:54  krbtgt/XICHUAN.COM@XICHUAN.COM
	renew until 11/02/2022 15:45:07


可以看到这两个Ticket的Expires时间不一样

5.2.12查看Ticket详细信息

getprinc xichuan/admin

[root@node01 ~]# kadmin
Authenticating as principal xichuan/admin@XICHUAN.COM with password.
Password for xichuan/admin@XICHUAN.COM: root
kadmin:  getprinc xichuan/admin
Principal: xichuan/admin@XICHUAN.COM
Expiration date: [never]
Last password change: Wed Oct 26 15:24:39 CST 2022
Password expiration date: [never]
Maximum ticket life: 1 day 01:00:00
Maximum renewable life: 8 days 00:00:00
Last modified: Wed Oct 26 15:24:39 CST 2022 (root/admin@XICHUAN.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]
kadmin:

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

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

相关文章

软件工程学术顶会——ESEC/FSE 2022 议题(网络安全方向)清单、摘要与总结

总结 本次会议中网络安全相关议题涵盖区块链、智能合约、符号执行、浏览器API模糊测试等不同研究领域。 热门研究方向: 1. 基于深度学习的漏洞检测与修复 2. 基于AI的自动漏洞修复 3. 模糊测试与漏洞发现 冷门研究方向: 1. 多语言代码的漏洞分析 2. 代码审查中的软件安全 3. 浏…

【类和对象】③友元类

文章目录 1.初始化列表2.static静态成员3.友元 1.初始化列表 我们知道在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然调用构造函数之后,对象中已经有了一个初始值,但是不能将其称为对对象中成…

长胜证券:医药逐步走出疫情扰动 潜心静气迎接曙光

8月回顾:2023年8月医药生物板块跌落4.76%,同期沪深300跌落6.21%,医药板块跑赢沪深300约1.45%,位列31个子职业第11位。本月子板块医疗服务、中药、医药商业、化学制药、医疗器械、生物制品分别跌落1.47%、3.20%、3.97%、5.18%、7.2…

关于ChatGPT:4个维度讲透 ChatGPT 技术原理,揭开 ChatGPT 神秘技术黑盒!(文末送书福利5.0)

文章目录 📋前言🎯Tansformer架构模型🎯ChatGPT原理🎯提示学习与大模型能力的涌现🧩提示学习🧩上下文学习🧩思维链 🎯行业参考建议(关于本书)🧩拥…

Python爬取天气数据并进行分析与预测

随着全球气候的不断变化,对于天气数据的获取、分析和预测显得越来越重要。本文将介绍如何使用Python编写一个简单而强大的天气数据爬虫,并结合相关库实现对历史和当前天气数据进行分析以及未来趋势预测。 1 、数据源选择 选择可靠丰富的公开API或网站作…

QT中闹钟的设置

.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮 #include <QTextEdit> //文本 #include <QLabel> //标签 #include <QLineEdit> //行编辑器#include <QTimerEvent> //定时器事件类头文件 #…

串联系统与并联系统可靠性计算

串联系统 计算串联系统可靠性&#xff0c;就将所有部分的可靠性相乘即可 并联系统 计算并联系统可靠性&#xff0c;就用每个部分的不可靠性相乘&#xff0c;得到系统的不可靠性&#xff0c;再用1-不可靠性&#xff0c;得到并联系统可靠性 串&#xff0c;并联系统 上图的系统可…

深入剖析Kubernetes之控制器模式

文章目录 Kubernetes 项目中一个重要的设计思想&#xff1a;控制器模式。 nginx-deployment 的例子&#xff1a; apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:selector:matchLabels:app: nginxreplicas: 2template:metadata:labels:app: ngin…

做外贸如何引导跟进客户

跟客户聊什么似乎是我们很多小伙伴很头疼的问题&#xff0c;尤其是需要跟客户follow-up 的时候&#xff0c;那种没话找话的感觉有时候都令自己抓狂。 如果我们自己的产品本身比较负责&#xff0c;设计到的工艺或者款式以及规格很多的时候&#xff0c;那可能话题就还容易一些&a…

初级电工电子基础知识部分

欢迎学习初级电工电子基础知识部分 学习可不能像是看小说那样看完就过了&#xff0c;作为电工学的开篇&#xff0c;同时作为电工技术这个特殊作业工种&#xff0c;理解并记住每个知识点是很重要的&#xff0c;因为电工基础里面很多都是理论知识&#xff0c;前面的没掌握好后面的…

算法基础-数学知识-质数、约数

这里写目录标题 质数试除法判定质数晒质数埃及筛线性筛 约数试除法求约数约数个数与约数之和AcWing 870. 约数个数AcWing 871. 约数之和 欧几里德求最大公因数 质数 埃及筛虽然用的不多&#xff0c;大多使用线性筛&#xff0c;但是埃及筛的思想很重要 试除法判定质数 AcWin…

大数据可视化大屏实战项目(4)物流数据云看台(包括动态登陆页面)—HTML+CSS+JS【源码在文末】(可用于比赛项目或者作业参考中)

大数据可视化大屏实战项目&#xff08;4&#xff09;物流数据云看台&#xff08;包括动态登陆页面&#xff09;—HTMLCSSJS【源码在文末】&#xff08;可用于比赛项目或者作业参考中&#x1f415;&#x1f415;&#x1f415;&#xff09; 一&#xff0c;项目概览 ☞☞☞☞☞☞…

软件测试案例 | 某教务管理平台系统的系统测试总结报告

集成测试通过之后&#xff0c;各个模块已经被组装成了一个完整的软件包&#xff0c;这时就需要进行系统测试了。传统的系统测试指的是通过集成测试的软件系统&#xff0c;作为计算机系统的一个重要组成部分&#xff0c;其将与计算机硬件、外部设备、支撑软件等其他系统元素组合…

信息安全性测试的流程

安全测试 一、信息安全性测试的定义 软件安全是一个广泛而复杂的主题&#xff0c;每一个新软件都可能存在安全的缺陷&#xff0c;甚至这个缺陷是前所未见的。信息安全性测试的目的在于通过系统的测试&#xff0c;对所测软件提出安全改进建议&#xff0c;帮助用户将风险控制/转…

图片转Excel表格神器的黑科技探索

哇塞&#xff0c;图片转Excel表格真的太酷了&#xff01;这种技术能让我们的图片信息变得井井有条&#xff0c;方便后续的数据分析和处理。想知道一般我们会用哪些技术来实现这个功能吗&#xff1f;以金鸣识别为例&#xff0c;让我们一起来聊聊吧&#xff01; 首先&#xff0c…

【ES6】Class中this指向

先上代码&#xff1a; 正常运行的代码&#xff1a; class Logger{printName(name kexuexiong){this.print(hello ${name});}print(text){console.log(text);} }const logger new Logger(); logger.printName("kexueixong xiong");输出&#xff1a; 单独调用函数p…

【PDF密码】没有密码,可以解密PDF文件吗?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。想要解密&#xff0c;我们需要输入正确的密码&#xff0c;但是有时候我们可能会出现忘记密码的情况&#xff0c;或者网上下载P…

Ubuntu tmux 默认安装 快捷键

安装 sudo apt install tmux 启动tmux tmux 注意下方已显示[0] 0:bash 左右分屏 依次输入两组快捷键&#xff1a;Ctrlb, Shift5 即:% 上下分屏 依次输入两组快捷键&#xff1a;Ctrlb, Shift 即:" 切换窗口&#xff08;注意&#xff1a;鼠标点击没有切换效果&#x…

如何快速成为一名优秀的python工程师?

随着人工智能的发展与应用&#xff0c;Python编程语言受到世界各界人士的关注&#xff0c;Python工程师也成为一个热门职业&#xff0c;就业薪资高&#xff0c;发展前景广阔。 Python是一门简单的编程语言&#xff0c;学习相对更加轻松容易&#xff0c;初学者很容易入门&#…

基于数据驱动的海表悬浮物浓度插值方法研究 - 以海洋遥感数据为例(多种方法;基于OI)

Data-Driven Interpolation of Sea Surface Suspended Concentrations Derived from Ocean Colour Remote Sensing Data 基于数据驱动的海表悬浮物浓度插值方法研究 - 以海洋遥感数据为例 Abstract 由于复杂的自然和人为相互作用的影响&#xff0c;海洋水柱中的悬浮沉积物动力…