Kerberos安装

1 KDC安装配置

1.1 获取kdc安装包

安装kdc的节点需要获取krb5-server、krb5-libs、krb5-workstation这三个安装包,通过yum源获取。

yum install krb5-server krb5-libs krb5-workstation -y   

1.2 修改kerberos kdc kdc.conf配置文件

1.[root@dap81 ~]# vim /var/kerberos/krb5kdc/kdc.conf
2.[kdcdefaults]  
3.kdc_ports = 88  
4.kdc_tcp_ports = 88   
5.[realms]  
6.DEV.EXAMPLE.COM = {  
7.#master_key_type = aes256-cts  
8.acl_file = /var/kerberos/krb5kdc/kadm5.acl  
9.dict_file = /usr/share/dict/words  
10.admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab  
11.upported_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  
12.}  

kdc_ports kdc监听的udp端口。
kdc_tcp_ports kdc监听的tcp端口。
acl_file 管理服务用于进行访问控制的文件位置。
dict_file 指定不允许用作密码的单词文件,这些秘密是容易被破解的。
supported_enctypes 列出了kdc支持的所有加密类型。
max_renewable_life 指定票据更新的最长时间。客户端请求一个不超过该长度的时间,默认是7天。

1.3 修改kerberos krb5.conf配置文件

1. [root@dap81 ~]# vim /etc/krb5.conf
2. # Configuration snippets may be placed in this directory as well  
3. includedir /etc/krb5.conf.d/   
4. [logging]  
5.  default = FILE:/var/log/krb5libs.log  
6.  kdc = FILE:/var/log/krb5kdc.log  
7.  admin_server = FILE:/var/log/kadmind.log  
8. [libdefaults]  
9.  dns_lookup_realm = false  
10.  ticket_lifetime = 24h  
11.  renew_lifetime = 7d  
12.  forwardable = true  
13.  rdns = false  
14.  pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt  
15.  default_realm = DEV.EXAMPLE.COM  
16.  default_ccache_name = KEYRING:persistent:%{uid}   
17. [realms]  
18.  DEV.EXAMPLE.COM = {  
19.         kdc = 172.16.161.81  
20.         admin_server = 172.16.161.81  
21.  }  
22. # EXAMPLE.COM = {  
23. #  kdc = kerberos.example.com  
24. #  admin_server = kerberos.example.com  
25. # }  
26. [domain_realm]  
27. # .example.com = EXAMPLE.COM  
28. # example.com = EXAMPLE.COM  

Libdefaults:
dns_lookup_realm 可以使用dns指定使用哪个kerberos域。
ticket_lifetime 设置票据持续有效时间,可以是kdc指定的最大值以内的任意时间长度。默认24小时。
renew_lifetime 设置票据最长可以被延期的时限,一般为7天。票据可以在不进行客户端认证的情况下,由kdc进行更新。必须在票据过期前进行。
Forwardable 指定票据是否可以转发。如果一个用户已经拥有一个TGT,但登录到其他远程系统,那么kdc可以无需重新认证的情况下向其重新分发一个TGT。
default_realm  默认情况下使用的域。

1.4 初始化kerberos database

1. [root@dap81 ~]# kdb5_util create -s -r DEV.EXAMPLE.COM  
2. Loading random data  
3. Initializing database '/var/kerberos/krb5kdc/principal' for realm 'DEV.EXAMPLE.COM',  
4. master key name 'K/M@DEV.EXAMPLE.COM'  
5. You will be prompted for the database Master Password.  
6. It is important that you NOT FORGET this password.  
7. Enter KDC database master key:   
8. Re-enter KDC database master key to verify:   
9. [root@dap81 ~]#   

创建数据库,并设置数据库访问密码。其中,[-s]表示生成stash file,并存储在master server key(krb5kdc),还可以使用 [-r]来指定一个realm name,当krb5.conf配置了多个realm时才是必要的。

1.5 修改database administrator 的ACL权限

1. [root@dap81 ~]# vim /var/kerberos/krb5kdc/kadm5.acl  
2. */admin@DEV.EXAMPLE.COM *  

管理kdc的资料,有两种方式。一种是直接在kdc本机上执行,不需要密码。另一种是需要输入账号密码才能管理。
kadmin.local 无需账号密码即可管理kdc资料,需要在kdc服务所在的机器上操作。
Kadmin 需要账号密码才能管理kdc资料,可以在任意一台kdc领域的系统上操作。

