开源入侵防御系统——CrowdSec

1、简介

CrowdSec 是一款现代化、开源、基于行为的入侵防御系统(IDS/IPS),专为保护服务器、服务、容器、云原生应用而设计。它通过分析日志检测可疑行为,并可基于社区协作共享恶意 IP 黑名单,从而实现分布式防御。

其理念源于 Fail2Ban,但 CrowdSec 更现代、更可扩展,具备强大的可视化和自动化能力。

项目地址:https://github.com/crowdsecurity/crowdsec 

2、主要特点

特性描述
开源免费完全开源,MIT 许可,无强制商业组件
模块化架构解耦式架构,支持插件化扩展(例如不同的日志源、解析器、响应器)
日志行为分析基于日志行为检测异常,如 SSH 暴力破解、Web 攻击等
社区威胁共享通过 CrowdSec 社区共享恶意 IP 列表(CTI:Cyber Threat Intelligence)
多平台支持支持 Linux、BSD、Docker、Kubernetes 等环境
多语言通知与响应支持自动封禁、邮件、Slack、Webhook、Cloudflare 等响应方式
可视化 Dashboard基于 Metabase 的 Web UI,提供可视化分析

3、应用场景

  • 企业级服务器 SSH 暴力破解防护。

  • Web 应用防御(包括 Nginx、Apache、HAProxy 日志)。

  • Kubernetes 集群安全审计与防护。

  • 公有云/私有云中的入侵检测与响应。

  • 与防火墙、WAF 联动实现动态封禁。

  • DevOps 安全加固及日志威胁可视化。

4、主要组件

图片

  • CrowdSec 代理(Agent):分析 Nginx 和系统日志,检测可疑行为。

  • 本地 API(LAPI):连接代理与防护组件。

  • 防护组件(Bouncer):阻止恶意流量,支持 Nginx、防火墙等多种方式。

  • 命令行工具(cscli):管理配置和决策。

5、工具对比

以下是 CrowdSec 与 Fail2Ban 和 Suricata 在保护 Nginx 部署的 Cilikube 项目时的对比:

特性/工具CrowdSecFail2BanSuricata
开源性开源开源开源
威胁情报社区共享,实时更新恶意 IP本地规则,无共享依赖规则集,免费规则延迟 30 天
Web 防护原生支持 Nginx,防护 SQL 注入、XSS 等需手动配置正则规则依赖流量分析,需额外配置
检测方式日志分析,适合 Nginx日志正则匹配网络流量分析
防护方式Nginx 集成、防火墙等多层次仅防火墙规则依赖防火墙或专用设备
易用性CLI 和 Web 仪表盘,易于配置配置简单,无 Web 界面配置复杂,需专业知识
性能影响轻量,适合 Ubuntu轻量流量分析,资源占用高
Fail2Ban 的差异
  • Web 防护:CrowdSec 提供原生 Nginx 防护组件,可直接处理 HTTP 攻击(如针对 Cilikube 的路径遍历);Fail2Ban 需手动编写正则规则,配置还是比较复杂。

  • 威胁情报:CrowdSec 的社区共享机制能快速识别全球攻击者,Fail2Ban 仅依赖本地日志。

  • 扩展性:CrowdSec 的 Hub 提供丰富的 Web 攻击场景,Fail2Ban 扩展性有限。

Suricata 的差异
  • 资源占用:CrowdSec 基于日志分析,适合资源有限的 Ubuntu 服务器;Suricata 需分析网络流量,消耗较高。

  • Nginx 集成:CrowdSec 提供开箱即用的防护组件,Suricata 需复杂配置。

  • 实时性:CrowdSec 实时共享威胁情报,Suricata 免费规则延迟 30 天。

6、安装部署(centos7)

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh | bash
yum  update  -y
yum install crowdsec -y ###安装完成后服务会自启动
systemctl status crowdsec

7、查看防护状态

