Linux安全之auditd审计工具使用说明

news2024/11/9 9:37:47

一、auditd工具简介

  audited是Linux审核系统的用户空间组件。它负责将审核记录写入磁盘。查看日志是通过ausearch或aureport实用程序完成的。审核系统或加载规则的配置是使用auditctl实用程序完成的。在启动过程中,/etc/audit/audit.rules中的规则由auditctl读取并加载到内核中。另外,还有一个augenrules程序,它读取/etc/audit/rules.d/中的规则,并将它们编译为audit.rules文件。审核守护进程本身有一些管理员可能希望自定义的配置选项,它们位于audited.conf文件中。

二、auditd配置文件说明

1、配置文件关键字说明

关键字关键字说明
num_days日志保留的天数
idletime空闲时间
max_log_file这个关键字指定了以兆字节为单位的最大文件大小。当达到这个限制时,它将触发一个可配置的操作。给定的值必须是数值。
max_log_file_action此参数告诉系统当系统检测到已达到最大文件大小限制时采取什么操作。有效值为ignore、syslog、suspend、rotate和keep_logs。如果设置为ignore,审计守护进程什么都不做。Syslog表示它将向Syslog发出警告。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。rotate选项将导致审计守护进程旋转日志。需要注意的是,数值大的日志比数值小的日志要早。这与logrotate实用程序使用的约定相同。keep_logs选项类似于rotate,只是它不使用num_logs设置。这可以防止审计日志被覆盖。
space_left这是一个以兆字节为单位的数值,它告诉审计守护进程何时执行可配置的操作,因为系统的磁盘空间开始不足。
space_left_action这个参数告诉系统,当系统检测到磁盘空间开始变少时,应该采取什么行动。有效值为:ignore、syslog、email、exec、suspend、single和halt。如果设置为ignore,审计守护进程什么都不做。Syslog表示它将向Syslog发出警告。Email意味着它将向action_mail_acct中指定的电子邮件帐户发送警告,同时将消息发送到syslog。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。Halt选项将导致审计守护进程关闭计算机系统。
local_events本地的事件是否记录,设置为no的场景应该是只作为远程日志收集的服务器,但自身的日志大多数时候也是有必要记录的
write_logs日志是否落盘,设置为no的场景应该是将会把日志存储到远程服务器的客户端(没有足够空间的情况下)
log_file此关键字指定存储审计记录的日志文件的完整路径名。它必须是一个普通文件。
log_format日志格式描述了信息应该如何存储在磁盘上。有两个选项:raw和nolog。如果设置为RAW,审计记录将按照内核发送的格式存储。如果该选项设置为NOLOG,那么所有审计信息将被丢弃,而不会写入磁盘。该模式不影响发送到审计事件分配器的数据。
log_group此关键字指定应用于日志文件权限的组。默认为root。组名可以是数字,也可以拼写出来。
priority_boost这是一个非负数,告诉审计守护进程应该提高多少优先级。默认值为4。没有变化是0。
flush有效值为none、incremental、data和sync。如果设置为none,则不会进行特殊操作将审计记录刷新到磁盘。如果设置为增量,那么freq参数用于确定显式刷写磁盘的频率。data参数告诉审计守护进程始终保持磁盘文件的数据部分同步。sync选项告诉审计守护进程在每次写入磁盘时保持数据和元数据完全同步。
freq这是一个非负数,告诉审计守护进程在发出显式刷写到磁盘命令之前要写入多少条记录。只有将flush关键字设置为incremental时,这个值才有效。
num_logs如果rotate指定了max_log_file_action,则该关键字指定了保留的日志文件数。如果数字是<2、日志不旋转。这个数字必须小于等于99。默认值为0,表示没有旋转。随着要旋转的日志文件数量的增加,可能需要向上调整内核积压工作表的设置,因为旋转文件需要更多的时间。这通常在/etc/audit/audit.rules中完成。如果配置日志轮换,守护进程将检查多余的日志并删除它们,以保持磁盘空间可用。只有在启动和重新配置导致空间检查时,才会进行多余的日志检查。
disp_qos此选项控制您想要在审计守护进程和调度程序之间进行阻塞/无损通信还是非阻塞/有损通信。在审计守护进程和分配器之间有一个128k的缓冲区。对于大多数应用来说,这已经足够了。如果选择了lossy,那么当队列满时,进入分派器的事件将被丢弃。(如果log_format不是nlog,事件仍然写入磁盘。)否则,auditd守护进程将等待队列有一个空位,然后将日志记录到磁盘。风险在于,当守护进程等待网络IO时,事件不会被记录到磁盘上。有效值有:lossy和lossless。默认值为Lossy。
dispatcherdispatcher是一个由审计守护进程在启动时启动的程序。它将把所有审计事件的副本传递给应用程序的stdin。请确保您信任添加到这一行的应用程序,因为它以root权限运行。
name_format该选项控制计算机节点名如何插入到审计事件流中。它有以下选项:none、hostname、fqd、numeric和user。None表示没有向审计事件插入计算机名。Hostname是gethostname系统调用返回的名称。fqd意味着它接收主机名并通过dns解析为该机器的完全限定域名。Numeric类似于fqd,只是它可以解析机器的IP地址。为了使用这个选项,你可能想测试hostname -idomainname -i是否返回一个数字地址。此外,如果使用dhcp,则不建议使用此选项,因为随着时间的推移,同一台机器可能有不同的地址。User是一个从name选项中定义的管理员字符串。默认值为none。
name这是管理员定义的字符串,如果user被指定为name_format选项,它将标识该机器。
action_mail_acct此选项应包含有效的电子邮件地址或别名。默认地址为root。如果电子邮件地址不是本机的,你必须确保在你的机器和网络上正确配置了电子邮件。此外,该选项要求计算机上存在/usr/lib/sendmail。
admin_space_left这是一个以兆字节为单位的数值,它告诉审计守护进程何时执行可配置的操作,因为系统磁盘空间不足。这应该被视为耗尽磁盘空间之前执行某些操作的最后机会。该参数的数值应该小于space_left的数值。
admin_space_left_action此参数告诉系统当系统检测到磁盘空间不足时采取什么操作。有效值为:ignore、syslog、email、exec、suspend、single和halt。如果设置为ignore,审计守护进程什么都不做。Syslog表示它将向Syslog发出警告。Email意味着它将向action_mail_acct中指定的电子邮件帐户发送警告,同时将消息发送到syslog。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。停止
disk_full_action这个参数告诉系统,当系统检测到日志文件写入的分区已满时,应该采取什么行动。有效值为ignore、syslog、exec、suspend、single和halt。如果设置为ignore,审计守护进程将发出syslog消息,但不采取其他操作。Syslog表示它将向Syslog发出警告。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。Halt选项将导致审计守护进程关闭计算机系统。
disk_error_action这个参数告诉系统,在将审计事件写入磁盘或循环日志时,如果检测到错误,应该采取什么操作。有效值为ignore、syslog、exec、suspend、single和halt。如果设置为ignore,审计守护进程将不执行任何操作。Syslog表示对Syslog连续发出的警告不超过5次。Exec /path-to-script将执行脚本。您不能将参数传递给脚本。Suspend将导致审计守护进程停止向磁盘写入记录。守护进程还会活着。single选项将导致审计守护进程将计算机系统置于单用户模式。Halt选项将导致审计守护进程关闭计算机系统。
tcp_listen_port这是一个范围为1的数值。65535,如果指定,将导致auditd在对应的TCP端口上监听来自远程系统的审计记录。审计守护进程可以链接到tcp_wrapper。您可能希望通过主机中的一个条目来控制访问。允许和拒绝文件。
tcp_listen_queue这是一个数值,表示允许的挂起(请求但未接受的)连接数。默认值为5。如果在同一时间启动的主机太多,例如停电后,这个值设置得太小可能会导致连接被拒绝。
tcp_max_per_addr这是一个数值,表示一个IP地址允许的并发连接数。默认值为1,最大1024。设置得太大可能导致对日志服务器的拒绝服务攻击。还要注意,内核有一个内部的最大值,即使auditd通过config允许这样做,最终也会阻止该操作。默认值在大多数情况下应该足够了,除非运行自定义编写的恢复脚本来转发未发送的事件。在这种情况下,你只需要增加足够大的数字就可以让它进来。
use_libwrap该设置确定是否使用tcp_wrapper来识别来自允许的计算机的连接尝试。合法的取值包括“yes”和“no”。默认值为“yes”。
tcp_client_ports这个参数可以是一个数值,也可以是两个由破折号分隔的值(不允许有空格)。它表明客户端端口允许传入的连接。如果没有指定,则允许任何端口。允许取值为1 ~ 65535。例如,要要求客户端使用特权端口,请将此参数指定为1-1023。你还需要在audio -remote.conf文件中设置local_port选项。确保客户发送从特权端口安全功能,以防止不可信用户日志注入攻击。
tcp_client_max_idle该参数表示在auditd发出报警之前,客户端可能空闲的秒数(即根本没有数据)。如果客户端机器出现问题,无法干净地关闭连接,则用于关闭非活动连接。注意,这是一个全局设置,必须比任何单独的客户端heartbeat_timeout设置高,最好是2倍。默认为零,禁用此检查。
enable_krb5如果设置为“yes”,Kerberos 5将用于身份验证和加密。默认值为no。
krb5_principal这是此服务器的主体。默认值是auditd。有了这个默认值,服务器将查找存储在/etc/audit/audit.中名为auditd/hostname@EXAMPLE.COM的键key进行身份验证,其中hostname是服务器主机的规范名称,通过DNS查找其IP地址返回。
krb5_key_file此客户端主体的密钥位置。注意,密钥文件必须为root用户所有,模式为0400。默认的是/etc/audit/audit.key