1.6 启动kerberos daemons

1. [root@dap81 ~]# systemctl start kadmin krb5kdc  
2. [root@dap81 ~]# systemctl enable kadmin krb5kdc  
3. Created symlink from /etc/systemd/system/multi-user.target.wants/kadmin.service to /usr/lib/systemd/system/kadmin.service.  
4. Created symlink from /etc/systemd/system/multi-user.target.wants/krb5kdc.service to /usr/lib/systemd/system/krb5kdc.service.  
5. [root@dap81 ~]# systemctl status kadmin krb5kdc  
6. ● kadmin.service - Kerberos 5 Password-changing and Administration  
7.    Loaded: loaded (/usr/lib/systemd/system/kadmin.service; enabled; vendor preset: disabled)  
8.    Active: active (running) since 三 2020-05-20 10:11:38 CST; 23s ago  
9.  Main PID: 29252 (kadmind)  
10.    CGroup: /system.slice/kadmin.service  
11.            └─29252 /usr/sbin/kadmind -P /var/run/kadmind.pid  
12. 520 10:11:37 dap81 systemd[1]: Starting Kerberos 5 Password-changing and Administration...  
13. 520 10:11:38 dap81 systemd[1]: Started Kerberos 5 Password-changing and Administration.   
14. ● krb5kdc.service - Kerberos 5 KDC  
15.    Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; enabled; vendor preset: disabled)  
16.    Active: active (running) since 三 2020-05-20 10:11:38 CST; 24s ago  
17.  Main PID: 29251 (krb5kdc)  
18.    CGroup: /system.slice/krb5kdc.service  
19.            └─29251 /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid   
20. 520 10:11:37 dap81 systemd[1]: Starting Kerberos 5 KDC...  
21. 520 10:11:38 dap81 systemd[1]: Started Kerberos 5 KDC.  
22. [root@dap81 ~]#   

2 Client安装配置

2.1 获取kerberos client 安装包

安装kerberos client的节点,需要获取krb5-libs、krb5-workstation这两个安装包,通过yum源获取。

yum install krb5-libs krb5-workstation -y   

2.2 修改kerberos krb5.conf配置文件

1. [root@dap82 ~]# vim /etc/krb5.conf
2. # Configuration snippets may be placed in this directory as well  
3. includedir /etc/krb5.conf.d/  
4.   
5. [logging]  
6.  default = FILE:/var/log/krb5libs.log  
7.  kdc = FILE:/var/log/krb5kdc.log  
8.  admin_server = FILE:/var/log/kadmind.log  
9.   
10. [libdefaults]  
11.  dns_lookup_realm = false  
12.  ticket_lifetime = 24h  
13.  renew_lifetime = 7d  
14.  forwardable = true  
15.  rdns = false  
16.  pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt  
17.  default_realm = DEV.EXAMPLE.COM  
18.  default_ccache_name = KEYRING:persistent:%{uid}  
19.   
20. [realms]  
21.  DEV.EXAMPLE.COM = {  
22.         kdc = 172.16.161.81  
23.         admin_server = 172.16.161.81  
24.  }  
25. # EXAMPLE.COM = {  
26. #  kdc = kerberos.example.com  
27. #  admin_server = kerberos.example.com  
28. # }  
29.   
30. [domain_realm]  
31. # .example.com = EXAMPLE.COM  
32. # example.com = EXAMPLE.COM 

请参考: 1.3 修改kerberos krb5.conf配置文件 ,本测配置默认与kdc服务所在节点的krb5.conf文件保持一致。Kerberos 跨域互信认证除外。

3 Kerberos 常用命令

3.1 Kadmin相关操作

使用kadmin.local命令行工具,在kdc所在的节点执行以下操作。

3.1.1 添加Admin管理员用户

1. [root@dap81 ~]# kadmin.local   
2. Authenticating as principal root/admin@DEV.EXAMPLE.COM with password.  
3. kadmin.local:  addprinc root/admin  
4. WARNING: no policy specified for root/admin@DEV.EXAMPLE.COM; defaulting to no policy  
5. Enter password for principal "root/admin@DEV.EXAMPLE.COM":   
6. Re-enter password for principal "root/admin@DEV.EXAMPLE.COM":   
7. Principal "root/admin@DEV.EXAMPLE.COM" created.  
8. kadmin.local:   

