第29篇:Linux审计系统深度解析:基于OpenEuler 24.03的实践指南

Linux审计系统深度解析:基于OpenEuler 24.03的实践指南

文章目录

  • Linux审计系统深度解析:基于OpenEuler 24.03的实践指南
    • 一、Linux审计系统核心概念与组件架构
      • 1.1 审计系统核心组件详解
        • 1. auditd守护进程:日志持久化引擎
        • 2. auditctl命令行工具:审计规则控制器
        • 3. /etc/audit/audit.rules:审计规则配置中心
        • 4. aureport:审计日志分析引擎
        • 5. ausearch:审计日志查询工具
        • 6. audispd:审计消息分发器
        • 7. autrace:进程追踪工具
      • 1.2 审计系统工作流程剖析
    • 二、OpenEuler 24.03审计系统配置详解
      • 2.1 /etc/audit/auditd.conf:审计核心配置文件
      • 2.2 配置优化实践:企业级场景调整
        • 1. 高可用性配置
        • 2. 性能优化配置
    • 三、审计规则管理:从基础到高级实践
      • 3.1 auditctl命令核心用法
        • 1. 规则语法结构
        • 2. 基础规则示例
          • 案例1:监控关键文件修改
          • 案例2:追踪特定用户登录
          • 案例3:审计特权命令执行
      • 3.2 /etc/audit/audit.rules规则持久化
        • 1. 规则文件结构
        • 2. 动态更新规则
      • 3.3 高级规则场景:基于条件的复杂审计
        • 1. 监控特定目录递归变化
        • 2. 进程树追踪
        • 3. 网络活动审计
    • 四、审计日志分析与管理
      • 4.1 aureport:可视化报表生成工具
        • 1. 基础报表功能
          • 案例1:查看日志时间范围
          • 案例2:失败事件统计
          • 案例3:文件访问失败统计
        • 2. 高级报表应用
          • 案例1:配置变更追踪
          • 案例2:加密操作审计
          • 案例3:自定义时间范围报表
      • 4.2 ausearch:精准日志查询
        • 1. 基础查询语法
        • 2. 查询案例
          • 案例1:查询root用户操作
          • 案例2:追踪特定终端活动
          • 案例3:按进程ID查询
          • 案例4:复合条件查询
      • 4.3 autrace:进程动态追踪
        • 1. 基本用法
        • 2. 追踪案例
          • 案例1:追踪命令执行过程
          • 案例2:追踪后台进程
          • 案例3:指定输出文件
    • 五、OpenEuler审计系统可视化管理
      • 5.1 audit-viewer图形工具
        • 1. 安装与启动
        • 2. 界面功能解析
          • 1. 事件列表视图
          • 2. 报表生成功能
          • 3. 高级过滤功能
      • 5.2 命令行与图形界面协同使用
        • 1. 导出命令查询结果到图形界面
        • 2. 图形界面操作转换为命令
    • 六、审计系统安全运维最佳实践
      • 6.1 合规性审计配置
        • 1. 等保2.0审计要求实现
        • 2. GDPR合规日志管理
      • 6.2 安全事件响应流程
        • 1. 异常登录检测与响应
        • 2. 关键文件变更告警
      • 6.3 审计系统自身安全加固
        • 1. 日志文件权限控制
        • 2. 审计服务访问控制
    • 七、总结与扩展学习
    • 七、总结与扩展学习

一、Linux审计系统核心概念与组件架构

Linux审计系统是操作系统安全架构中的关键环节,其通过实时监控系统事件、记录操作日志并提供审计分析能力,为系统安全合规性管理、入侵检测和故障排查提供底层支持。在OpenEuler 24.03系统中,审计系统基于标准Linux内核审计框架构建,并针对企业级应用场景进行了优化,形成了一套完整的事件追踪与分析体系。

1.1 审计系统核心组件详解

1. auditd守护进程:日志持久化引擎

在OpenEuler 24.03中,auditd作为审计系统的核心守护进程,承担着将内核生成的审计事件写入磁盘的关键任务。该进程通过与内核审计子系统交互,实时捕获系统调用、用户操作、文件访问等事件,并按照配置规则将其持久化到日志文件中。其特点包括:

  • 异步写入机制:采用批量写入策略,减少磁盘I/O开销,提升系统性能
  • 可配置的日志轮转策略:支持按文件大小、时间周期自动轮换日志
  • 与systemd深度集成:通过systemctl命令实现服务管理,如systemctl status auditd可查看服务运行状态