2、默认配置释义

[root@s166 audit]# cat /etc/audit/auditd.conf
#
# This file controls the configuration of the audit daemon
#
#记录本地事件
local_events = yes
#日志落盘存储
write_logs = yes
#审计日志存储路径
log_file = /var/log/audit/audit.log
#日志文件属组
log_group = root
#日志文件格式
log_format = RAW
#异步增量方式刷新到磁盘
flush = INCREMENTAL_ASYNC
#记录数量达到此数值时写入磁盘,与flush结合使用
freq = 50
#单个日志文件大小,单位为M,超过8M进行日志分割
max_log_file = 8
#日志文件保存数量,超过的会被清除
num_logs = 5
#守护进程优先级
priority_boost = 4
#队列满是,丢弃事件记录
disp_qos = lossy
#守护进程启动的程序
dispatcher = /sbin/audispd
#审计事件不插入主机名
name_format = NONE
#管理员可以指定主机名,默认注释,未启用
##name = mydomain
#日志文件超过大小时的动作,ROTATE表示将日志轮转分割
max_log_file_action = ROTATE
#系统磁盘空间剩余大小时执行动作,但是为M
space_left = 75
#系统磁盘空间不足时执行的操作,发送SYSLOG告警
space_left_action = SYSLOG
#是否发送邮件,取值yes或者no
verify_email = yes
#发送邮箱的账户,默认root@localhost,如果配置的是网络邮箱,/usr/lib/sendmail确保正确配置
action_mail_acct = root
#磁盘空间剩余大小,剩余不足50M时停止审计记录写入
admin_space_left = 50
admin_space_left_action = SUSPEND
#磁盘满或者磁盘错误的时候停止写入审计记录
disk_full_action = SUSPEND
disk_error_action = SUSPEND
#如下是审计客户端连接相关参数
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no