使用addprinc root/admin 添加一个root/admin的用户,并设置密码。参考:1.5修改database administrator 的ACL权限,匹配该配置项的用户,将有管理员权限。

3.1.2 添加用户

3.1.2.1 指定用户密码
1. kadmin.local:  addprinc dap81  
2. WARNING: no policy specified for dap81@DEV.EXAMPLE.COM; defaulting to no policy  
3. Enter password for principal "dap81@DEV.EXAMPLE.COM":   
4. Re-enter password for principal "dap81@DEV.EXAMPLE.COM":   
5. Principal "dap81@DEV.EXAMPLE.COM" created.  
6. kadmin.local:  

使用addprinc dap81  添加一个dap81的用户,并设置密码。

3.1.2.2 随机生成用户密码
1. kadmin.local:  addprinc -randkey dap81/dev  
2. WARNING: no policy specified for servicename/hostname@realnameDEV.EXAMPLE.COM; defaulting to no policy  
3. Principal "dap81/dev@DEV.EXAMPLE.COM" created.  
4. kadmin.local:  

使用addprinc -randkey dap81/dev 添加一个dap81/dev的用户,随机生成密码。

3.1.3 获取用户列表

1. kadmin.local:  list_principals  
2. K/M@DEV.EXAMPLE.COM  
3. dap81/dev@DEV.EXAMPLE.COM  
4. dap81@DEV.EXAMPLE.COM  
5. kadmin/admin@DEV.EXAMPLE.COM  
6. kadmin/changepw@DEV.EXAMPLE.COM  
7. kadmin/dap81@DEV.EXAMPLE.COM  
8. kiprop/dap81@DEV.EXAMPLE.COM  
9. krbtgt/DEV.EXAMPLE.COM@DEV.EXAMPLE.COM  
10. root/admin@DEV.EXAMPLE.COM  
11. kadmin.local:  

使用list_principals命令获取用户列表信息。

3.1.4 生成用户keytab文件

[root@dap81 ~]# mkdir -p /etc/krb5  

创建一个用于存放keytab文件的文件夹,生成keytab文件时需要指定该目录,如果指定的是一个不存在的目录,生成keytab文件将会报错。

3.1.4.1 生成keytab文件并随机生成用户密码
1. kadmin.local:  ktadd -k /etc/krb5/dap81Dev.keytab dap81/dev@DEV.EXAMPLE.COM  
2. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
3. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
4. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
5. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
6. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
7. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
8. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
9. Entry for principal dap81/dev@DEV.EXAMPLE.COM with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5/dap81Dev.keytab.  
10. kadmin.local:   

使用ktadd -k /etc/krb5/dap81Dev.keytab dap81/dev@DEV.EXAMPLE.COM 为dap81/dev@DEV.EXAMPLE.COM用户生成keytab文件,并放置在/etc/krb5目录下。生成keytab文件默认也会随机生成用户的密码。

3.1.4.2 生成keytab文件不随机生成用户密码
1. kadmin.local:  ktadd -k /etc/krb5/dap81.keytab -norandkey dap81@DEV.EXAMPLE.COM  
2. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5/dap81.keytab.  
3. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5/dap81.keytab.  
4. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5/dap81.keytab.  
5. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5/dap81.keytab.  
6. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/krb5/dap81.keytab.  
7. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/krb5/dap81.keytab.  
8. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5/dap81.keytab.  
9. Entry for principal dap81@DEV.EXAMPLE.COM with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5/dap81.keytab.  
10. kadmin.local:   

使用ktadd -k /etc/krb5/dap81.keytab -norandkey dap81@DEV.EXAMPLE.COM为dap81@DEV.EXAMPLE.COM用户生成keytab文件,通过-norandkey指定生成keytab文件时不重新生成用户密码,并将keytab文件放在/etc/krb5目录下。

3.2 Client相关操作

3.2.1 Kinit生成票据

客户端使用kinit命令生成票据,常用的方式有两种。一种是使用账号密码进行kinit,生成票据,另一种是使用keytab文件+账号生成票据,keytab文件中包含了该账户的密码。