2. auditctl命令行工具:审计规则控制器

auditctl是OpenEuler中控制审计系统的核心命令行工具,用于动态管理审计规则、查询审计状态及控制内核审计接口。其功能涵盖:

  • 规则增删改查:支持基于文件系统对象、进程、用户等维度创建审计规则
  • 内核审计参数调整:可修改审计缓冲区大小、日志格式等运行时参数
  • 规则持久化管理:配合audit.rules文件实现规则的开机自动加载
3. /etc/audit/audit.rules:审计规则配置中心

该文件是OpenEuler审计系统的规则仓库,包含一系列auditctl命令,系统启动时由auditd自动加载。典型应用场景包括:

  • 系统初始化规则配置:如对关键系统文件(/etc/passwd/usr/bin/su)设置访问审计
  • 动态规则管理模板:通过脚本动态修改此文件实现规则的批量部署
4. aureport:审计日志分析引擎

aureport命令用于从审计日志中提取数据并生成结构化报表,在OpenEuler中支持多种报表类型:

  • 时间范围报表:按日期维度统计事件分布
  • 失败事件报表:聚焦认证失败、文件访问拒绝等安全相关事件
  • 配置变更报表:追踪系统配置修改记录,满足等保合规要求
5. ausearch:审计日志查询工具

ausearch提供灵活的日志查询能力,支持基于以下维度过滤事件:

  • 用户标识:按UID、用户名查询特定用户的操作记录
  • 进程标识:通过PID追踪特定进程的系统调用
  • 事件类型:筛选如文件打开、进程创建等特定类型事件
6. audispd:审计消息分发器

audispd作为审计消息中间件,负责将审计事件转发至不同目标:

  • 多目标分发:支持同时写入本地日志、发送至远程服务器或触发告警脚本
  • QoS策略:在系统负载过高时可丢弃非关键事件,保障核心功能可用性
7. autrace:进程追踪工具

autrace在OpenEuler中用于动态追踪进程行为,功能类似strace但更专注于审计场景:

  • 非侵入式追踪:无需修改目标程序即可捕获系统调用
  • 日志自动归档:追踪结果直接写入审计日志,便于后续分析

1.2 审计系统工作流程剖析

OpenEuler审计系统的工作流程可分为四个阶段:

  1. 事件捕获:内核在系统调用、文件操作等关键节点触发审计事件,生成包含进程ID、用户ID、操作类型等信息的事件记录
  2. 事件传递:内核通过Netlink套接字将事件发送至auditd守护进程
  3. 日志处理auditd根据auditd.conf配置对事件进行格式化、过滤,并写入/var/log/audit/audit.log
  4. 分析消费aureportausearch等工具对日志进行解析,生成报表或提供查询接口

二、OpenEuler 24.03审计系统配置详解

2.1 /etc/audit/auditd.conf:审计核心配置文件

该文件是审计系统的核心配置中心,OpenEuler 24.03的默认配置包含以下关键参数:

配置项默认值说明
local_eventsyes是否启用本地事件收集
write_logsyes是否写入日志文件
log_file/var/log/audit/audit.log日志文件路径
log_grouproot日志文件所属用户组
log_formatRAW日志格式,RAW为二进制格式,可通过aureport解析
flushINCREMENTAL_ASYNC日志刷新策略,异步增量刷新
freq50异步刷新频率(每50条记录刷新一次)
max_log_file8单个日志文件最大大小(MB)
num_logs5保留的日志文件数量
priority_boost4审计进程优先级提升值
dispatcher/sbin/audispd消息分发器路径
max_log_file_actionROTATE日志文件满时操作,ROTATE表示轮转
space_left75磁盘剩余空间阈值(%)
space_left_actionSYSLOG磁盘空间不足时操作,发送系统日志
admin_space_left50管理员空间阈值(%)
admin_space_left_actionSUSPEND管理员空间不足时暂停审计
disk_full_actionSUSPEND磁盘满时暂停审计
use_libwrapyes是否启用libwrap访问控制

2.2 配置优化实践:企业级场景调整

1. 高可用性配置

在关键业务系统中,可调整以下参数提升审计系统稳定性:

# 增加日志缓冲区大小
buffer_size = 8192
# 紧急情况下发送邮件告警
action_mail_acct = security@example.com
# 启用网络分发,实现审计日志异地备份
distribute_network = yes
tcp_listen_port = 60 audit
2. 性能优化配置

对于高负载系统,建议优化:

# 提高异步刷新频率,减少内存占用
freq = 100
# 采用更激进的日志轮转策略
max_log_file = 16
num_logs = 10
# 使用更高效的日志格式
log_format = JSON

三、审计规则管理:从基础到高级实践

3.1 auditctl命令核心用法

1. 规则语法结构

OpenEuler中的auditctl规则遵循以下格式:

auditctl -a action,filter -F field=value -k key
  • action:规则类型,如always(始终审计)、exit(系统调用退出时审计)
  • filter:过滤条件,如entry(系统调用进入时)
  • field:审计字段,如path(文件路径)、uid(用户ID)
  • key:规则标识,便于后续管理
2. 基础规则示例
案例1:监控关键文件修改
# 对/etc/sudoers文件的任何修改进行审计
auditctl -w /etc/sudoers -p wa -k sudoers_modify
# 解释:-w监控路径,-p指定监控权限(w写,a属性修改),-k设置规则键
案例2:追踪特定用户登录
# 监控UID为1001的用户登录行为
auditctl -a always,exit -F arch=b64 -F euid=1001 -S login -k user_login
# 解释:-a始终审计,-F指定架构为x86_64,euid为目标用户,-S监控login系统调用
案例3:审计特权命令执行
# 监控sudo命令的执行
auditctl -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec
# 解释:监控sudo文件的执行权限(x)操作

3.2 /etc/audit/audit.rules规则持久化

1. 规则文件结构

OpenEuler启动时会执行audit.rules中的auditctl命令,典型文件内容如下:

# 清除现有规则
-D# 基础规则:审计所有系统调用
-a always,exit -F arch=* -S all -k system_call# 安全规则:监控SUID程序修改
-w /usr/bin/chsh -p wa -k suid_modify
-w /usr/bin/chfn -p wa -k suid_modify
-w /usr/bin/passwd -p wa -k suid_modify# 登录审计规则
-a always,exit -F arch=b64 -F euid=0 -S login -k root_login
2. 动态更新规则

可通过以下命令动态更新规则并写入文件:

# 添加新规则并立即生效
auditctl -w /etc/ssh/sshd_config -p w -k sshd_config_modify
# 将当前规则保存到文件
auditctl -D > /etc/audit/audit.rules
# 重新加载规则
systemctl restart auditd

3.3 高级规则场景:基于条件的复杂审计

1. 监控特定目录递归变化
# 监控/var/www目录下所有文件的创建、删除和修改
auditctl -R /var/www -p war -k webroot_changes
# 解释:-R递归监控目录,-p指定监控类型(w写,a属性,r读取)
2. 进程树追踪
# 监控由bash进程启动的所有子进程
auditctl -a always,exit -F ppid=$$ -F comm=bash -k bash_subprocess
# 解释:ppid=$$表示当前shell进程,comm=bash匹配进程名
3. 网络活动审计
# 审计所有网络连接建立
auditctl -a always,exit -F arch=b64 -S connect -k network_connect
# 解释:监控connect系统调用,捕获网络连接事件

四、审计日志分析与管理

4.1 aureport:可视化报表生成工具

1. 基础报表功能
案例1:查看日志时间范围
aureport -t
# 输出示例:
Log Time Range Report
=====================
/var/log/audit/audit.log: 2024年05月01日 10:00:00.000 - 2024年05月10日 23:59:59.999
案例2:失败事件统计
aureport --failed
# 关键输出:
Failed Summary Report
======================
Number of failed logins: 15
Number of failed authentications: 8
案例3:文件访问失败统计
aureport -f --failed --summary
# 解释:-f聚焦文件事件,--failed筛选失败事件,--summary显示摘要
2. 高级报表应用
案例1:配置变更追踪
aureport -c
# 输出包含配置变更的时间、类型和用户信息,如:
1. 2024年05月05日 14:30:22 CONFIG_CHANGE root yes 12345
案例2:加密操作审计
aureport -cr
# 解释:-c显示配置变更,-r显示加密事件,用于追踪密钥操作
案例3:自定义时间范围报表
aureport --start "2024-05-05 00:00:00" --end "2024-05-05 23:59:59"
# 精确分析特定时间段内的事件

4.2 ausearch:精准日志查询

1. 基础查询语法
ausearch [options] [--field value]

常用选项:

  • -ui:按用户ID查询
  • -tm:按终端设备查询
  • -p:按进程ID查询
  • -k:按规则键查询
  • -ts:按时间戳查询