列出已安装的防护场景
####默认会安装ssh防爆破规则cscli collections list
────────────────────────────────────────────────────────────────────────────────COLLECTIONS                                                                    
────────────────────────────────────────────────────────────────────────────────Name                📦 Status     Version  Local Path                          
────────────────────────────────────────────────────────────────────────────────crowdsecurity/sshd  ✔️  enabled  0.7      /etc/crowdsec/collections/sshd.yaml 
────────────────────────────────────────────────────────────────────────────────cscli scenarios list
────────────────────────────────────────────────────────────────────────────────────────────────────────SCENARIOS                                                                                              
────────────────────────────────────────────────────────────────────────────────────────────────────────Name                             📦 Status     Version  Local Path                                     
────────────────────────────────────────────────────────────────────────────────────────────────────────crowdsecurity/ssh-bf             ✔️  enabled  0.3      /etc/crowdsec/scenarios/ssh-bf.yaml            crowdsecurity/ssh-cve-2024-6387  ✔️  enabled  0.2      /etc/crowdsec/scenarios/ssh-cve-2024-6387.yaml crowdsecurity/ssh-generic-test   ✔️  enabled  0.2      /etc/crowdsec/scenarios/ssh-generic-test.yaml  crowdsecurity/ssh-refused-conn   ✔️  enabled  0.1      /etc/crowdsec/scenarios/ssh-refused-conn.yaml  crowdsecurity/ssh-slow-bf        ✔️  enabled  0.4      /etc/crowdsec/scenarios/ssh-slow-bf.yaml       
────────────────────────────────────────────────────────────────────────────────────────────────────────###查看封禁ip
cscli decisions list
 

8、测试ssh防爆破封禁

采集原理:ssh爆破日志-----/var/log/secure----syslog去采集-----ssh-bf.yaml去正则匹配日志分析、符合条件触发---alerts报警-----封禁

1)、采集日志是否安装

cscli parsers list
───────────────────────────────────────────────────────────────────────────────────────────────────PARSERS                                                                                           
───────────────────────────────────────────────────────────────────────────────────────────────────Name                      📦 Status     Version  Local Path                                       
───────────────────────────────────────────────────────────────────────────────────────────────────crowdsecurity/sshd-logs   ✔️  enabled  3.0      /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml   crowdsecurity/whitelists  ✔️  enabled  0.3      /etc/crowdsec/parsers/s02-enrich/whitelists.yaml 
───────────────────────────────────────────────────────────────────────────────────────────────────

安装syslog

root@test:~# cscli parsers install crowdsecurity/syslog-logs
Action plan:
✅ enableparsers: crowdsecurity/syslog-logsenabling parsers:crowdsecurity/syslog-logsRun 'sudo systemctl reload crowdsec' for the new configuration to be effective.
root@test:~# systemctl restart crowdsec
root@test:~# cscli parsers list
────────────────────────────────────────────────────────────────────────────────────────────────────PARSERS                                                                                            
────────────────────────────────────────────────────────────────────────────────────────────────────Name                       📦 Status     Version  Local Path                                       
────────────────────────────────────────────────────────────────────────────────────────────────────crowdsecurity/sshd-logs    ✔️  enabled  3.0      /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml   crowdsecurity/syslog-logs  ✔️  enabled  0.8      /etc/crowdsec/parsers/s00-raw/syslog-logs.yaml   crowdsecurity/whitelists   ✔️  enabled  0.3      /etc/crowdsec/parsers/s02-enrich/whitelists.yaml 
────────────────────────────────────────────────────────────────────────────────────────────────────###安装防火墙方式拦截
yum install -y crowdsec-firewall-bouncer-iptables

2)、采集配置,默认已经配置好了,不用修改

root@test:/etc/crowdsec# cat acquis.yaml 
#Generated acquisition file - wizard.sh (service: sshd) / files : /var/log/secure
filenames:- /var/log/secure
labels:type: syslog
---
#Generated acquisition file - wizard.sh (service: linux) / files : /var/log/messages
filenames:- /var/log/messages
labels:type: syslog
---