3.2.1.1 Kinit+账户密码认证
1. [root@dap81 ~]# kinit dap81@DEV.EXAMPLE.COM  
2. Password for dap81@DEV.EXAMPLE.COM:   
3. [root@dap81 ~]# klist   
4. Ticket cache: KEYRING:persistent:0:0  
5. Default principal: dap81@DEV.EXAMPLE.COM  
6.   
7. Valid starting       Expires              Service principal  
8. 2020-05-20T13:54:45  2020-05-21T13:54:45  krbtgt/DEV.EXAMPLE.COM@DEV.EXAMPLE.COM  
9. [root@dap81 ~]#   

使用kinit dap81@DEV.EXAMPLE.COM 对dap81@DEV.EXAMPLE.COM账号进行认证,认证过程中需要录入该账户的密码。

3.2.1.2 Kinit+keytab+账户认证
1. [root@dap82 ~]# kinit -k -t /etc/krb5/dap81Dev.keytab dap81/dev  
2. [root@dap82 ~]# klist   
3. Ticket cache: KEYRING:persistent:0:0  
4. Default principal: dap81/dev@DEV.EXAMPLE.COM  
5.   
6. Valid starting       Expires              Service principal  
7. 2020-05-20T14:03:46  2020-05-21T14:03:46  krbtgt/DEV.EXAMPLE.COM@DEV.EXAMPLE.COM  
8. [root@dap82 ~]#  

使用kinit -k -t /etc/krb5/dap81Dev.keytab dap81/dev对dap81/dev@DEV.EXAMPLE.COM账户进行认证。认证过程中使用了该账户的keytab文件。

3.2.2 Klist查看票据认证信息

1. [root@dap81 ~]# klist   
2. Ticket cache: KEYRING:persistent:0:0  
3. Default principal: dap81@DEV.EXAMPLE.COM  
4.   
5. Valid starting       Expires              Service principal  
6. 2020-05-20T13:54:45  2020-05-21T13:54:45  krbtgt/DEV.EXAMPLE.COM@DEV.EXAMPLE.COM  
7. [root@dap81 ~]#   

使用klist命令获取票据认证信息:
Default principal 当前票据的用户主体
Valid starting 票据认证成功时间
Expires  票据到期时间

3.2.3 Kdestroy删除当前认证的缓存

1. [root@dap82 ~]# kdestroy  
2. [root@dap82 ~]# klist   
3. klist: Credentials cache keyring 'persistent:0:0' not found  
4. [root@dap82 ~]#   

使用kdestroy删除当前认证通过的缓存信息.

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

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

相关文章

LeetCode —— 137. 只出现一次的数字 II

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

第17次修改了可删除可持久保存的前端html备忘录:增加年月日星期,增加倒计时,更改保存区名称可以多个备忘录保存不一样的信息,匹配背景主题:现代深色

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码&#xff1a; <!DOCTYPE html> <html lang&quo…

“死“社群先不要扔,想办法激活一下,隔壁的运营都馋哭了

私域运营已成为当下很多企业寻求增长的标配。在这过程中&#xff0c;社群运营就是极为重要的一个环节。过去我们为了流量&#xff0c;疯狂建群拉人。但建社群容易活跃难&#xff0c;活跃一段时间后&#xff0c;社群会越来越安静。 不仅如此&#xff0c;群主和管理员也渐渐疏于…

c++ 字符串切分split

c 字符串切分split 的举例实现 一共给出了四种方式 1、 strtok 2、 stringstream 3、 字符串查找 4、 基于封装的方式&#xff0c;提供了 c11 foreach 接口 代码 vector<string> split(string s) {vector<string> res;const char *p strtok((char *) s.c_str(),…

hbuilderx uniapp运行到真机控制台显示手机端调试基座版本号1.0.0,调用uni.share提示打包时未添加share模块

记录一个困扰了几天的一个蠢问题&#xff0c;发现真相的我又气又笑。 由于刚开始接触uniapp 移动端开发&#xff0c;有个需求需要使用uni.share API&#xff0c;但是我运行项目老提示打包时没配置share模块 我确实没在manifest内配置。网上搜了一些资料&#xff0c;但是我看官…

在Excel把两个单元格的内容,合并后显示在第三个单元格

在Excel中&#xff0c;将两个单元格的内容合并显示到第三个单元格有几种方法&#xff1a; 1. 使用 CONCATENATE 函数&#xff08;在较早版本的 Excel 中&#xff09;&#xff1a; 在目标单元格&#xff08;例如 C1&#xff09;中输入以下公式&#xff1a; CONCATENATE(A…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制&#xff0c;可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