三、auditd相关命令与配置文件

1、auditd相关命令

  • auditctl : 即时控制审计守护进程的行为的工具,如添加规则等。
  • **auditd :**audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到 /var/log/audit/audit.log。
  • aureport : 查看和生成审计报告的工具。
  • ausearch : 查找审计事件的工具
  • auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中。
  • autrace : 一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。
  • aulast: 与last类似,但使用审计框架安装
  • aulastlog: 与lastlog类似,也使用审计框架
  • ausyscall: 映射syscall ID和名称
  • auvirt: 显示关于虚拟机的审计信息

2、auditd相关配置文件

  • /etc/audit/auditd.conf : auditd工具的配置文件
  • /etc/audit/rules.d/audit.rules:包含审核规则的文件,如果我们需要修改审计范围,直接编辑该文件,并使用auditctl -R 命令重载审计规则配置文件
  • /etc/audit/audit.rules : 记录审计规则的文件,该配置文件是根据etc/audit/rules.d/audit.rules下的配置文件自动生成

四、auditd使用举例

1、查看当前审计规则

[root@s166 audit]# auditctl -l
No rules

2、配置一条审计规则

[root@s166 audit]# echo “-w /etc/hosts -p wa -k hosts_change” >> rules.d/audit.rules

3、重载配置