3)、修改日志格式,系统产生的格式一定要符合CrowdSec采集规则、否则无法命中

####主要是为了让/var/log/secure里面记录的规则符合CrowdSec采集的匹配vim /etc/rsyslog.conf ###注释这一行
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat加入这三行
$LocalHostName localhost
$template MyTraditionalFormat,"%timegenerated% %hostname% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate  MyTraditionalFormatsystemctl restart rsyslog#####默认白名单规则里面加入了私网,为了测试注销掉和内网相同的网段vim /etc/crowdsec/parsers/s02-enrich/whitelists.yaml name: crowdsecurity/whitelists
description: "Whitelist events from private ipv4 addresses"
whitelist:reason: "private ipv4/ipv6 ip/ranges"ip:- "::1"cidr:
#    - "127.0.0.0/8"
#    - "192.168.0.0/16"- "10.0.0.0/8"- "172.16.0.0/12"# expression:#   - "'foo.com' in evt.Meta.source_ip.reverse" systemctl restart crowdsec

4)、测试

####原始状态,主要看Lines parsed现在是0,就代表没有读到任何日志匹配项
root@test:/etc/crowdsec# cscli metrics
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Acquisition Metrics                                                                                                   │
├────────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────┬───────────────────┤
│ Source                 │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │ Lines whitelisted │
├────────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┼───────────────────┤
│ file:/var/log/messages │ 21         │ -            │ 21             │ -                      │ -                 │
│ file:/var/log/secure   │ 2          │ -            │ 2              │ -                      │ -                 │
╰────────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────┴───────────────────╯
╭─────────────────────────────────────────────╮
│ Local API Decisions                         │
├────────────────┬────────┬────────┬───────┤
│ Reason         │ Origin │ Action │ Count │
├────────────────┼────────┼────────┼───────┤
│ generic:scan   │ CAPI   │ ban    │ 3499  │
│ ssh:bruteforce │ CAPI   │ ban    │ 10266 │
│ ssh:exploit    │ CAPI   │ ban    │ 1230  │
╰────────────────┴────────┴────────┴───────╯
╭──────────────────────────────────────╮
│ Local API Metrics                    │
├────────────────────┬────────┬──────┤
│ Route              │ Method │ Hits │
├────────────────────┼────────┼──────┤
│ /v1/heartbeat      │ GET    │ 25   │
│ /v1/usage-metrics  │ POST   │ 1    │
│ /v1/watchers/login │ POST   │ 1    │
╰────────────────────┴────────┴──────╯
╭─────────────────────────────────────────────────────────────────────────────────────╮
│ Local API Machines Metrics                                                          │
├──────────────────────────────────────────────────┬───────────────┬────────┬──────┤
│ Machine                                          │ Route         │ Method │ Hits │
├──────────────────────────────────────────────────┼───────────────┼────────┼──────┤
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/heartbeat │ GET    │ 25   │
╰──────────────────────────────────────────────────┴───────────────┴────────┴──────╯
╭───────────────────────────────────────────────────────────────╮
│ Parser Metrics                                                │
├─────────────────────────────────┬──────┬────────┬──────────┤
│ Parsers                         │ Hits │ Parsed │ Unparsed │
├─────────────────────────────────┼──────┼────────┼──────────┤
│ child-crowdsecurity/syslog-logs │ 34   │ 12     │ 22       │
│ crowdsecurity/syslog-logs       │ 23   │ 12     │ 11       │
╰─────────────────────────────────┴──────┴────────┴──────────╯
#####封禁是没有规则的
root@test:/etc/crowdsec# cscli decisions list
No active decisions

现在另开一台机器进行爆破实验,触发规则后,就被拉入黑名单,无法发送数据了