EDR、SIEM、SOAR 和 XDR 的区别

在一个名为网络安全谷的神秘小镇&#xff0c;居住着四位守护者&#xff0c;他们分别是EDR&#xff08;艾迪&#xff09;、SIEM&#xff08;西姆&#xff09;、SOAR&#xff08;索亚&#xff09;和XDR&#xff08;艾克斯&#xff09;。他们各自拥有独特的能力&#xff0c;共同守…

TypeScript 基础概念,安装使用

怎么使用TypeScript&#xff1f; 本地环境搭建&#xff08;使用vscode&#xff09; 1、初始化项目&#xff0c;新建package.json 创建项目文件夹 mkdir test使用npm初始化项目 npm init 2、安装typescript npm install typescript -D 3、将typescript编译成JavaScript npx tsc…

力扣hot100 电话号码的字母组合 回溯

Problem: 17. 电话号码的字母组合 文章目录 思路复杂度&#x1f49d; Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: O ( 3 8 ) O(3^8) O(38) 空间复杂度: O ( 3 8 ) O(3^8) O(38) &#x1f49d; Code class Solution {String[] map { "…

Redis 实际项目中的整合,记录各种用法

Redis缓存餐厅数据 我们来看主要的流程 很简单,就是在数据库和接口之间加了一层缓冲,在redis之前其实还可以加其他的缓存 例如 nginx的缓存 接下来,就是结合我的业务,来做缓存 我这里的业务逻辑是,按了分类的按钮,分别以不同的 分类为一组缓存数据 所以,这里的缓存粒度是分类…

leetcode-存在重复元素 II

219. 存在重复元素 II 题解&#xff1a; 可以使用哈希表来解决这个问题。遍历数组&#xff0c;对于每个元素&#xff0c;检查它是否已经在哈希表中出现过&#xff0c;如果出现过&#xff0c;则判断当前索引与哈希表中存储的索引之差是否小于等于k&#xff0c;如果是&#xff…

【JS逆向实战-入门篇】某gov网站加密参数分析与Python算法还原

文章目录 1. 写在前面2. 请求分析3. 断点分析4. 算法还原 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

java中Ajax与Axios的使用

1&#xff0c;Ajax 1.1 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML。 我们先来说概念中的 JavaScript 和 XML&#xff0c;JavaScript 表明该技术和前端相关&#xff1b;XML 是指以此进行数据交换。而这两个我们之前都学习过。 1.1.…

python-- 函数

在python中的函数&#xff1a; """1、python中的函数就类似于java中的方法&#xff1b;2、函数的语法的规则&#xff1a;def 函数的名称(参数1&#xff0c;参数2)&#xff1a;执行的逻辑return 结果值在定义函数的时候&#xff0c;参数的类型是可以不用指定的。…

element ui组件 el-input只能数据整数,且设置不能小于0大于10

<el-input v-model"form.plan" type"number" step"0.5" min"0" max"10" keyup.native"proving($event)" input"editInput($event,plan)" placeholder"最高5分" oninput"if(value…

iOS开发Xcode中的ld64和-ld_classic是什么意思

在iOS应用程序开发中&#xff0c;Xcode是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;而链接器是构建应用程序的关键组成部分之一。在Xcode中&#xff0c;我们常常会遇到两个重要的概念&#xff1a;ld64和-ld_classic。它们分别代表了默认链接器和经典链…

前端大屏展示可视化——地图的绘制(持续更新)

一、ECharts 1、安装 npm install echarts2、引入 import * as echarts from echarts;3、渲染 3.1、前期准备&#xff0c;基础配置 // 地图实例 const myChart ref(null); // 地图配置 const option reactive({tooltip: {trigger: item,formatter: function (params) {re…

电脑风扇控制温度软件 Macs Fan Control Pro 中文

Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件&#xff0c;旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度&#xff0c;自动或手动调整风扇的转速&#xff0c;以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…

wps隔行填充效果斑马线

1、首先要打开WPS Office软件。 2、用“所有线框”工具绘制一个表格。 3、点击颜料桶&#xff0c;选中颜色&#xff0c;在第二排填充。4、用鼠标选中前两排表格。 5、把鼠标放到单元格右下角的节点上&#xff0c;待“”出来&#xff0c;用鼠标向下拖动到最后一列表格。 6、表格…