[root@s166 audit]# auditctl -R /etc/audit/rules.d/audit.rules

4、再次查看审计规则

[root@s166 audit]# auditctl -l
-w /etc/hosts -p wa -k hosts_change

5、修改/etc/hosts文件

[root@s166 audit]# vim /etc/hosts

192.168.0.186 s186

6、查看审计记录

[root@s166 audit]# ausearch --start today -k “hosts_change”
在这里插入图片描述

五、auditd服务管理

  auditd服务默认开机自启动,配置了禁止手动启停服务,如果我们需要启动或者停止服务,需要修改/usr/lib/systemd/system/auditd.service中的RefuseManualStop=no,否则服务启停服务命令,修改完成后执行systemctl daemon-reload ,然后就可以手动启停管理服务了。实际上我们也可以不停止服务的情况下停止审计,只需要执行auditd -s disable命令就可以停止审计记录。

  • 查看auditd服务状态:systemctl status auditd
  • 配置服务开机自启动:systemctl enable auditd
  • 取消服务开机自启动:systemctl disable auditd
  • 停止auditd服务:systemctl stop auditd
  • 启动auditd服务:systemctl start auditd
  • 重启auditd服务:systemctl restart auditd
  • 重载审计规则配置:auditctl -R /etc/audit/rules.d/audit.rules
  • 停止审计:auditd -s disable
  • 开启审计:auditd -s enable

六、auditctl命令简介

  audit 我们可以使用auditctl临时配置规则,服务重启失效,如果需要配置永久生效,我们需要将规则写入到配置文件中。auditd审计规则分成三个部分,

  • 控制规则:这些规则用于更改审计系统本身的配置和设置。
  • 文件系统规则:这些是文件或目录监视。 使用这些规则,我们可以审核对特定文件或目录的任何类型的访问。
  • 系统调用规则:这些规则用于监视由任何进程或特定用户进行的系统调用。

1、命令语法

#auditctl [选项] filter,action -S syscall -F condition -k label

2、命令参数说明

参数参数说明
-w path指定要监控的路径
-p指定触发审计的文件/目录的访问权限rwxa,指定的触发条件,r 读取权限,w 写入权限,x 执行权限,a 属性(attr)
-k在审核规则上设置过滤名称,方便后面使用ausearch查找
-D删除所有规则和监控
-W删除指定path的规则和-w对应,参数都要一样才能删除
-b在 Kernel 中设定最大数量的已存在的审核缓冲区
-R读取审计规则配置
-l列表展示审计规则
-s查看审计状态
-v查看命令帮助
-h获取命令帮助
-a添加一条系统调用规则
-d删除一条系统调用规则
-r设置每秒生成信息的速率
-S表示系统调用号或名字
-F表示规则域

3、命令选项说明

项目可选参数说明
filteruser,exit,task,exclude filter详细说明哪个内核规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过滤器: task、exit、user 以及 exclude
actionalways, never是否审核事件(always 表示是)(never 表示否)
syscallall, 2, open 等所有的系统调用都可以在/usr/include/asm/unistd_64.h 文件中找到。许多系统调用都能形成一个规则
conditioneuid=0, arch=b64详细说明其他选项,进一步修改规则来与以特定架构、组 ID、进程 ID 和其他内容为基础的事件相匹配
label任意文字标记审核事件并检索日志

4、命令使用示例

  • 添加一条指定路径规则

[root@s166 audit]# auditctl -w /mnt/testfile -p wa -k config-change
[root@s166 audit]# auditctl -l
-w /etc/hosts -p wa -k hosts_change
-w /mnt/testfile -p wa -k config-change

  • 删除一条指定路径规则