for i in $(seq 1 10); do   ssh invaliduser@ip -o PasswordAuthentication=yes -o StrictHostKeyChecking=no echo hi; done

### Lines parsed读到数据,代表解析正常cscli metrics
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Acquisition Metrics                                                                                                   │
├────────────────────────┬────────────┬──────────────┬────────────────┬────────────────────────┬───────────────────┤
│ Source                 │ Lines read │ Lines parsed │ Lines unparsed │ Lines poured to bucket │ Lines whitelisted │
├────────────────────────┼────────────┼──────────────┼────────────────┼────────────────────────┼───────────────────┤
│ file:/var/log/messages │ 21         │ -            │ 21             │ -                      │ -                 │
│ file:/var/log/secure   │ 22         │ 14           │ 8              │ 32                     │ -                 │
╰────────────────────────┴────────────┴──────────────┴────────────────┴────────────────────────┴───────────────────╯
╭────────────────────────────────────╮
│ Local API Alerts                   │
├───────────────────────────┬───────┤
│ Reason                    │ Count │
├───────────────────────────┼───────┤
│ crowdsecurity/ssh-bf      │ 1     │
│ crowdsecurity/ssh-slow-bf │ 1     │
╰───────────────────────────┴───────╯
╭──────────────────────────────────────────────────────────╮
│ Local API Decisions                                      │
├───────────────────────────┬──────────┬────────┬───────┤
│ Reason                    │ Origin   │ Action │ Count │
├───────────────────────────┼──────────┼────────┼───────┤
│ crowdsecurity/ssh-bf      │ crowdsec │ ban    │ 1     │
│ crowdsecurity/ssh-slow-bf │ crowdsec │ ban    │ 1     │
╰───────────────────────────┴──────────┴────────┴───────╯
╭────────────────────────────────────────╮
│ Local API Metrics                      │
├──────────────────────┬────────┬──────┤
│ Route                │ Method │ Hits │
├──────────────────────┼────────┼──────┤
│ /v1/alerts           │ DELETE │ 1    │
│ /v1/alerts           │ GET    │ 4    │
│ /v1/alerts           │ POST   │ 2    │
│ /v1/decisions        │ DELETE │ 1    │
│ /v1/decisions/stream │ GET    │ 30   │
│ /v1/heartbeat        │ GET    │ 9    │
│ /v1/usage-metrics    │ POST   │ 1    │
│ /v1/watchers/login   │ POST   │ 7    │
╰──────────────────────┴────────┴──────╯
╭──────────────────────────────────────────────────────────────────────────╮
│ Local API Bouncers Metrics                                               │
├────────────────────────────────┬──────────────────────┬────────┬──────┤
│ Bouncer                        │ Route                │ Method │ Hits │
├────────────────────────────────┼──────────────────────┼────────┼──────┤
│ cs-firewall-bouncer-1752116174 │ /v1/decisions/stream │ GET    │ 30   │
╰────────────────────────────────┴──────────────────────┴────────┴──────╯
╭─────────────────────────────────────────────────────────────────────────────────────╮
│ Local API Machines Metrics                                                          │
├──────────────────────────────────────────────────┬───────────────┬────────┬──────┤
│ Machine                                          │ Route         │ Method │ Hits │
├──────────────────────────────────────────────────┼───────────────┼────────┼──────┤
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/alerts    │ DELETE │ 1    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/alerts    │ GET    │ 4    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/alerts    │ POST   │ 2    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/decisions │ DELETE │ 1    │
│ dd2bb318ae379c408892924592b37d97AJnzSsojiaCqXNKQ │ /v1/heartbeat │ GET    │ 9    │
╰──────────────────────────────────────────────────┴───────────────┴────────┴──────╯
╭───────────────────────────────────────────────────────────────╮
│ Parser Metrics                                                │
├─────────────────────────────────┬──────┬────────┬──────────┤
│ Parsers                         │ Hits │ Parsed │ Unparsed │
├─────────────────────────────────┼──────┼────────┼──────────┤
│ child-crowdsecurity/sshd-logs   │ 216  │ 14     │ 202      │
│ child-crowdsecurity/syslog-logs │ 43   │ 43     │ -        │
│ crowdsecurity/sshd-logs         │ 22   │ 14     │ 8        │
│ crowdsecurity/syslog-logs       │ 43   │ 43     │ -        │
│ crowdsecurity/whitelists        │ 14   │ 14     │ -        │
╰─────────────────────────────────┴──────┴────────┴──────────╯
╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Scenario Metrics                                                                                       │
├─────────────────────────────────────┬───────────────┬───────────┬──────────────┬────────┬─────────┤
│ Scenario                            │ Current Count │ Overflows │ Instantiated │ Poured │ Expired │
├─────────────────────────────────────┼───────────────┼───────────┼──────────────┼────────┼─────────┤
│ crowdsecurity/ssh-bf                │ -             │ 2         │ 3            │ 14     │ 1       │
│ crowdsecurity/ssh-bf_user-enum      │ -             │ -         │ 1            │ 2      │ 1       │
│ crowdsecurity/ssh-slow-bf           │ 1             │ 1         │ 2            │ 14     │ -       │
│ crowdsecurity/ssh-slow-bf_user-enum │ 1             │ -         │ 1            │ 2      │ -       │
╰─────────────────────────────────────┴───────────────┴───────────┴──────────────┴────────┴─────────╯
╭────────────────────────────────────────────────────────────────────────────────╮
│ Whitelist Metrics                                                              │
├──────────────────────────┬─────────────────────────────┬──────┬─────────────┤
│ Whitelist                │ Reason                      │ Hits │ Whitelisted │
├──────────────────────────┼─────────────────────────────┼──────┼─────────────┤
│ crowdsecurity/whitelists │ private ipv4/ipv6 ip/ranges │ 14   │ -           │
╰──────────────────────────┴─────────────────────────────┴──────┴─────────────╯#####触发报警
root@test:/etc/crowdsec# cscli alerts list
╭────┬───────────────────┬───────────────────────────┬─────────┬────┬───────────┬─────────────────────────────────────────╮
│ ID │       value       │           reason          │ country │ as │ decisions │                created_at               │
├────┼───────────────────┼───────────────────────────┼─────────┼────┼───────────┼─────────────────────────────────────────┤
│ 7  │ Ip:192.168.00.000 │ crowdsecurity/ssh-slow-bf │         │    │ ban:1     │ 2025-07-10 02:58:28.626116415 +0000 UTC │
│ 6  │ Ip:192.168.00.000 │ crowdsecurity/ssh-bf      │         │    │ ban:1     │ 2025-07-10 02:58:28.625837032 +0000 UTC │
╰────┴───────────────────┴───────────────────────────┴─────────┴────┴───────────┴─────────────────────────────────────────╯#####封禁ip
root@test:/etc/crowdsec# cscli decisions list
╭───────┬──────────┬───────────────────┬───────────────────────────┬────────┬─────────┬────┬────────┬────────────┬──────────╮
│   ID  │  Source  │    Scope:Value    │           Reason          │ Action │ Country │ AS │ Events │ expiration │ Alert ID │
├───────┼──────────┼───────────────────┼───────────────────────────┼────────┼─────────┼────┼────────┼────────────┼──────────┤
│ 15006 │ crowdsec │ Ip:192.168.00.000 │ crowdsecurity/ssh-slow-bf │ ban    │         │    │ 11     │ 3h56m39s   │ 7        │
╰───────┴──────────┴───────────────────┴───────────────────────────┴────────┴─────────┴────┴────────┴────────────┴──────────╯
1 duplicated entries skipped####产生一条drop规则来拒绝爆破ip
root@test:/etc/crowdsec# iptables -nvL
Chain INPUT (policy ACCEPT 4474 packets, 465K bytes)pkts bytes target     prot opt in     out     source               destination         7223  741K CROWDSEC_CHAIN  all  --  *      *       0.0.0.0/0            0.0.0.0/0           Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 7530 packets, 1484K bytes)pkts bytes target     prot opt in     out     source               destination         Chain CROWDSEC_CHAIN (1 references)pkts bytes target     prot opt in     out     source               destination         29  2680 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set crowdsec-blacklists-0 src /* CrowdSec: crowdsec */