2. 查询案例
案例1:查询root用户操作
ausearch -ui 0
# 解释:-ui 0表示查询UID为0(root)的所有操作
案例2:追踪特定终端活动
ausearch -tm tty1
# 监控tty1终端上的所有操作
案例3:按进程ID查询
ausearch -p 1234
# 追踪PID为1234的进程活动
案例4:复合条件查询
ausearch -ts "2024-05-05 10:00:00" -k sudo_exec
# 查找2024年5月5日10点后与sudo_exec规则相关的事件

4.3 autrace:进程动态追踪

1. 基本用法
autrace [options] command [args]

常用选项:

  • -r:将追踪结果写入审计日志
  • -p:附加到现有进程
  • -o:指定输出文件
  • -l:设置日志级别
2. 追踪案例
案例1:追踪命令执行过程
autrace -r /bin/ls /etc
# 解释:-r将ls命令的执行过程写入审计日志,可通过ausearch -p <pid>查询
案例2:追踪后台进程
autrace -p 5678 -r
# 附加到PID为5678的进程并开始追踪
案例3:指定输出文件
autrace -o /tmp/ls_trace.log /bin/ls /root
# 将追踪结果保存到指定文件,便于离线分析

五、OpenEuler审计系统可视化管理

5.1 audit-viewer图形工具

1. 安装与启动

在OpenEuler 24.03中安装:

dnf install -y audit-viewer

启动方式:

audit-viewer
# 或通过菜单路径:系统 -> 管理 -> 审计日志
2. 界面功能解析
1. 事件列表视图
  • 按时间顺序显示所有审计事件
  • 支持筛选特定类型事件(如USER_AUTH、SYSCALL)
  • 可查看事件详细字段:PID、UID、系统调用参数等
2. 报表生成功能
  • 新建报告向导:可按日期、用户、事件类型分组
  • 自定义报表属性:设置分组条件、过滤表达式
  • 导出功能:支持将报表导出为CSV、PDF等格式
3. 高级过滤功能
  • 日期过滤器:精确选择时间范围
  • 字段过滤器:按UID、PID、系统调用名等字段筛选
  • 正则表达式支持:复杂条件匹配

5.2 命令行与图形界面协同使用

1. 导出命令查询结果到图形界面
ausearch -ui 0 -ts "2024-05-01" > /tmp/root_events.txt
# 在audit-viewer中导入该文件进行可视化分析
2. 图形界面操作转换为命令

在audit-viewer中创建的过滤器可通过以下方式转换为命令:

  1. 设置过滤条件后,点击"复制为命令"
  2. 生成的ausearch命令可直接在终端执行或保存为脚本

六、审计系统安全运维最佳实践

6.1 合规性审计配置

1. 等保2.0审计要求实现
# 配置用户登录审计
auditctl -a always,exit -F arch=b64 -F euid=0 -S login -k root_login
# 配置用户权限变更审计
auditctl -w /etc/group -p wa -k group_modify
auditctl -w /etc/passwd -p wa -k passwd_modify
# 配置关键目录审计
auditctl -R /etc/ -p war -k etc_dir_audit
auditctl -R /usr/bin/ -p x -k bin_exec_audit
2. GDPR合规日志管理
# 设置日志保留期为6个月
max_log_file = 100
num_logs = 180
# 敏感数据模糊处理(需配合内核模块)
filter_sensitive_data = yes

6.2 安全事件响应流程

1. 异常登录检测与响应
# 实时监控失败登录
aureport --failed | grep -i "failed logins"
# 若发现异常登录尝试,执行:
grep "failed login" /var/log/audit/audit.log | awk '{print $11}' | sort | uniq -c
# 封禁频繁失败的IP(需配合fail2ban)
2. 关键文件变更告警
# 配置文件变更实时通知
auditctl -w /etc/sudoers -p w -k sudoers_alert
# 编写脚本监控规则键事件并发送告警
while true; doausearch -k sudoers_alert -ts recent | mail -s "Sudoers修改告警" admin@example.comsleep 300
done

6.3 审计系统自身安全加固

1. 日志文件权限控制
chmod 600 /var/log/audit/audit.log
chown root:root /var/log/audit/audit.log
# 配置SELinux策略
chcon -t audit_log_t /var/log/audit/audit.log
2. 审计服务访问控制
# 在/etc/hosts.allow中限制审计服务访问
audispd: 192.168.1.0/24
# 在firewalld中配置规则
firewall-cmd --add-port=60audit/tcp --permanent
firewall-cmd --reload

七、总结与扩展学习