[root@s166 audit]# auditctl -W /mnt/testfile -p wa -k config-change
[root@s166 audit]# auditctl -l
-w /etc/hosts -p wa -k hosts_change

  • 删除所有规则

[root@s166 audit]# auditctl -D
No rules
[root@s166 audit]# auditctl -l
No rules

  • 查看规则

[root@s166 audit]# auditctl -l
No rules

七、ausearch命令简介

  使用 ausearch ,您可以过滤和搜索事件类型。 它还可以通过将数值转换为更加直观的值(如系统调用或用户名)来解释事件。以根用户身份执行 ausearch 命令,当显示结果时,每个记录用 4 条虚线组成的一行隔开,每个记录前均显示时间标记。

1、常用参数说明

参数参数说明
-f,–file <文件名>根据文件名搜索
-c,–comm根据命令行名称搜索
-ui,–uid<用户id> 根据用户id搜索
-p,–pid<进程id> 根据进程id搜索
-k,–key根据key字段搜索
-te,–end[结束日期] [结束时间] 搜索的结束日期和时间
-ts,–start[开始日期] [开始时间] 开始数据和搜索时间
-m指定消息类型

2、命令使用示例

  • 查询所有事件

[root@s166 audit]# ausearch -m all

  • 查询指定时间段的日志

[root@s166 audit]# ausearch --start today --end “now”

  • 查询指定用户日志

[root@s166 audit]# ausearch -ua kingbase

  • 根据文件路径查找日志

[root@s166 audit]# ausearch -f /etc/hosts

  • 根据系统调用查询日志

[root@s166 audit]# ausearch -sc open

  • 根据过滤关键字查询日志

[root@s166 audit]# ausearch -k “hosts_change”

  • 搜索系统登录失败日志

[root@s166 audit]# ausearch --message USER_LOGIN --success no --interpret

  • 搜索所有的账户,群组,角色变更

[root@s166 audit]# ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i

  • 搜寻从制定时间段的失败的系统调用

[root@s166 audit]# ausearch --start “2023年10月22日” --end “now” -m SYSCALL -sv no -i

八、aureport命令简介

  要生成审计消息的报表,可使用 aureport 命令。如果执行 aureport 时没有使用任何选项,则会显示如汇总报表。

1、常用参数说明

参数参数说明
-a、 --avcavc报告
-au,–auth身份验证报告
–comm命令运行报告
-c、 --config配置更改报告
-cr,–crypto加密报告
-e、 --event事件报告
-f、 --file文件名报告
–failed报表中只有失败的事件
-h、 --主机远程主机名报告
–help帮助
-i、 --interpret解释模式
-if,–input<input File name>使用此文件作为输入
–input logs即使stdin是管道,也要使用日志
–integrity完整性事件报告
-l、 --login登录报告
-k、 --key密钥报告
-m、 --mods修改帐户报告
-ma,–mac强制访问控制(mac)报告
-n、 --异常anomaly报告
-nc,–no config不包括配置事件
–node<node name>仅来自特定节点的事件
-p、 --pidpid报告
-r、 --响应对异常报告的响应
-s、 --syscall系统调用报告
–success报表中只有成功事件
–summary报表中主对象的排序汇总
-t、 --log日志时间范围报告
-te,–end[结束日期][结束时间]报表的结束日期和时间
-tm,–terminalterminal名称报告
-ts,–开始[开始日期][开始时间]开始数据和报告时间
–tty关于tty击键的报告
-u、 --user用户名报告
-v、 --版本版本
–virt虚拟化报告
-x、 --可执行文件可执行名称报告

2、命令使用示例

  • 生成所有报告

[root@s166 audit]# aureport
在这里插入图片描述

  • 生成文件相关的报告

[root@s166 audit]# aureport -f
在这里插入图片描述

  • 生成用户相关的报告

[root@s166 audit]# aureport -u

  • 生成配置变更报告

[root@s166 audit]# aureport -c

  • 生成登录记录报告

[root@s166 audit]# aureport -l

  • 生成指定时间段的报告

