当前位置: 首页 > news >正文

linux监控文件操作行为

linux监控文件操作行为

使用 auditd 系统

auditd 是Linux系统的一个安全和审计系统,它能够跟踪系统上发生的安全相关事件。要使用 auditd 来监控文件,你需要首先确保 auditd 已经安装并且运行在你的系统上。

然后,你可以使用 auditctl 命令来添加监控规则:

sudo auditctl -w /path/to/your/file -p warx -k your-key
#-w 指定要监控的文件路径。
#-p 设置权限过滤,warx 分别代表写入(w)、属性更改(a)、读取(r)和执行(x)。
#-k 设置一个关键词,以便于后续通过这个关键词来搜索和过滤审计日志。

之后,你可以通过 ausearch 或 aureport 命令来查询和报告这个文件的审计日志:

sudo ausearch -k your-key 

操作步骤

安装启动

确保 auditd 已安装并运行。

首先,确保你的系统上已经安装了 auditd。可以通过运行以下命令来检查 auditd 服务的状态:

sudo systemctl status auditd

如果服务未运行,使用以下命令启动并设置为开机启动:

sudo systemctl start auditd
sudo systemctl enable auditd
配置监控规则

需要添加监控规则来跟踪对 /etc/pam.d/common-A 和 /etc/lightdm/lightdm-B 文件的更改。由于系统重启后之前使用 auditctl 命令添加的规则不会保留,因此你需要将这些规则添加到配置文件中。

编辑 /etc/audit/rules.d/audit.rules 文件(或者如果这个文件不存在,可能需要编辑 /etc/audit/audit.rules),然后添加以下行:

-w /etc/pam.d/common-A -p wa -k auth-change
-w /etc/lightdm/lightdm-B -p wa -k autologin-change

-w 指定要监控的文件路径,-p wa 指定监控写入(w)和属性(a)更改,-k 后面跟随的是一个自定义的关键字,用于之后过滤和搜索审计日志。

应用并重启 auditd

修改配置文件后,重启 auditd 服务以应用新的监控规则:

sudo systemctl restart auditd

不想重启服务,可以使用 auditctl 工具加载新规则

sudo auditctl -R /etc/audit/rules.d/audit.rules

编辑的是 /etc/audit/audit.rules 文件

sudo auditctl -R /etc/audit/audit.rules
检查审计日志

在系统重启并且文件可能发生变化后,使用以下命令来检查相关的审计日志:

sudo ausearch -k auth-change
sudo ausearch -k autologin-change

命令解释

-w /etc/pam.d/common-A -p wa -k auth-change
-w /etc/lightdm/lightdm-B -p wa -k autologin-change

第一行:监控 /etc/pam.d/common-A 文件的更改
-w /etc/pam.d/common-A:这部分指定了要监控的文件路径,即 /etc/pam.d/common-A。-w 参数用于指定监控哪个文件或目录。

-p wa:这部分指定了要监控的操作类型。-p 参数后面跟着的是一系列标志,代表不同类型的操作:

w 代表写入操作,即当文件被修改时。
a 代表属性更改,即当文件的元数据(如权限、所有权等)被修改时。
-k auth-change:这部分为当前的监控规则指定了一个关键词(key),即 auth-change。在审计日志中,可以通过这个关键词来过滤和搜索与此规则相关的事件。

第二行:监控 /etc/lightdm/lightdm-B 文件的更改
-w /etc/lightdm/lightdm-B:指定了另一个要监控的文件路径,即 /etc/lightdm/lightdm-B。同样使用 -w 参数。

-p wa:与第一行相同,指定了要监控的操作类型为写入和属性更改。

-k autologin-change:为这个监控规则指定了一个不同的关键词,即 autologin-change。这允许你在审计日志中区分由于不同规则触发的事件。

总结
通过添加这些规则到 auditd 的配置中,系统会监控 /etc/pam.d/common-A 和 /etc/lightdm/lightdm-B 这两个文件的写入和属性更改操作。任何对这些文件进行的修改都会被记录下来,并且可以通过指定的关键词来检索相关的审计日志记录。这对于跟踪系统配置更改、增强安全性和排查问题非常有用。