8、排错,唯一的难点就是系统产生的日志,无法被CrowdSec适配,可以将config.yaml的日志级别调为debug模式,对应/var/log/crowdsec.log的日志去分析

可以使用这条命令去分析日志是否能被正确匹配

crowdsec -type syslog -dsn file:///var/log/secure -label service:sshd -no-api --debug

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

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

相关文章

imx6ull-裸机学习实验13——串口格式化函数移植实验

目录 前言 格式化函数 实验程序编写 stdio文件夹 main.c Makefile修改 编译下载 前言 在学习实验12:imx6ull串口通信实验,我们实现了 UART1 基本的数据收发功能,虽然可以用来调试程序,但是功能太单一了,只能输出…

CCF-GESP 等级考试 2025年6月认证C++三级真题解析

1 单选题(每题 2 分,共 30 分)第1题 8位二进制原码能表示的最小整数是:( )A. -127 B. -128 C. -255 …

【网络安全】服务间身份认证与授权模式

未经许可,不得转载。 文章目录 问题背景用户到服务的身份认证与授权系统对系统的通信服务与服务之间的通信需求分析Basic Auth(基本身份认证)优点缺点mTLS 证书认证优点缺点OAuth 2.0优点缺点JWS(JSON Web Signature)优点缺点结合 Open Policy Agent 的 JWS 方案优点缺点结…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(四)

