Linux系统安全及应用
目录
一、系统安全的加固
1、账号安全的基本措施
1.1 将用户设置为无法登录
1.2 锁定长期不使用的账号
1.3 删除无用的账号
1.4 锁定账号文件passwd、shadow
2、密码安全控制
2.1 设置密码有效期
2.1.1 适用于新建用户
2.1.2 适用于已有用户
2.2 强制用户下次登录一定修改密码
3、历史命令限制
3.1 临时清除历史指令
3.2 开机后清除
3.3 用户退出后清除
3.4 终端自动注销
3.5 减少记录的命令条数
4、切换用户
4.1 su
4.2 sudo
4.2.1 概述
4.2.2 sudo的特性
4.2.3 提权操作
4.2.4 别名
4.2.5 子目录
二、PAM安全认证
1、概述
2、pam相关文件
3、pam工作原理
4、专用配置文件/etc/pam.d/ 格式
5、PAM模块
5.1 shell模块
5.2 securetty模块
5.3 pam_nologin.so模块
5.4 limit模块
6、ulimit命令
一、系统安全的加固
1、账号安全的基本措施
1.1 将用户设置为无法登录
操作:将用户的Shell设为/sbin/nologin,就能让该用户无法登录
shell——/sbin/nologin比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源
usermod -s /sbin/nologin 用户名 #将非登录用户的shell设为/sbin/nologin

1.2 锁定长期不使用的账号
passwd -l 用户名 #锁定用户账号密码
passwd -u 用户名 #解锁用户账号密码
passwd -S 用户名 #查看用户账号状态

1.3 删除无用的账号
userdel -r 用户名 #删除用户账号

1.4 锁定账号文件passwd、shadow
lsattr /etc/passwd /etc/shadow
#显示 /etc/passwd 和 /etc/shadow 文件的扩展属性,如是否设置了不可更改 (i)、不可删除 (d) 等属性chattr +i /etc/passwd /etc/shadow #锁定配置文件,所有用户不能修改
chattr -i /etc/passwd /etc/shadow #解锁配置文件



2、密码安全控制
2.1 设置密码有效期
2.1.1 适用于新建用户
vim /etc/login.defs #在/etc/login.defs配置文件里设置

2.1.2 适用于已有用户
chage 选项 用户名
| 选项 | 说明 |
|---|---|
| -m | 密码可更改的最小天数,为零时代表任何时候都可以更改密码 |
| -M | 密码保持有效的最大天数 |
| -w | 用户密码到期前,提前收到警告信息的天数 |
| -E | 帐号到期的日期。过了这天,此帐号将不可用 |
| -d | 上一次更改的日期 |
| -i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用 |
| -l | 列出当前的设置。由非特权用户来确定他们的密码或帐号何时过期 |

2.2 强制用户下次登录一定修改密码
chage -d 0 用户名 #强制用户下次登录一定修改密码

3、历史命令限制
3.1 临时清除历史指令
history -c #临时清除历史指令

3.2 开机后清除
vim ~/.bashrc
#将清除历史命令写入配置文件中,该文件的修改只会影响到当前用户,即开机后清除,只对当前用户有效
echo " " >~/.bash_history
#开机之前先运行:将空格重定向至~/.bash_history文件中,即清空

3.3 用户退出后清除
vim ~/.bash_logout
#将清除历史命令写入配置文件中,该文件的修改只会影响到当前用户,即退出该用户后清除,只对当前用户有效
echo " " >~/.bash_history
#开机之前先运行:将空格重定向至~/.bash_history文件中,即清空

3.4 终端自动注销
vim /etc/profile #所有用户生效
export TMOUT=60 #设置超时时间,用户闲置后注销

3.5 减少记录的命令条数
vim /etc/profile #所有用户生效
export HISTSIZE=50
#设置最多只记录50条历史命令,export设置环境变量,HISTSIZE历史命令记录条数

4、切换用户
4.1 su
用于切换用户身份的命令
切换用户的方式:
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
注:管理员用户切换至其他用户无须密码,非管理员用户切换时需要密码

在pam模块中, 主要有pam_ rootok.so和pam_ wheel.so两个模块组合限制用户使用su命令
vim /etc/pam.d/su #打开su的PAM配置文件