关键词(key)的定义

关键词(key)在这个上下文中是完全自定义的。当你使用 -k 参数在 auditd 规则中指定一个关键词时,这个关键词用于标记和识别与该规则相关的审计事件。

这意味着你可以使用任何有意义的字符串作为关键词,以便于后续在审计日志中快速过滤和查找相关事件。

在提供的例子中:

-k auth-change 中的 auth-change 是一个自定义关键词,用于标识和过滤与 /etc/pam.d/common-auth 文件更改相关的审计事件。
-k autologin-change 中的 autologin-change 是另一个自定义关键词,用于标识和过滤与 /etc/lightdm/lightdm-autologin 文件更改相关的审计事件。
选择关键词时,建议使用既简洁又能准确描述监控规则目的的字符串。

问题处理

root@greatwall-pc:/home/greatwall# sudo ausearch -k auth-change
<no matches>
root@greatwall-pc:/home/greatwall# sudo ausearch -k autologin-changec
<no matches>

可能有几个原因:

  1. 尚未发生任何匹配的事件
    如果您刚刚设置了审计规则,而且 /etc/pam.d/common-auth 或 /etc/lightdm/lightdm-autologin 文件尚未发生任何被监控的更改(如写入或属性更改),那么审计日志中自然不会有匹配的记录。

  2. 审计规则未正确加载或应用
    可能是由于审计规则没有被正确添加到 /etc/audit/audit.rules 或 /etc/audit/rules.d/ 目录下的文件中,或者添加后没有重启 auditd 服务来应用新规则。请确保按照以下步骤操作:

将监控规则正确添加到配置文件中。
使用命令 sudo systemctl restart auditd 重启 auditd 服务。
3. 错误的关键词
请确认在使用 ausearch 命令时输入的关键词与您添加到审计规则中的关键词完全一致。在你提供的命令中,第二个命令末尾出现了拼写错误(autologin-changecno matches> 应为 autologin-change)。请确保使用正确的关键词执行搜索。

  1. 审计日志被旋转或清理
    如果系统的审计日志被旋转(即新的日志文件被创建,旧的日志文件被移动、压缩或删除)或者手动清理,可能会导致之前的记录丢失。可以检查 /var/log/audit/ 目录下是否有旧的审计日志文件存在。

解决步骤
确认文件是否有过更改尝试,可以手动修改一下被监控的文件,以触发审计事件。
检查并确认审计规则是否已正确加载,可以使用 sudo auditctl -l 查看当前加载的规则。
确保使用正确且一致的关键词进行搜索。
检查 /var/log/audit/ 目录下是否有相关的审计日志文件。

结果示例分析

//记录了一个假设的事件,其中某个进程尝试修改 /etc/ssh/sshd_config 文件
time->Tue Apr 16 15:30:22 2024
type=PROCTITLE msg=audit(1713270622.123:495): proctitle=2F7573722F62696E2F7669202F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1713270622.123:495): item=1 name="/etc/ssh/sshd_config" inode=1052773 dev=08:02 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1713270622.123:495): item=0 name="/etc/ssh/" inode=1052672 dev=08:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1713270622.123:495): cwd="/home/user"
type=SYSCALL msg=audit(1713270622.123:495): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffe01b3f110 a2=241 a3=1b6 items=2 ppid=2891 pid=2892 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4 comm="vi" exe="/usr/bin/vi" key="sshd-config-change"

时间戳

  • time->Tue Apr 16 15:30:22 2024: 事件发生的时间是 2024 年 4 月 16 日,15:30:22。

进程标题 (PROCTITLE)

  • proctitle=…: 这是进程标题的十六进制表示,解码后为 /usr/bin/vi /etc/ssh/sshd_config。这意味着有一个进程启动了 vi 编辑器来编辑 /etc/ssh/sshd_config 文件。