[root@s166 audit]# aureport -ts “8:00:00” -te “now” -l -i

Login Report
============================================
# date time auid host term exe success event
============================================
\1. 2023年10月25日 11:01:08 root 192.168.0.186 ssh /usr/sbin/sshd no 1413

  • 生成所有用户失败事件的总结报告

[root@s166 audit]# aureport -u --failed --summary -i

Failed User Summary Report
===========================
total auid
===========================
34 root
20 unset

  • 生成系统调用事件报告

[root@s166 audit]# aureport -s -i --summary

Syscall Summary Report
==========================
total syscall
==========================
161 setsockopt
57 execve
30 init_module
27 unshare
5 ioctl
4 open
2 write
2 rename
2 chmod
2 setxattr
1 fchmodat
1 unlinkat

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

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

相关文章

全新爱蜗影视优码双端影视源码v9.1/影视视频APP源码+支持代理/在线支付+支持对应苹果CMS

源码简介&#xff1a; 这个是最新爱蜗影视优码双端影视源码&#xff0c;作为实用方便的影视视频APP源码&#xff0c;它不仅支持代理/在线支付&#xff0c;而且也支持对应苹果CMS。 爱蜗影视优码双端影视支持对应苹果CMS支持代理在线支付 带图文教程&#xff0c;全新美化多功能…

深入理解OS--数值编码

信息的表示和处理 寻址和字节顺序 位于0x100处&#xff0c;int类型值0x01234567在大端和小端下的存储。 字符串的存储不受字节序影响。 移位 1.对左移&#xff0c;右边统一补0 2.对右移&#xff0c;分为算术右移&#xff0c;逻辑右移 算术右移下&#xff0c;左边补原最高有效…

jsoup登录日志平台后调企业微信机器人自动发送错误日志告警

一、需求&#xff1a;错误日志Top10告警发送 二、需求分解 jsoup实现登录&#xff0c;获取到cookie和token等用户鉴权信息获取接口相应的key值调用日志平台错误日志Top榜接口&#xff0c;查询到结果集调用企业微信机器人发送消息接口加上定时任务&#xff0c;可以实现定时发送…

【Unity3D】MAX聚合广告SDK——Pangle广告接入失败总结

Pangle, App Monetization Simplified 注册 登录 创建应用 创建广告单元 将其应用ID和广告ID关联到MAX广告。 下载Pangle Unity Plugin包&#xff0c;新建一个空工程&#xff08;很重要&#xff09; Unity版本2019.4.0f1 gradle plugin 4.2.0 gradle版本6.7.1 build_tools 34.…

SpringBoot : ch08 自动配置原理

前言 在现代的Java开发中&#xff0c;Spring Boot已经成为了一个备受欢迎的框架。它以其简化开发流程、提高效率和强大的功能而闻名&#xff0c;使得开发人员能够更加专注于业务逻辑的实现而不必过多地关注配置问题。 然而&#xff0c;你是否曾经好奇过Spring Boot是如何做到…

7000字+24张图带你彻底弄懂线程池

大家好&#xff0c;我是三友。今天跟大家聊一聊无论是在工作中常用还是在面试中常问的线程池&#xff0c;通过画图的方式来彻底弄懂线程池的工作原理&#xff0c;以及在实际项目中该如何自定义适合业务的线程池。 一、什么是线程池 线程池其实是一种池化的技术的实现&#xff0…

控制台gbk乱码

引用IntelliJ IDEA中 统一设置编码为utf-8或GBK-CSDN博客 特别注意file coding 的文件path和java的编码格式 配置

9.增删改操作

目录 一、插入操作 1、为表的所有字段插入数据 2、为表的指定字段插入数据 3、同时插入多条记录 4、将查询结果插入表中&#xff1a; 二、更新操作 三、删除操作 四、练习题 一、插入操作 在使用数据库之前&#xff0c;数据库中必须要有数据&#xff0c;MYSQL中使INSE…

ESP32-Web-Server编程-HTML 基础