An evaluation of SVBRDF Prediction from Generative Image Models for Appearance Modeling of 3D Scenes输入3D场景的几何和一张参考图像,通过扩散模型和SVBRDF预测器获取多视角的材质maps,这些maps最终合并成场景的纹理地图集,并支持在任…

Grid网格布局完整功能介绍和示例演示

CSS Grid布局是一种强大的二维布局系统,可以将页面划分为行和列,精确控制元素的位置和大小。以下是其完整功能介绍和示例演示: 基本概念 网格容器(Grid Container):应用display: grid的元素。网格项&#x…

学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)

每日一言把大目标拆成小步,每天前进一点点,终会抵达终点。QFile读取文件我们记事本要进行读取文件、写入文件、等等的操作,那么这个时候我们的QT有一个QT类叫做QFile这个类的话是专门对于文件操作的,所以我们来学习我们在QT的帮助…

AD736ARZ-R7精密真有效值转换器 高精度测量的首选方案

AD736ARZ-R7精密转换器产品概述AD736ARZ-R7是ADI(Analog Devices Inc.)推出的一款低功耗、高精度的真有效值(RMS)转直流(DC)转换器,采用SOIC-8封装,适用于需要精确测量交流或复杂波形…

【web应用】若依框架前端报表制作与导出全攻略(ECharts + html2canvas + jsPDF)

文章目录前言一、ECharts准备工作1. 检查ECharts安装2. 导入ECharts3. 创建饼图组件4. 模板部分二、报表导出功能实现1. 安装依赖2. 导入依赖3. 完整导出函数实现4. 样式优化三、完整组件实现四、常见问题与解决方案1. 图表截图不完整或模糊2. 图表背景透明3. 导出PDF中文乱码4…

vue3+express联调接口时报“\“username\“ is required“问题

我用node .js的express框架写的登录接口,发现postman可以调通,但是vue3前端报错vue3我发现是我后端node.js的app.js入口文件中配置的解析前端参数的解析中间件和前端请求头中的Content-Type配置不一致的原因 解决方案 因为我后端配置解析表单数据的中间件…