路径 (PATH)

  • item=1 指向被修改的文件 /etc/ssh/sshd_config。文件的 inode、设备号、文件权限(0600 表示仅所有者有读写权限)、所有者和组 ID 都被记录下来。
  • item=0 指向父目录 /etc/ssh/,并记录了该目录的相关信息。

当前工作目录 (CWD)

  • cwd=“/home/user”: 在执行相关操作时,进程的当前工作目录是 /home/user。

系统调用 (SYSCALL)
这部分提供了系统调用的详细信息:

  • syscall=257: 表示执行的系统调用编号为 257,这通常与文件操作有关(例如 openat 在某些平台上)。
  • success=yes: 表示系统调用执行成功。
  • exit=3: 系统调用的返回值。
  • a0=…, a1=…, a2=…, a3=…: 这些是系统调用的参数。
  • ppid=2891, pid=2892: 表示父进程 ID 为 2891,当前进程 ID 为 2892。
  • auid=1000: 审计用户 ID(启动进程的用户)为 1000。
  • uid=0, gid=0, euid=0, suid=0, fsuid=0, egid=0, sgid=0, fsgid=0: 这些字段显示进程以 root 用户(UID 和 GID 均为 0)的权限执行。
  • tty=(none), ses=4: 没有使用终端(tty),会话 ID 为 4。
  • comm=“vi”: 命令名称为 vi。
  • exe=“/usr/bin/vi”: 执行的程序路径为 /usr/bin/vi。
  • key=“sshd-config-change”: 这个事件被标记为 sshd-config-change,这是在设置审计规则时指定的关键词,用于过滤和识别与 SSHD 配置更改相关的审计事件。

使用 inotifywait 命令

fanotify 是 Linux 内核中用于文件系统监控的一个特性,它允许程序监听文件系统事件,如文件的打开、关闭等。与 inotify 相比,fanotify 提供了对整个文件系统或单个挂载点的监控能力,而不仅仅是单个文件或目录。这使得 fanotify 非常适合实现如病毒扫描、数据备份等需要广泛文件系统访问的应用。然而,直接使用 fanotify 进行某个特定文件或进程的监控相对复杂,因为它设计的初衷是对文件系统级别的事件进行监控。

inotifywait 是 inotify-tools 工具集中的一个命令,它可以用来监视文件系统事件。通过使用 inotifywait,你可以监控文件或目录的变化事件。

首先需要安装 inotify-tools:

sudo apt-get install inotify-tools  # Debian/Ubuntu
sudo yum install inotify-tools      # CentOS/RHEL

然后,使用下面的命令来监控对某个文件的操作:

inotifywait -m /path/to/your/file
#-m 参数表示持续监控模式。

这将会显示所有对该文件的操作事件,但注意这不会直接显示哪个进程进行了操作。

使用 fanotify

fanotify 是一个较新的Linux内核功能,用于监控文件系统事件。它类似于 inotify,但提供了一些额外的功能和更大的灵活性。使用 fanotify 需要编写特定的程序代码来利用其API。

使用 fanotify 的基本步骤

要使用 fanotify 来实现对某个文件或进程的监控,你需要编写一个 C 程序,因为 Linux 中的 fanotify 接口是通过系统调用提供给用户空间的。

以下是使用 fanotify 的基本步骤:

  1. 初始化 fanotify: 通过调用 fanotify_init 函数来初始化一个 fanotify 实例。这个调用会返回一个文件描述符,用于后续的所有 fanotify 操作。

  2. 标记(Mark)监控的文件或目录: 使用 fanotify_mark 函数来指定你想要监控的文件系统对象(如整个挂载点或特定路径)。你可以指定对哪些事件感兴趣,比如文件被访问(FAN_ACCESS)、文件被修改(FAN_MODIFY)等。

  3. 读取事件: 使用 read 系统调用来读取 fanotify 文件描述符,获取发生的事件。每个事件都会以 fanotify_event_metadata 结构返回,从中你可以获取到事件的详细信息,包括被操作文件的路径。

  4. 处理事件: 根据读取到的事件信息进行相应的处理。例如,你可以记录下哪些进程访问了监控的文件。

  5. 关闭 fanotify 实例: 使用完毕后,通过关闭文件描述符来结束 fanotify 会话。