注:
- 默认情况下第一行开启、第二行注释:root使用su切换普通用户就不需要输入密码,允许所有用户间使用su命令进行切换
- 两行都注释:允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码
- 开启两行:只有root用户和wheel组内的用户才可以使用su命令,whell组是超级管理员的组
- 第一行注释、第二行开启:表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令,root属于root组
4.2 sudo
4.2.1 概述
sudo命令允许普通用户以超级用户(root)的身份来执行特定的命令。这是一种安全的方式,可以限制普通用户在系统上执行特权操作的能力
4.2.2 sudo的特性
-
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
-
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
-
sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
-
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
4.2.3 提权操作
用户提权操作
①原本mimi用户作为普通用户无法挂载

②在/etc/sudoers里添加mimi用户可以使用挂载光盘的命令操作
visudo:推荐使用,自带语法检查功能


注:
输入的命令要与配置文件里添加的命令一致,否则不能识别
③如果普通用户使用sudo命令时不想进行密码验证,需取消密码验证功能,可在配置文件里加上NOPASSWD:

用户组提权操作
%yun ALL= NOPASSWD:/usr/bin/cat /var/log/m*,!/usr/bin/cat /var/log/m* *
此命令代表yun用户组成员只能同时查看一个文件,而不能同时查看多个文件
其中!代表取反,不能执行此命令
,表示可添加多个命令,中间用逗号隔开


