大数据权限认证 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.hqwc.cn/news/504907.html

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

相关文章

C++——模版

前言:哈喽小伙伴们好久不见,这是2024年的第一篇博文,我们将继续C的学习,今天这篇文章,我们来习一下——模版。 目录 一.什么是模版 二.模版分类 1.函数模版 2.类模板 总结 一.什么是模版 说起模版,我们…

深入理解Python中的math和decimal模块:数学基础与高精度计算实战【第104篇—math和decimal模块】

深入理解Python中的math和decimal模块 在Python中,math 和 decimal 模块是处理数学运算的重要工具。math 提供了一系列常见的数学函数,而 decimal 则专注于高精度的浮点数运算。本文将深入探讨这两个模块的基础知识,并通过实际的代码示例演示…

如何利用pynlpir进行中文分词并保留段落信息

一、引言 nlpir是由张华平博士开发的中文自然处理工具,可以对中文文本进行分词、聚类分析等,它既有在线的中文数据大数据语义智能分析平台,也有相关的python包pynlpir,其github的地址是: Pynlpir在Github上的地址 这…

如何用好应用权限,保护隐私数据?银河麒麟桌面操作系统V10 SP1 2303 update2新功能解析

为您介绍银河麒麟桌面操作系统V10 SP1 2303 update2隐私设置和权限管理功能,为您的个人数据安全保驾护航。 说到个人数据隐私,在科技重塑生活本质的数字世界,个人信息遭受持续威胁。2018年,某国际知名社交平台因安全系统漏洞而遭…

小朋友来自多少小区 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 幼儿园组织活动,老师布置了一个任务: 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请…

【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记

《自动驾驶技术概论》学习笔记 致谢:作者:王建、徐国艳、陈竞凯、冯宗宝 本书主要介绍汽车构造和无人驾驶汽车的基本概念,从基础开始,由浅入深地了解无人驾驶的历史由来、国内外自动驾驶产业现状及技术发展、自动驾驶汽车的技术架…

算法------(13)KMP

例题:(1)AcWing 831. KMP字符串 。。其实写完也不太理解。。随便写点吧 KMP就是求next数组和运用next的数组的过程。相比传统匹配模式一次更新一单位距离的慢速方法,next数组可以让下表字符串一次更新n - next【n】个距离&#x…

【研发日记】Matlab/Simulink技能解锁(三)——在Stateflow编辑窗口Debug

文章目录 前言 State断点 Transition断点 条件断点 按State步进 Watch Data Value Sequence Viewer 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑…

MATLAB图像噪声添加与滤波

在 MATLAB 中添加图像噪声和进行滤波通常使用以下函数: 添加噪声:可以使用imnoise函数向图像添加各种类型的噪声,如高斯噪声、椒盐噪声等。 滤波:可以使用各种滤波器对图像进行滤波处理,例如中值滤波、高斯滤波等。 …

基于CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN)在时间序列中的应用 4.2 长短时记忆网络(LSTM)处理序列依赖关系 4.3 注意力机制(Attention) 5…

JVM垃圾回收详解

JVM垃圾回收详解 JavaGuide JDK7版本以及JDK7版本之前,堆内存通常分为下面三部分: 新生代(年轻代)内存老年代永久代 下图中的Eden区、两个S区S0、S1都属于新生代 JDK8版本之后永久代被元空间取代,元空间使用的是直…

洛谷题单_递推与递归

P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) //不满分做法&#xff1a;没有高精度 #include <bits/stdc.h> using namespace std; const int N5006; int dp[N];//dp[i]表示到第i节楼梯有dp[i]中方案 int main(){int n;cin>>n;dp[1]1;dp[0]1;for(i…