示例代码

以下是一个简单的 fanotify 示例代码片段,展示了如何初始化 fanotify,并监控整个文件系统的写入操作

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/fanotify.h>
#include <limits.h>
#include <unistd.h>int main(void) {int fd;fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT, O_RDONLY);if (fd < 0) {perror("fanotify_init");exit(EXIT_FAILURE);}if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,FAN_MODIFY, AT_FDCWD, "/") < 0) {perror("fanotify_mark");exit(EXIT_FAILURE);}// 这里需要添加代码来读取和处理事件// ...close(fd);return 0;
}

展示了如何设置 fanotify 来监控根目录 (“/”) 下所有挂载点的修改操作。

在实际使用中,你需要根据自己的需求来调整监听的路径和事件类型,并添加逻辑来读取和处理事件数据。

选择方法

如果需要详细的审计跟踪(包括哪个用户、哪个进程),推荐使用 auditd。
如果只需要简单地监视文件或目录变化,inotifywait 是一个简单易用的选择。
对于需要高级功能和灵活性的场景,可能需要考虑使用 fanotify 并自行编写程序。

相关文章:

linux监控文件操作行为

linux监控文件操作行为 使用 auditd 系统 auditd 是Linux系统的一个安全和审计系统&#xff0c;它能够跟踪系统上发生的安全相关事件。要使用 auditd 来监控文件&#xff0c;你需要首先确保 auditd 已经安装并且运行在你的系统上。 然后&#xff0c;你可以使用 auditctl 命令…...

单链表接口函数的实现(增删查改)

一、单链表的实现形式以及接口函数的声明 #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int DataType ;typedef struct SListNode {DataType data;struct SListNode* next; }SLTNODE; void SLTPrint(SLTNODE* phead);//打印链表 SLTNO…...

超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯片

产品概述 DP32RF002是深圳市动能世纪科技有限公司研制的基于ARMCortex-MO内核的超低功耗 高性能的、单片集成(G)FSK/OOK 无线收发机的32位SoC芯片。工作于200 ~960MHz范围内&#xff0c;支持灵活可设的数据包格式&#xff0c;支持自动应答和自动重发功能&#xff0c;支持跳频…...

uniapp_微信小程序_NaN

一、定义 isNaN() 函数用于检查一个值是否为 NaN。它接受一个参数&#xff0c;该参数可以是任何 JavaScript 数据类型&#xff0c;包括数字、字符串、对象等。如果参数是 NaN&#xff0c;或者不能被转换为数字&#xff0c;则 isNaN() 返回 true&#xff1b;否则返回 false。 …...

1043: 利用栈完成后缀表达式的计算

解法&#xff1a; #include<iostream> #include<stack> using namespace std; int main() {char a;stack<int> sk;while (cin >> a && a ! #) {if (a > 0 && a < 9) {sk.push(a - 0);}else {int num2 sk.top();sk.pop();int n…...

初学ELK - elk部署

一、简介 ELK是3个开源软件组合&#xff0c;分别是 Elasticsearch &#xff0c;Logstash&#xff0c;Kibana Elasticsearch &#xff1a;是个开源分布式搜索引擎&#xff0c;提供搜集、分析、存储数据三大功能。它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自…...

[Java EE] 计算机工作原理与操作系统简明概要