OpenEuler 24.03的审计系统提供了从事件捕获、日志管理到分析报表的完整解决方案,通过灵活的规则配置和强大的分析工具,可满足企业级安全审计需求。建议进一步学习:

  • 内核审计子系统原理(Documentation/audit/内核文档)
  • OpenEuler安全增强特性(如SELinux与审计系统的集成)
  • 自动化审计脚本开发(利用Python处理审计日志)

on -t audit_log_t /var/log/audit/audit.log


#### 2. 审计服务访问控制
```bash
# 在/etc/hosts.allow中限制审计服务访问
audispd: 192.168.1.0/24
# 在firewalld中配置规则
firewall-cmd --add-port=60audit/tcp --permanent
firewall-cmd --reload

七、总结与扩展学习

OpenEuler 24.03的审计系统提供了从事件捕获、日志管理到分析报表的完整解决方案,通过灵活的规则配置和强大的分析工具,可满足企业级安全审计需求。建议进一步学习:

  • 内核审计子系统原理(Documentation/audit/内核文档)
  • OpenEuler安全增强特性(如SELinux与审计系统的集成)
  • 自动化审计脚本开发(利用Python处理审计日志)

通过持续优化审计规则和分析流程,可将审计系统从被动记录工具转变为主动安全防御体系的重要环节,为系统安全运营提供坚实的数据支撑。

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

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

相关文章

Linux 启动过程流程图--ARM版

以下是ARM版本Linux启动过程的超详细树状图&#xff0c;涵盖硬件上电到应用程序交互的全流程&#xff0c;并包含关键函数调用链及源码位置&#xff0c;适用于系统开发与调试场景&#xff1a; ARM Linux启动全流程&#xff08;含函数调用链&#xff09; ARM Linux启动流程&…

NVMe高速传输之摆脱XDMA设计6之系统架构设计

结合目前应用需求&#xff0c;以及前面基础分析&#xff0c;确定IP应具有如下特色&#xff1a; &#xff08;1&#xff09; 通用性 前端数据采集系统基于 FPGA 开发。 一方面&#xff0c; 设备类型多&#xff0c; 使用的 FPGA型号各不相同&#xff0c; 需要实现的设计能够在多种…

Mac homebrew 安装教程

下载github安装包 https://github.com/Homebrew/brew/releases/tag/4.5.8 下载安装后 打开 安全里面允许安装&#xff0c;就可以直接使用了

stm32hal模块驱动(1)hpdl1414驱动

之前一直想用hpdl1414画一块手表&#xff0c;前面pcb测试板画完没空调试&#xff0c;最近刚好空出来时间&#xff0c;遂发下驱动。 这里简单赘述hpdl1414的驱动原理&#xff1a;D0-D6负责数据输入&#xff08;ascii表后7位&#xff09;&#xff0c;A0,A1负责更改hpdl1414模块显…

从代码学习深度强化学习 - TRPO PyTorch版

文章目录 前言核心工具函数广义优势估计 (Generalized Advantage Estimation, GAE)案例一:TRPO 解决离散动作问题 (CartPole-v1)1. 环境初始化2. 网络结构定义3. TRPO 智能体实现4. 训练与可视化5. 训练主程序与结果案例二:TRPO 解决连续动作问题 (Pendulum-v1)1. 环境与工具…

MySQL 升级到8.4版本的详细指南

本指南详细介绍了将 MySQL 升级到 8.4 版本的完整流程、注意事项和操作方法。 一、升级前准备 (3.1 Before You Begin) 在开始升级之前&#xff0c;必须仔细审阅本节信息并执行所有推荐的操作&#xff1a; 理解升级过程&#xff1a;了解升级期间可能发生的情况。请参阅第 3.4…

leetcode427.建立四叉树

区间x0到x1和区间y0到y1都是左闭右开的 解题基本思路是先判断当前矩阵是不是全0或全1&#xff0c;如果是就直接返回新建的一个节点值(矩阵的统一值&#xff0c;叶子节点&#xff09;,如果不是那就新建一个节点值&#xff0c;非叶并且左上右上左下右下四个方向上递归创建节点 /…

医学+AI教育实践!南医大探索数据挖掘人才培养,清华指导发布AI教育白皮书

教育数字化浪潮正以前所未有的力度重塑高等教育格局。今年4月&#xff0c;为贯彻落实《教育强国建设规划纲要&#xff08;2024—2035 年&#xff09;》&#xff0c;教育部等九部门印发《关于加快推进教育数字化的意见》&#xff0c;表明将持续推动“人工智能教育”全方位发展&a…

PDF处理控件Spire.PDF系列教程:如何使用C# 拆分 PDF 文件(完整指南)

PDF文件因其高度的跨平台兼容性和安全稳定的格式特点&#xff0c;广泛应用于企业文档管理和电子资料传输中。随着PDF文档页数和内容复杂度的增加&#xff0c;拆分PDF成为优化文档处理流程、提升办公效率的重要需求。通过编程方式实现PDF拆分&#xff0c;不仅能自动化处理海量文…

文心4.5开源模型部署实践

文心4.5开源模型部署实践 使用fastdeploy本地部署 执行命令&#xff1a; python -m fastdeploy.entrypoints.openai.api_server \--model baidu/ERNIE-4.5-21B-A3B-Paddle \--port 8180 \--metrics-port 8181 \--engine-worker-queue-port 8182 \--max-model-len 32768 \--m…

Python迭代器、生成器、闭包和装饰器(三器一包)

return、continue、break区别&#xff1a; return只能用在函数里面&#xff0c;表示从函数中返回&#xff0c;函数体内的后续任何代码都不执行continue只是跳出当前循环&#xff0c;进入下一循环break只是跳出全部循环&#xff0c;如果循环后面还有代码&#xff0c;会进行执行…

【Java】Maven

一.Maven简介 Maven的产生主要是为了解决Java项目中的两个问题&#xff1a; 1.依赖管理&#xff1a; 传统 Java 项目在引入第三方库时&#xff0c;需要手动下载 JAR 包并维护复杂的依赖关系。Maven 提供了统一的依赖管理机制&#xff0c;通过简单的配置即可自动从仓库下载并引…

人脸活体识别3:C/C++实现人脸眨眼 张嘴 点头 摇头识别(可实时检测)

人脸活体识别3&#xff1a;C/C实现人脸眨眼 张嘴 点头 摇头识别(可实时检测) 目录 人脸活体识别3&#xff1a;C/C实现人脸眨眼 张嘴 点头 摇头识别(可实时检测) 1. 前言 2.人脸活体识别方法 &#xff08;1&#xff09;基于人脸动作的检测​​ &#xff08;2&#xff09;​…

【ABAP】 从无到有 新建一个Webdynpro程序

、新建WDA 可从SE80在web dynpro 组件下 创建 并按例以下操作 2、插入窗口 3、相关功能 3-1、展示消息 DATA:lo_api_controller TYPE REF TO if_wd_controller,lo_message_handler TYPE REF TO if_wd_message_manager.lo_api_controller ? wd_this->wd_get_api( ).lo_mess…

ALV常用设置(更新中一)

之前设置了checkbox&#xff0c;但是触发不了单击事件&#xff0c;且alv自带的复选&#xff0c;鼠标移动单击别处就会自动取消。 **增加多选框到fieldcat&#xff0c;**这一点很重要&#xff0c;然后设置 IF gs_fcat-fieldname sel.gs_fcat-checkbox X. gs_fcat-edit X. …

NumPy 或 PyTorch/TensorFlow 中的张量理解

(2, 2, 3) 形状的 3D 数组&#xff08;或张量&#xff09;的结构。 个人理解&#xff1a; 2个2维数组&#xff08;张量&#xff09;&#xff0c;2维数组&#xff08;张量&#xff09;里面有2个1维向量&#xff08;张量&#xff09;&#xff0c;1维向量&#xff08;张量&#x…

Linux环境下使用 C++ 与 OpenCV 实现 ONNX 分类模型推理

实验环境&#xff1a;Ubuntu 20.0 推理模型&#xff1a;ONNX分类模型 1. 安装依赖项 首先是需要安装依赖库&#xff0c;如g&#xff0c;cmake等&#xff0c;如果已经安装的话可以忽略 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt i…

AJAX 安装使用教程

一、AJAX 简介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在无需重新加载整个网页的情况下&#xff0c;能够与服务器交换数据并更新部分网页内容的技术。它不是一种新语言&#xff0c;而是使用现有的标准组合&#xff1a;JavaScript XMLHttpRequest…

【牛客算法】牛客网编程题解:小红拼图

一、题目介绍 1.1. 题目链接 &#xff1a;小红拼图 https://www.nowcoder.com/questionTerminal/08b54686f0d14bd784d9d148c68a268a 1.2 题目介绍 小红正在玩一个拼图游戏&#xff0c;她有一些完全相同的拼图组件&#xff1a; 小红准备用这些组件来拼成一些图案。这些组件可…

买卖股票的最佳时机--js 算法

一、买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。…