《月亮与六便士》:天才的背叛与凡人救赎的残酷辩证法

当满地六便士成了庸人的火葬场​​毛姆笔下的斯特里克兰德,是一把捅穿中产幻梦的利刃。这个抛妻弃子、背叛友人的证券经纪人,在伦敦客厅的茶香与银勺碰撞声中,突然听见了远方的惊雷——“我必须画画”。如书中所言:​​“在满地都…

vue2往vue3升级需要注意的点(个人建议非必要别直接升级)

将 Vue 2 项目升级到 Vue 3 的过程中,需要重点关注以下几个难点和关键点: 建议小项目直接用vue3重写更快,bug更少 文章目录1. **Composition API 的学习与应用**2. **全局 API 的变更**3. **模板语法的兼容性变化**4. **组件选项和生命周期的…

聚焦数据资源建设与应用,浙江省质科院赴景联文科技调研交流

7月10日上午,浙江省质科院标准化中心副主任蒋建平、应珊婷等一行领导带队莅临景联文科技调研指导工作。双方围绕工业数据展开深度交流。座谈会上,景联文科技详细汇报了数据资源建设与应用方面的成果与规划,介绍了公共数据授权运营与对外合作的…

【Linux】系统引导修复

目录 开机引导过程 一.通电 二.BIOS环境检测 三.磁盘引导阶段 四.文件引导阶段 自动引导配置文件丢失修复 内核参数文件丢失修复 内核镜像文件丢失修复 内核初始化文件丢失修复 boot目录误删丢失修复 开机引导过程 磁盘引导阶段 /boot/grub2/grub.cfg #读取自动引…

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析 编程题 第一题 判断是否存在重复的子序列 题目描述 从m 个字符中选取字符,生成n 个符号的序列,使得其中没有2 个相邻的子序列相同。 如从1,2,3,生成长度为5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0锁表确认及解除锁表完全指南

目录 一、MySQL锁机制基础 1.1 锁的分类与作用 1.2 关键锁类型详解 二、锁表的常见原因与风险 2.1 引发锁表的典型场景 2.2 锁表的业务影响 三、锁表状态确认方法 3.1 基础工具:SHOW PROCESSLIST 3.2 MySQL 8.0锁信息查询(推荐) 3.2…

springboot生成pdf方案之dot/html/图片转pdf三种方式

文章目录pdf生成方案dot转pdfhtml转pdfopenhtmltopdfaspose-pdf实践playwright实践图片转pdfApache PDFBox实践框架场景匹配后记前言:随着客户对报告审美的提升,需求也越来越五彩斑斓~ 原有的dot模板已经满足不了他们了!这篇文章主打列出各种…

前端开发—全栈开发

全栈开发者在面试前端或全栈岗位时,自我介绍需要巧妙融合“技术广度”与“岗位针对性”,避免成为泛泛而谈的“样样通样样松”。以下是结合面试官关注点和全栈特性的专业介绍策略:🧠 一、自我介绍的核心理念 突出全栈优势&#xff…

Redis生产环境过期策略配置指南:务实落地,避免踩坑

在生产环境中合理配置Redis过期策略是保障系统稳定性和内存效率的关键。以下配置建议基于实战经验,避免理论堆砌,直击核心要点:一、核心策略配置:惰性删除 定期删除(默认已启用)无需额外配置:R…

Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南

🌐 Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南 🚀 在本文中,我们将介绍如何在 Ubuntu 20.04 上安装 Node.js 20.x,以及如何安装 npm、cnpm 和 pnpm 来提高开发效率 ⚡。1️⃣ 安装 Node.js 20.x 为了确保使用最…

【时时三省】(C语言基础)通过指针引用数组元素

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省引用一个数组元素,可以用下面两种方法:( 1 )下标法,如a[i]形式;( 2 )指针法,如* ( a i )或* ( p i )。其中a是数组名,p…