1. 计算机工作原理 1.1 生活中常见的计算机 计算机分为通用计算机和专用计算机,计算机并不单单指的是电脑,还有我们平时使用的手机,ipad,智能手表等终端设备都是计算机.还有我们用户不常见的计算机,比如服务器. 还有许多嵌入式设备(针对特定场景定制的"专用计算机"…...

【尚硅谷】Git与GitLab的企业实战 学习笔记

目录 第1章 Git概述 1. 何为版本控制 2. 为什么需要版本控制 3. 版本控制工具 4. Git简史 5. Git工作机制 6. Git和代码托管中心 第2章 Git安装 第3章 Git常用命令 1. 设置用户签名 1.1 基本语法 1.2 案例实操 2. 初始化本地库 2.1 基本语法 2.2 案例实操 3. 查…...

如何在MobaXterm上使用rz命令

1、首先输入命令和想下载的文件&#xff0c;如下图&#xff1a; 2、按住ctrl鼠标右键&#xff0c;选择如下选项&#xff1a; 上传命令是rz&#xff0c;选择Receive...... 下载命令是sz&#xff0c;选择Send...... 3、我这里是要把Linux上的文件下载到我的本地window磁盘&…...

【计算机考研】408网课汇总+资源分享

408王道的视频就比较通俗易懂 王道的教材非常契合408的大纲&#xff0c;是专门为408大纲而编写的&#xff0c;而教材是方方面面都讲解的透彻。 建议王道为主&#xff0c;网络搜索为辅&#xff01; 王道中讲解不清楚&#xff0c;看不懂的知识点&#xff0c;可以尝试在网络上进…...

如何在OceanBase v4.2 中快速生成随机数据

在使用传统数据库如 MySQL 和 Oracle 时&#xff0c;由于缺乏多样化的随机数据生成方案&#xff0c;或者实现成本过高&#xff0c;构造随机数据的开发成本受到了影响。OceanBase在老版本中虽然有相应的解决方案&#xff0c;但语法复杂和性能较差等问题仍然存在。 现在&#xf…...

nvm node.js的安装

说明&#xff1a;部分但不全面的记录 因为过程中没有截图&#xff0c;仅用于自己的学习与总结 过程中借鉴的优秀博客 可以参考 1,npm install 或者npm init vuelatest报错 2&#xff0c;了解后 发现是nvm使用的版本较低&#xff0c;于是涉及nvm卸载 重新下载最新版本的nvm 2…...

【Docker】安装Redis、Nginx

1、安装redis mkdir -p /docker/redis mkdir -p /docker/redis/data touch /docker/redis/redis.conf touch /docker/redis/redis.bash编辑配置文件 vim /docker/redis/redis.conf # Redis配置文件# Redis默认不是以守护进程的方式运行&#xff0c;可以通过该配置项修改&…...

RK3568 UBUNTU修改网卡名称

​​​​​​RK3568 UBUNTU系统有两个网卡&#xff0c;ETH0和ETH1&#xff0c;于设备机壳丝印ETH1、ETH2无法对应&#xff0c;于是百度了一下相关的修改办法&#xff0c;有修改设备树的等等&#xff0c;挑了一个最简单&#xff0c;验证通过 #第1步&#xff0c;将原网卡关闭ip …...

【华为OD机试C++】统计字符

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例代码描述 输入一行字符,分别统计出包含英文字母、空格、数字和其它…...

百货商场用户画像描绘and价值分析(下)

目录 内容概述数据说明技术点主要内容4 会员用户画像和特征字段创造4.1 构建会员用户基本特征标签4.2 会员用户词云分析 5 会员用户细分和营销方案制定5.1 会员用户的聚类分析及可视化5.2 对会员用户进行精细划分并分析不同群体带来的价值差异 内容概述 本项目内容主要是基于P…...

spring-cloud微服务gateway

核心部分&#xff1a;routes(路由)&#xff0c; predicates(断言)&#xff0c;filters(过滤器) id&#xff1a;可以理解为是这组配置的一个id值&#xff0c;请保证他的唯一的&#xff0c;可以设置为和服务名一致 uri&#xff1a;可以理解为是通过条件匹配之后需要路由到&…...

【python】在pycharm创建一个新的项目

双击打开pycharm,选择create new project 选择create,后进入项目 右键项目根目录,选择new一个新的python file 随意命名一下 输入p 然后后面就会出现智能补全提示,此时轻敲一下tab,代码就写好了,非常的方便 右键执行一下代码,下面两个直接运行和debug运行都是可以的 小结 …...

java小作业(9)----用函数实现斐波那契数列(第二遍)

代码&#xff1a; public class Main {public static void main(String[] args) {int n 20; // 你可以更改这个值来计算和输出前n个斐波那契数for (int i 0; i < n; i) {System.out.print(fibonacci(i) " ");}}public static int fibonacci(int n) {if (n <…...

部署项目的时候的一些错误

项目打jar包&#xff0c;找不到资源&#xff0c;连接不上数据库 项目打包后无法运行 直接在idea运行可以 解决方法&#xff1a;pom文件中增加&#xff08;配置文件如果是yml&#xff0c;写yml&#xff09; <resources><resource><directory>src/main/java&…...

1044: 顺序栈基本操作的实现

解法&#xff1a; #include<iostream> #include<stack> using namespace std; int main() {int n, a, k;stack<int> sk;cin >> n;while (n--) {cin >> a;sk.push(a);}cin >> k;while (k--) {sk.pop();}if (!sk.empty()) {cout << s…...

微信小程序(总结)

1、wx.createSelectorQuery 在微信小程序中&#xff0c;wx.createSelectorQuery 是用于创建一个 SelectorQuery 对象的方法&#xff0c;而 this.createSelectorQuery 是在组件中获取元素的方法。 使用 wx.createSelectorQuery 创建的 SelectorQuery 对象可以用于获取页面中的…...

C#医学实验室/检验信息管理系统(LIS系统)源码

目录 检验系统的总体目标 LIS主要包括以下功能&#xff1a; LIS是集&#xff1a;申请、采样、核收、计费、检验、审核、发布、质控、耗材控制等检验科工作为一体的信息管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c;系统保存检验信息的工具&a…...

Linux驱动编程-module_platform_driver注册platform_driver

使用platform总线驱动模式编写Linux驱动时&#xff0c;需要注册platform_driver&#xff08;用于跟.dts文件的platform_device匹配&#xff09;。下面介绍2种常用注册platform_driver方法&#xff1a; 1、module_init()、module_exit() /* 定义平台drv&#xff0c;通过.name来…...

论文解读 --- 《针对PowerShell脚本的有效轻量级去混淆和语义感知攻击检测》

开篇 今天我们继续来解读安全行业优秀论文&#xff0c;通过学习他人的智慧成果&#xff0c;可以不断丰富我们的安全视野&#xff0c;使用它山之石来破解自身的难题。 这次要解读的论文为《Effective and Light-Weight Deobfuscation and Semantic-Aware Attack Detection for…...

在Spring Boot实战中碰到的拦截器与过滤器是什么?

在Spring Boot实战中&#xff0c;拦截器&#xff08;Interceptors&#xff09;和过滤器&#xff08;Filters&#xff09;是两个常用的概念&#xff0c;它们用于在应用程序中实现一些通用的逻辑&#xff0c;如日志记录、权限验证、请求参数处理等。虽然它们都可以用于对请求进行…...

数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔

总结 本系列是数据可视化基础与应用的第04篇seaborn&#xff0c;是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。 参考 参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》&#xff0c;快来看看吧 数据集地址 h…...

软考之【系统架构设计师】

系统架构设计师 根据原人事部、原信息产业部文件&#xff08;国人部发[2003]39号&#xff09;文件规定&#xff0c;计算机软件资格考试纳入全国专业技术人员职业资格证书制度的统一规划&#xff0c;实行统一大纲、统一试题、统一标准、统一证书的考试办法&#xff0c;每年举行…...

LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式

近日&#xff0c;LigaAI 和极狐GitLab 宣布合作&#xff0c;双方将一起探索 AI 时代的研发效能新范式&#xff0c;提供 AI 赋能的一站式研发效能解决方案&#xff0c;让 AI 成为中国程序员和企业发展的新质生产力。 软件研发是一个涉及人员多、流程多、系统多的复杂工程&#…...

如何看待2023年图灵奖

目录 1.概述 2.计算复杂性理论 3.随机性和伪随机性 4.学术生涯和领导力 1.概述 图灵奖&#xff08;Turing Award&#xff09;&#xff0c;全称A.M.图灵奖&#xff08;ACM A.M Turing Award&#xff09;&#xff0c;是由计算机领域的最高学术机构——美国计算机协会&#xf…...