大数据权限认证 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.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
 default_realm = HADOOP.COM
 #default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 HADOOP.COM = {
  kdc = bigdata3
  admin_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 = 88
 kdc_tcp_ports = 88

[realms]
  HADOOP.COM = {
  #master_key_type = aes256-cts
  max_renewable_life = 7d 0h 0m 0s
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_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.COM

Valid starting       Expires              Service principal
2024-03-01T18:40:47  2024-03-02T18:40:47  krbtgt/HADOOP.COM@HADOOP.COM
	renew 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.COM

Valid starting       Expires              Service principal
2024-03-01T18:41:16  2024-03-02T18:41:16  krbtgt/HADOOP.COM@HADOOP.COM
	renew 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.COM

Valid starting       Expires              Service principal
2024-03-01T19:05:24  2024-03-02T19:05:24  krbtgt/HADOOP.COM@HADOOP.COM
	renew until 2024-03-08T19:05:24

2、指定有效期

kadmin.local:  addprinc
usage: add_principal [options] principal
	options 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] principal
	options 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_renewable
		allow_proxiable allow_dup_skey allow_tix requires_preauth
		requires_hwauth needchange allow_svr password_changing_service
		ok_as_delegate ok_to_auth_as_delegate no_auth_data_required
		lockdown_keys