ESP32-Web-Server编程-HTML 基础 概述 HTML(HyperText Markup Language) 是用来描述网页的一种语言。其相关内容存储在前端代码的 .html 文件中。 当浏览器向 web 服务器请求网页时&#xff0c;一个 HTML 文件被发送给浏览器&#xff0c;浏览器解释该文件的内容&#xff0c;…

【重磅】:Spring Initializer 已经不支持Java8,也就是SpringBoot2.x项目初始化

Spring Initializer 已经不支持Java8 问题描述解决方案升级java版本更换IDEA内置的Spring Initializer中 Server URL的镜像地址 问题描述 我们可以看到在IDEA内置的Spring Initializer中 Java版本选择模块已经不支持1.8了&#xff0c;同样的&#xff0c;官网也不再支持了 解决…

YOLOv8 onnx 文件推理多线程加速视频流

运行环境&#xff1a; MacOS&#xff1a;14.0Python 3.9Pytorch2.1onnx 运行时 模型文件&#xff1a; https://wwxd.lanzouu.com/iBqiA1g49pbc 密码:f40v 下载 best.apk后将后缀名修改为 onnx 即可模型在英伟达 T4GPU 使用 coco128 训练了 200 轮如遇下载不了可私信获取 代码…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程&#xff0c;及过程报错的解决方法&#xff0c;已经有很多关于Ipopt安装的博客&#xff0c;但经过我的测试&#xff0c;很多都失效了&#xff0c;经过探索&#xff0c;找到可流畅的安装Ipopt的方法&#xff0c;总结成本篇博客。 …

《尚品甄选》:后台系统——权限管理之菜单管理,递归实现树形结构查询(debug一遍)

文章目录 一、表结构设计二、菜单管理接口2.1 查询菜单2.2 添加菜单2.3 修改菜单2.4 删除菜单 三、分配菜单3.1 查询菜单3.2 保存菜单(批量插入) 四、动态菜单五、解决bug 一、表结构设计 菜单管理就是对系统的首页中的左侧菜单进行维护。 一个用户可以担任多个角色&#xff…

解密人工智能:线性回归

导言 人工智能&#xff08;AI&#xff09;已经成为当今科技领域的热门话题&#xff0c;其应用领域涵盖了各个行业。线性回归作为人工智能中的一种关键统计学方法&#xff0c;被广泛应用于预测和决策支持系统中。本文将为您详细介绍线性回归在人工智能中的应用原理与方法&#x…

将用户的session改为分布式共享session

将用户的session改为分布式session 分布式session理解 使用分布式session的原因&#xff1a; 后台服务器是分布式的&#xff08;比如要负载均衡&#xff09;&#xff0c;在A服务器请求的的信息&#xff08;如用户登录信息&#xff09;存在A的session中&#xff0c;B服务器并不…

代码随想录算法训练营 ---第四十八天

第一题&#xff1a; 简介&#xff1a; 注&#xff1a;本题简介是我的思路&#xff0c;题解思路看下方。 动态规划五部曲&#xff1a; 1.确定dp数组的含义 //dp[i]表示 偷到第i家能偷到的最大金额 for(int i2;i<nums.size();i){if(i-3>0)dp[i] max(dp[i-2],dp[i-3])nu…

vue中的keep-alive详解与应用场景

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-keep-alive 目录 一、Keep-alive 是什么 二、使用场景 三、原理分析 四、案例实现 activa…

NB-IoT BC260Y Open CPU SDK④开发环境搭建

NB-IoT BC260Y Open CPU SDK④开发环境搭建 1、SDK包的介绍2、编程工具3、程序框架1、SDK包的介绍 (1)、SDK包的下载: 链接: (2)、文件目录介绍 文件名描述device启动文件、底层配置文档等doc存放 QuecOpen 项目相关的说明文档osFreeRTOS 相关代码out输出编译 App 和调…

06-学成在线添加课程,包含课程基本信息,营销信息,课程计划信息,师资信息

添加课程 界面原型 第一步: 用户进入课程查询列表,点击添加课程按钮,选择课程类型是直播还是录播,课程类型不同那么授课方式也不同 添加的课程和教学机构是一对一的关系 第二步: 用户选完课程形式后,点击下一步填写课程的基本信息和营销信息(两张表) 用户只要填完课程信息就…