4.2.4 别名
sudo别名有四种类型:
-
User_Alias(用户)
-
Runas_Alias(代表用户)
-
Host_Alias(登录主机)
-
Cmnd_Alias(命令)
别名格式:必须大写字母,数字可以使用但是不能放在开头
Host_Alias MYHOSTS = localhost
User_Alias MYUSERS = dh,mimi
Cmnd_Alias MYCMNDS = /usr/bin/*MYUSERS MYHOSTS=NOPASSWD:MYCMNDS


4.2.5 子目录
可以创建单独的文件来配置sudo命令的行为,这样可以更好地组织和管理sudo的权限设置。每个文件中可以包含针对特定用户或用户组的特权配置,这样就可以更灵活地管理sudo的权限
①在/etc/sudoers.d/目录下,建一个专属于单个用户mimi的配置文件


二、PAM安全认证
1、概述
PAM(Pluggable Authentication Modules,可插拔认证模块)是一种在 Unix-like系统中实现身份验证的框架。PAM 允许系统管理员通过配置不同的模块来定义用户身份验证过程,包括密码验证、指纹识别、智能卡等。这种模块化的方法使得系统管理员可以根据需要定制认证过程而无需修改应用程序本身。
在 Linux 中,PAM 用于处理各种认证任务,包括用户登录、密码更改、账号管理等。PAM 的配置文件通常位于 /etc/pam.d/ 目录下,每个应用程序或服务都有一个对应的 PAM 配置文件。这些文件定义了认证过程中使用的模块以及它们的顺序和参数。
2、pam相关文件
-
包名: pam
rpm -qi pam #查看当前系统pam
*******************************************
rpm -ql pam #查看模块

-
模块文件目录:/lib64/security/*.so
ls /usr/lib64/security/*.so|wc -l
#统计共有多少个模块文件

-
特定模块相关的设置文件:/etc/security/
man 8 模块名 #可以查看模块的帮助信息

-
应用程序调用PAM模块的配置文件
主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注:如/etc/pam.d存在,/etc/pam.conf将失效

3、pam工作原理
①应用程序调用PAM库: 当一个应用程序需要进行身份验证(比如用户登录、密码更改等)时,它会调用PAM库,请求进行认证
②PAM配置文件: PAM 的配置文件通常位于 /etc/pam.d/ 目录下。每个应用程序或服务都有一个对应的 PAM 配置文件。这些配置文件定义了认证过程中使用的模块以及它们的顺序和参数
③PAM模块堆栈: PAM 模块被组织成一个堆栈,应用程序的 PAM 配置文件指定了这个堆栈中模块的顺序。当进行身份验证时,PAM 将按照指定的顺序调用每个模块,并根据模块的返回状态来决定认证的成功或失败
④模块执行: 在堆栈中,每个模块都有特定的任务,比如密码验证、账号检查等。PAM 框架会将相应的用户提供的信息传递给每个模块,模块则根据配置的规则进行相应的认证操作
⑤返回结果: 每个模块执行完成后都会返回一个状态码,指示认证是否成功。PAM 框架会根据这些状态码来决定是否允许用户继续操作
4、专用配置文件/etc/pam.d/ 格式

第一列内容:type(模块类型)
| type:指模块类型,即功能 | |
|---|---|
| Auth | 账号的认证和授权,比如用户登录时,验证你的用户名存不存在 |
| Account | 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录) |
| Password | 用户修改密码时密码复杂度检查机制等功能 |
| Session | 用户会话期间的控制,如:最多打开的文件数,最多的进程数等 |
| -type | 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用 |
PAM框架的基本流程包括四个主要阶段:

①认证管理 (authentication management):接受用户名和密码,进而对该用户的密码进行认证
②账户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等
③密码管理(password management):主要是用来修改用户的密码
④会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果

第二列内容:control(控制位)
PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关键词实现
| control:PAM库该如何处理与该服务相关的PAM模块的成功或失败情况 | |
|---|---|
| required | 一票否决,如果失败,最后一定会失败,但是还会继续执行下面操作验证失败仍然会继续,但返回Fail |
| requssite | 一票否决,如果失败会立即反馈失败信息,并立即结束认证,返回Fail |
| sufficient | 验证成功会立即返回,不再继续,否则忽略结果并继续 |
| optional | 不用于验证,只显示信息 |
| include | 表示在验证过程中调用其他的 PAM 配置文件 |
第三列内容:module-path(PAM模块): 用来指明本模块对应的程序文件的路径名,模块规定了系统的一些程序应该如何有效操作
第四列内容:Arguments: 用来传递给该模块的参数
5、PAM模块
5.1 shell模块
主要功能是检查有效shell,pam_shells.so模块只允许规定的shell类型通过,使在/etc/shells 文件中存在的类型通过

案例:不允许使用/bin/csh的用户本地登录(借用su模块添加相关配置)
①把/bin/csh从/etc/shells文件中删除,再创建一个/bin/csh类型的用户


②在/etc/pam.d/su的配置文件中启用shell的PAM认证模块

③此时/bin/csh类型的用户mimi将无法登录

5.2 securetty模块
默认情况下centos是不允许用户使用telnet协议(密码明文传输,不安全)远程登录的,该模块功能为只允许root用户在/etc/securetty列出的安全终端上登陆
案例:CentOS 7允许root在telnet登陆
①在客户端和服务端都注释安全模块功能

②模拟远程登录
客户端和服务端同样的操作:
yum install -y telnet-server.x86_64 #安装telnet程序
systemctl start telnet.socket #开启telnet服务
systemctl status telnet.socket #查看telnet服务是否开启
systemctl stop firewalld #关闭防火墙

5.3 pam_nologin.so模块
如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆。可运用在维护场景下
要求:默认此模块可以对ssh等登录有效,但不影响su登录
touch /etc/nologin #/etc/nologin文件存在,将导致非root用户不能登陆
echo "系统维护中" > /etc/nologin #设置提示信息
rm -rf /etc/nologin #删除/etc/nologin文件,其他普通用户恢复登录

5.4 limit模块
指 limits.conf 配置文件,它位于 /etc/security/ 目录下。这个文件用于设置系统范围内的用户资源限制,包括硬件资源和服务的限制。这些限制可以影响用户会话的各种方面,如 CPU 使用、内存使用、文件打开数等

| domain | 用户名 |
| @组名 | |
| *表示所有用户和组 | |
| type | hard:硬限制 |
| soft:软限制 | |
| —:软硬一起,相当于硬限制 | |
| item | core :限制核心文件大小(KB) |
| data :最大数据大小(KB) | |
| fsize :最大文件大小(KB) | |
| memlock :最大锁定在内存中的地址空间(KB) | |
| nofile :打开文件描述符的最大数目 | |
| rss :最大常驻集大小(KB) | |
| stack :最大堆栈大小(KB) | |
| cpu :最大cpu时间(MIN) | |
| nproc :最大进程数 | |
| as :地址空间限制(KB) | |
| maxlogins :该用户的最大登录数 | |
| maxsyslogins :系统上的最大登录数 | |
| priority :带锁运行用户进程的优先级 | |
| locks :用户可以持有的最大文件数 | |
| sigpending :挂起信号的最大数量 | |
| msgqueue : POSIX消息队列使用的最大内存(字节) | |
| nice :允许提升的最大优先级(-20~19) | |
| rtprio :最大实时优先级 |
案例:限制用户mimi最多可用打开五个进程



6、ulimit命令
- ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制
- ulimit只影响shell进程及其子进程,用户登出后失效
- 可以在profile中加入ulimit的设置,变相的做到永久生效
- 通过
ulimit命令,系统管理员可以限制用户对系统资源的访问,以提高系统的安全性和稳定性
| 选项 | 说明 |
|---|---|
| -H | 设置硬件资源限制 |
| -S | 设置软件资源限制 |
| -a | 显示当前所有的资源限制 |
| -c size | 设置core文件的最大值.单位:blocks |
| -d size | 设置数据段的最大值.单位:kbytes |
| -f size | 设置创建文件的最大值.单位:blocks |
| -l size | 设置在内存中锁定进程的最大值.单位:kbytes |
| -m size | 设置可以使用的常驻内存的最大值.单位:kbytes |
| -n size | 设置内核可以同时打开的文件描述符的最大值.单位:n |
| -p size | 设置管道缓冲区的最大值.单位:kbytes |
| -s size | 设置堆栈的最大值.单位:kbytes |
| -t size | 设置CPU使用时间的最大上限.单位:seconds |
| -u size | 最大用户进程数 |
| -v size | 设置虚拟内存的最大值.单位:kbytes |
| unlimited | 一个特殊值,用于表示不限制 |
ulimit -a #查看系统的相关资源限制设置

修改tcp最大链接数
ulimit -n 1500 #设置内核最多可以同时打开1500个文件

ab -c2000 -n5000 http://172.16.12.10/ #压测

相关文章:
Linux系统安全及应用
目录 一、系统安全的加固 1、账号安全的基本措施 1.1 将用户设置为无法登录 1.2 锁定长期不使用的账号 1.3 删除无用的账号 1.4 锁定账号文件passwd、shadow 2、密码安全控制 2.1 设置密码有效期 2.1.1 适用于新建用户 2.1.2 适用于已有用户 2.2 强制用户下次登录一…...
初识Web服务器
一、web服务器 1、什么是web服务器? web服务器就是web项目的容器,我们将开发好的web项目部署到web容器中,才能使用网络中的用户通过浏览器进行访问。 一张图带你了解web服务器有啥作用: 在我的电脑上有一个已经做好的项目&#…...
IOS - 手机安装包 ipa 常见几种方式
安装 ipa 包的方法有很多中,可以通过不同的软件安装,本文只列出了常用的几种,做个简单的归纳整理 1、iTunes 安装 数据线连接手机之后,会自动连接iTunes,(第一次连接的时候会提示是否信任此电脑࿰…...
60、resnet50 权值和参数加载
上一节我们将 resnet50 中需要下载的权值,以及每层卷积的参数,都下载并且保存到了 仓库 resnet50_weight 目录,在仓库的这个连接。 在将权值保存好之后,接下来就是要看如何使用这些权值,也就是如何加载。本节就介绍下我们实战过程中,如何加载这些权值。 加载权值 加载权…...
wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法
wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法 #修改数据库yz_options...
数字IC后端实现之快速获取innovus中drv violation的所有net list
在Innovus中place_opt_design和optDesign阶段,我们经常会看到如下所示的log提示信息,核心关键词是“ Reasons for remaining drv violations”。而且告诉我们总共有819条net存在drv violation,且无法被工具优化掉。 Reasons for remaining dr…...
【开源】基于JAVA语言的智能教学资源库系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程档案表3.2.2 课程资源表3.2.3 课程作业表3.2.4 课程评价表 四、系统展示五、核心代…...
数据库定义和操作语句的重要语法
数据库📊的10种语法 数据查询语句 select : 用于从数据库中检索数据。 select column1, column2,.... from table_name where condition; select distinct : 用于从数据库中检索唯一的数据值。 select DISTINCT column1, clumn2,... from table_name; 工作原理…...
计算机组成原理 CPU的功能和基本结构和指令执行过程
文章目录 CPU的功能和基本结构CPU的功能CPU的基本结构 指令执行过程指令周期概念指令执行方案指令数据流取周期数据流析指周期数据流执行周期数据流中断周期数据流 数据通路的功能和基本结构数据通路的功能数据通路的结构单总线 CPU的功能和基本结构 #mermaid-svg-0uHwjZOZh4kS…...
批量归一化:彻底改变深度学习架构
一、介绍 在深度学习的动态领域,批量归一化的引入标志着神经网络训练方法的关键转变。这项创新技术由 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出,已成为现代神经网络架构的基石。它解决了训练深度网络的关键挑战,特别是处理臭名昭著…...
Spring05
一、Spring事务管理入门 1.1、创建数据库和表 创建一个Spring数据库,在Spring数据库中创建tb_account(账户表),并初始化数据。 1.2、编写Service层、Mapper层以及调用层 1.2.1、AccountServiceImpl实现了AccountService接口 1.2.2、Mapper层中的代码 1…...
MvvmToolkit的使用
背景:MvvmLight不更新了,用Toolkit代替 1、首先下载好社区版本的NuGet包 2、ViewModel中需要继承ObservableObject,查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。 3、对于属性的set,可以简写成一行ÿ…...
分布式【一致性Hash算法简介】
一致性Hash是一种特殊的Hash算法,由于其均衡性、持久性的映射特点,被广泛的应用于负载均衡领域,如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案。 一致性Hash算法简介 在了解一致性Hash算法之前,先来讨论一下Ha…...
PHP命令行脚本接收传入参数的三种方式
1.使用$argv or $argc参数接收,会把文件本身计算在内 $argv: 以数组形式接收保存参数 $argc:保存参数个数 <?php echo "接收到{$argc}个参数"; print_r($argv); //执行 //php /usr/local/php/bin/php test.php 接收到1个…...
【STM32】STM32学习笔记-ADC单通道 ADC多通道(22)
00. 目录 文章目录 00. 目录01. ADC简介02. ADC相关API2.1 RCC_ADCCLKConfig2.2 ADC_RegularChannelConfig2.3 ADC_Init2.4 ADC_InitTypeDef2.5 ADC_Cmd2.6 ADC_ResetCalibration2.7 ADC_GetResetCalibrationStatus2.8 ADC_StartCalibration2.9 ADC_GetCalibrationStatus2.10 A…...
1329:【例8.2】细胞 广度优先搜索
1329:【例8.2】细胞 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 一矩形阵列由数字0 到9组成,数字1到9 代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如: 4 10 0234500067 1034560500 2045600671 00000000…...
9款免费网络钓鱼模拟器详解
根据《2023年网络钓鱼状况报告》显示,自2022年第四季度至2023年第三季度,网络钓鱼电子邮件数量激增了1265%。其中,利用ChatGPT等生成式人工智能工具和聊天机器人的形式尤为突出。 除了数量上的激增外,网络钓鱼攻击模式也在不断进…...
linux cpu、memory 、io、网络、文件系统多种类型负荷模拟调测方法工具
目录 一、概述 二、stress介绍和使用 2.1 介绍 2.2 使用 三、stress-ng介绍和使用 3.1 介绍 3.2 使用 3.3 实例 四、sysbench 4.1 介绍 4.2 使用 五、lmbench 5.1 介绍 5.2 使用 一、概述 今天介绍两款cpu负荷调试工具,用来模拟多种类型的负载。主要用来模拟CPU…...
1018:奇数偶数和1028:I love 闰年!和1029:三角形判定
1018:奇数偶数 要求:输入一个整数,判断该数是奇数还是偶数。如果该数是奇数就输出“odd”,偶数就输出“even”(输出不含双引号)。 输入样例:8 输出样例:even 程序流程图:…...
数据密集型应用系统设计--第2章 数据模型与查询语言
一、引言 数据模型可能是开发软件最重要的部分,而且还对如何思考待解决的问题都有深远的影响。 大多数应用程序是通过一层一层叠加数据模型来构建的。每一层都面临的关键问题是:如何将其用下一层来表示? 1.作为一名应用程序开发人员,观测现实…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...