where,
	[-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.COM

Valid starting       Expires              Service principal
2024-03-01T19:22:49  2024-03-02T19:22:49  krbtgt/HADOOP.COM@HADOOP.COM
	renew 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 = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
 default_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.mfbz.cn/a/423405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qsort的使用与实现

c语言常见的排序方法大概有这些,今天我们所讲的是就是qsort快排的讲解 头文件 qsort的使用 我们先使用msdn查看他的相关资料,得知这个函数的传参请情况 1.void *base 翻译过来就是将要排序的函数的起始位置/数组首元素地址 2.size_t num 翻译过来就是数…

vue项目获取拼音首字母

工具包 pinyin-pro npm install pinyin-pro 官方地址 pinyin-pro | pinyin-pro性能优异、转换准确的 js 中文转拼音工具https://pinyin-pro.cn/示例代码(获取每个汉字的拼音首字母) import {pinyin} from pinyin-pro;function getPinyinInitial(name){if (name) {let py p…

redis实战笔记汇总

文章目录 1 NoSQL入门概述1.1 能干嘛?1.2 传统RDBMS VS NOSQL1.3 NoSQL数据库的四大分类1.4 分布式数据库CAP原理 BASE原则1.5 分布式集群简介1.6 淘宝商品信息的存储方案 2 Redis入门概述2.1 是什么?2.2 能干嘛?2.3 怎么玩?核心…

高性能MySQL 第4版

第一章MySQL架构 MySQL提供了多种锁的颗粒度,每种MySQL存储引擎都可以实现自己的锁策略和锁力度。 行级锁是在存储引擎而不是在服务器中实现的。 隔离界别 READ UNCOMMITTED - 脏读 在事务中可以可以查看到其他事务中还没有提交的修改。实际中很少用。 READ C…

运筹学_1.1.4 线性规划问题-解的概念

1.1.4 线性规划问题-解的概念 一、可行解与最优解二、基的概念三、基变量、基向量;非基变量、非基向量;基解、基可行解;四、最优解与可行解、基可行解的关系五、用例题(枚举法)巩固基解、基可行解、最优解三个概念1、例…

鸿蒙Harmony应用开发—ArkTS声明式开发(点击事件)

组件被点击时触发的事件。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 onClick onClick(event: (event: ClickEvent) > void) 点击动作触发该回调。 卡片能力: 从API version 9开始…

【python】`assert`断言语句

assert是一个断言语句,用于在代码中检查某个条件是否为真。 如果条件为假,将触发AssertionError 异常,从而指示存在错误。

【博图TIA-Api】通过Excel自动新建文件夹和导入FB块

【博图TIA-Api】通过Excel自动新建文件夹和导入FB块 说明思路准备获取Excel表格内文件名和FB块名等信息新建文件夹部分筛分获取的文件夹数据,去掉重复内容创建文件夹 导入FB块导出FB块的xml文件查找需要放置的文件夹导入块 说明 续上一篇文章,这次是根据…

C++ //练习 10.19 用stable_partition重写前一题的程序,与stable_sort类似,在划分后的序列中维持原有元素的顺序。

C Primer(第5版) 练习 10.19 练习 10.19 用stable_partition重写前一题的程序,与stable_sort类似,在划分后的序列中维持原有元素的顺序。 环境:Linux Ubuntu(云服务器) 工具:vim …

【buuctf-gakki】

binwalk 查看图片,发现有 rar 文件,提取后如上图所示(flag.txt为已经解压后出来的)其中这个 rar 需要用 archpr爆破一下 打开后一个 flag.txt 一堆杂乱无章的字符,需要用到 python 脚本进行词频统计,我们…

专家教你学汽车美容护理,汽车美容师职业技能教学

一、教程描述 本套汽车美容教程,大小2.52G,61个文件。 二、教程目录 01-大家跟我学汽车美容(共30课时) 02-汽车内外饰物的安装(共15课时) 03-汽车必需设施的安装(共13课时) 04…

测开新手:pytest+requests+allure自动化测试接入Jenkins学习

最近在这整理知识,发现在pytest的知识文档缺少系统性,这里整理一下,方便后续回忆。 在python中,大家比较熟悉的两个框架是unittest和pytest: Unittest是Python标准库中自带的单元测试框架,Unittest有时候…

图论 - Trie树(字符串统计、最大异或对)

文章目录 前言Part 1:Trie字符串统计1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2:最大异或对1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍Trie树的常见应用,包括:Trie…

实验室记账项目(java+Mysql+jdbc)

前言: 因为自己学习能力有限和特殊情况必须要找一个项目来做,但是上网搜的那些项目有两种(一种是技术太多,自己能力不够;一种是技术太少,项目太简单)导致都不适合本人,本人现有技术只…

店务管理系统:都有哪些功能,是否是高效管理店面的神器

hello,我是贝格前端工场,直接给大家介绍了各类通用的B端管理系统,受到了大家的欢迎。本次开始介绍针对具体行业的管理系统该如何设计和开发,这次分享——店务管理系统,欢迎大家持续关注、点赞,如有系统定制…

使用python实现一个SCP小工具

源码地址: ssh_scp 工具截图: 一个简易的scp文件上传下载小工具,用来上传或下载一些小文件。 目前只适用于windows, 使用方法: 前提: 工具同级目录,创建一个ssh_commands.json文件。用来存储配…

网络攻防之CVE-2020-15778漏洞的复现及修复详细过程

目录 漏洞描述 实验环境 漏洞复现 漏洞修复 漏洞扩展 漏洞描述 (1)漏洞编号:CVE-2020-15778 (2)CVE官网对该漏洞的解释 (3)漏洞简介:2020年6月9日,研究人员Chinmay Pandya在Openssh中发现了一个漏洞,于7月18日公开。OpenSSH的8.3p1中的scp允许在scp.c远程功能中注入命…

Sqli-labs靶场第14关详解[Sqli-labs-less-14]

Sqli-labs-Less-14 #手工注入 post传参了 根据题目看,像一个登录页面,尝试使用布尔型盲注测试能否登录网站 1. Username输入a" 测试是否会有报错,burp抓包 报错:syntax to use near "a"" and password&q…

【Java文件报错】Cannot resolve symbol ‘println‘ 【及解决】

一、问题描述 在Java源代码文件中,使用 System.out.println() 语句进行输出,编译器提示“Cannot resolve symbol ‘println’(无法解释关键字)”, println飘红。报错代码及报错截图如下所示。 import java.io.*;public class St…

【Java】面向对象之多态超级详解!!

文章目录 前言一、多态1.1 多态的概念1.2 多态的实现条件1.3 重写1.3.1方法重写的规则1.3.2重写和重载的区别 1.4 向上转型和向下转型1.4.1向上转型1.4.2向下转型 1.5 多态的优缺点1.5.1 使用多态的好处1.5.2 使用多态的缺陷 结语 前言 为了深入了解JAVA的面向对象的特性&…