系统安全及应用
一:账号安全控制
1.1 系统账号清理
1.1.1 将非登陆用户的Shell 设置为 /sbin/nologin (设置为这个解释器,禁止用户登陆)
[root@localhost ~]# usermod -s /sbin/nologin zhangsan #将用户zhangsan 的登录解释器 设置为 /sbin/nologin [root@localhost ~]# echo "123456" | passwd --stdin zhangsan 更改用户 zhangsan 的密码 。 passwd:所有的身份验证令牌已经成功更新。
在登录界面,登录zhangsan 的账号, 发现,输入完 用户账号 和 密码 后, 又会返回到登录界面
1.1.2 锁定上期不使用的账号
usermod -L 用户名 或者 passwd -l 用户名 ##锁定用户
usermod -U 用户名 或者 passwd -u 用户名 ## 解锁用户
passwd -S 用户名 #查看用户状态
[root@localhost ~]# passwd -S zhangsan zhangsan PS 2021-06-25 0 99999 7 -1 (密码已设置,使用 SHA512 算法。) [root@localhost ~]# passwd -l zhangsan #锁定用户zhangsan 锁定用户 zhangsan 的密码 。 passwd: 操作成功 [root@localhost ~]# passwd -S zhangsan #查看用户 zhangsan 的账号状态 zhangsan LK 2021-06-25 0 99999 7 -1 (密码已被锁定。) [root@localhost ~]# usermod -U zhangsan #解锁用户 zhangsan [root@localhost ~]# passwd -S zhangsan zhangsan PS 2021-06-25 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
1.1.3 删除无用 的账号
userdel [-r] 用户名
[root@localhost ~]# userdel -r zhangsan #删除用户zhangsan , 选项 -r 表示连同它的家目录一起删除 [root@localhost ~]# id zhangsan id: zhangsan: no such user
1.1.4 锁定账号文件 /etc/passed /etc/shadow
chattr +i 文件 #锁定文件
chattr -i 文件 #解锁文件
lsattr 文件 #查看文件是否锁定
# 修改用户信息会 涉及 到 /etc/passwd 和 /etc/shadow 两个文件。将这两个文件锁定,将无法 管理用户 ,如 删除/新建用户 , 修改密码等操作
[root@localhost ~]# lsattr /etc/passwd /etc/shadow #查看/etc/passwd 和 /etc/shadow 文件是否已经锁定 ---------------- /etc/passwd ---------------- /etc/shadow [root@localhost ~]# chattr +i /etc/passwd /etc/shadow #将/etc/passwd /etc/shadow 文件锁定 [root@localhost ~]# lsattr /etc/passwd /etc/shadow ----i----------- /etc/passwd ----i----------- /etc/shadow[root@localhost ~]# id zhangsan id: zhangsan: no such user [root@localhost ~]# useradd zhangsan #创建用户失败 useradd:无法打开 /etc/passwd [root@localhost ~]# id test uid=1000(test) gid=1000(test) 组=1000(test),10(wheel) [root@localhost ~]# echo '123456' |passwd --stdin test #修改用户密码失败 更改用户 test 的密码 。 passwd: 鉴定令牌操作错误 [root@localhost ~]# userdel test #删除用户失败 userdel:无法打开 /etc/passwd[root@localhost ~]# chattr -i /etc/passwd /etc/shadow #解除 /etc/passwd 和 /etc/shadow 文件锁定 [root@localhost ~]# lsattr /etc/passwd /etc/shadow ---------------- /etc/passwd ---------------- /etc/shadow [root@localhost ~]# useradd zhangsan #解除锁定后,添加用户成功 [root@localhost ~]# id zhangsan uid=1002(zhangsan) gid=1002(zhangsan) 组=1002(zhangsan)
1.2 密码安全控制
1.2.1 设置密码有效期
(1) 对于未创建的用户。修改 新建用户配置文件 /etc/login.defs , 修改字段 PASS_MAX_DAYS 的值
[root@localhost ~]# vim /etc/login.defs #修改新用户配置文件 PASS_MAX_DAYS 30 #设置密码有效期为 30 天[root@localhost ~]# useradd wangwu #创建信用户 [root@localhost ~]# cat /etc/shadow | grep wangwu wangwu:!!:18803:0:30:7::: # 新用户密码有效期为30#/etc/shadow 的第 5 个字段保存 用户密码最长有效天
(2) 对于已有用户,使用 chage -M 时间 账户 #只有root 用户才可以使用 chage 命令
[root@localhost ~]# cat /etc/shadow | grep test test:密码加密数据:18803:0:99999:7::: #此时,test 用户的密码 有效期 为99999 表示永不过期 [root@localhost ~]# chage -M 30 test #设置test 用户密码有效期为30 天 [root@localhost ~]# cat /etc/shadow | grep test test:密码加密数据:18803:0:30:7::: #成功设置test 用户密码有效期为30 天
1.2.2 要求用户下一次 登录时修改密码
chage -d 0 用户名
[root@localhost ~]# cat /etc/shadow | grep wangwu wangwu:!!:18803:0:30:7::: #表示上一次修改密码时间(从1970.01.01 开始计算), [root@localhost ~]# chage -d 0 wangwu #设置用户wangwu 下一次登录时修改密码 [root@localhost ~]# cat /etc/shadow | grep wangwu wangwu:!!:0:0:30:7::: #0表示下次登录强制修改密码
1.3 历史命令限制
历史命令,可以查看到用户之前输入的命令。
history 可以查看到用户的历史命令。历史命令默认保存1000 条。保存在 用户家目录 的 .bash_history 隐藏文件中
history -c 可以清空历史命令。但是,用户家目录下的 .bash_history 文件中依旧保存着历史命令
!命令字 可以执行最近使用的该命令字开头的命令
! 加编号 可以执行该编号的历史命令
[root@localhost ~]# !ls #调用最近一次以 ls 开头的命令 lsattr /etc/passwd /etc/shadow #这个是最近一次 以 ls 开头的命令,执行这个命令 ---------------- /etc/passwd ---------------- /etc/shadow
[root@localhost opt]# ls
rh
[root@localhost opt]# history #查看历史命令
1 ls
2 cd .
3 rm -rf shadow.txt
4 ls
5 history
[root@localhost opt]# !1 #执行编号为 1 的历史命令
ls
rh
1.3.1 设置历史命令的数目
历史命令的配置 在 全局文件 /etc/profile 中 。有个 字段 HISTSIZE=1000,设置了历史命令的数目
可以修改 HISTSIZE 的值 ,或者 新添加 字段 export HISTSIZE ,并设置数值
[root@localhost opt]# vim /etc/profile #修改全局配置文件 export HISTSIZE=30 #设置历史命令数为30 [root@localhost opt]# source /etc/profile #重新加载文件
1.3.2 设置登录时自动清空历史命令
用户每次登录时,都会加载 家目录下的 .bashrc 文件。用户的历史命令保存在 用户家目录的 .bash_history 文件中
所以,我们可以在 用户家目录下的 .bashrc 文件 中设置命令 来清空 家目录 下的 .bash_history 文件
root@localhost ~]# echo "echo '' >~/.bash_history " >> ~/.bashrc #将 echo '' > ~/.bash_history 追加重定向写入 到 ~/.bashrc 文件中 #echo '' > ~/.bash_history 表示 将空字符 覆盖重定向写入 到 ~/.bash_history 文件中[root@localhost ~]# history1 ifconfig2 ping www.baidu.com3 cd /etc/sysconfig/4 ls5 cd network-scripts/6 ls [root@localhost ~]# init 6 #重启系统 [root@localhost ~]# history #历史命令被清空1 history
1.4 终端自动注销
修改全局配置文件 /etc/profile ,添加 字段 export TMOUT ,并设置数值(单位为秒)
[root@localhost ~]# echo "export TMOUT=600" >> /etc/profile #设置终端闲置600s 自动注销 [root@localhost ~]# source /etc/profile #重新加载文件
1.5 限制使用su 命令切换
将允许使用su 命令的用户加入到 wheel 组中
启用pam_wheel 认证模块 。 编辑 文件 /etc/pam.d/su
[root@localhost ~]# grep "wheel" /etc/group #查看wheel 组有哪些用户 wheel:x:10:test [root@localhost ~]# gpasswd -a zhangsan wheel #将zhangsna 用户加入 wheel 组中 正在将用户“zhangsan”加入到“wheel”组中 [root@localhost ~]# grep "wheel" /etc/group wheel:x:10:test,zhangsan[root@localhost ~]# vim /etc/pam.d/su #编辑 /etc/pam.d/su 文件 6// auth required pam_wheel.so use_uid #将文件 第6 行注释打开, 启用 pam_wheel 认证模块[lisi@localhost ~]$ whoami lisi [lisi@localhost ~]$ su - root #lisi 不在 wheel 组中,所以切换失败 密码: su: 拒绝权限 [lisi@localhost ~]$ [zhangsan@localhost ~]$ whoami zhangsan [zhangsan@localhost ~]$ su - root #zhangsan 在wheel 组中 ,所以 可以切换 密码: 上一次登录:五 6月 25 10:19:00 CST 2021从 192.168.23.1pts/0 上 最后一次失败的登录:五 6月 25 10:46:41 CST 2021pts/0 上 最有一次成功登录后有 1 次失败的登录尝试。 [root@localhost ~]#
su 的操作记录会记录在 安全日志文件 /var/log/secure 中
1.6 配置sudo 授权
sudo 命令可以让普通用户 提权, 执行高权限用户 才可以执行的命令
[zhangsan@localhost opt]$ ls -ld #查看/opt/目录权限,发现只有 root 用户有写(w)的权限 drwxr-xr-x. 3 root root 34 6月 25 10:41 . [zhangsan@localhost opt]$ whoami zhangsan [zhangsan@localhost opt]$ touch abc.txt #因为zhangsan 用户没有写(w)的权限,所以写入失败 touch: 无法创建"abc.txt": 权限不够 [zhangsan@localhost opt]$ sudo touch abc.txt #提权,在执行写入 [sudo] zhangsan 的密码: #输入zhangsan 用户密码 [zhangsan@localhost opt]$ ls abc.txt rh #写入成功
1.6.1配置sudo 授权
vim /etc/sudoers 或者 visudo 编辑sudo 的配置文件 (注,vim /etc/sudoers 保存需要强制保存 :wq!)
格式:
用户 主机名=命令程序列表
用户 主机名=(使用哪个用户的权限) 命令程序列表
[lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.100.100/24 #lisi 用户提权使用ifconfig 命令失败我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点:#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大,责任越大。[sudo] lisi 的密码: 对不起,用户 lisi 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/ifconfig ens33:1 192.168.100.100/24。 [lisi@localhost ~]$ exit 登出[root@localhost ~]# vim /etc/sudoers #修改配置文件 /etc/sudoers 或者 visudo lisi ALL=/usr/sbin/* #允许lisi 用户在所有主机 使用 /usr/sbin/下的所有命令 [root@localhost ~]# su - lisi[lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.100.100/24 #提权使用ifconfig 命令成功 [sudo] lisi 的密码: [lisi@localhost ~]$ ifconfig ens33:1 ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255ether 00:0c:29:e8:7a:50 txqueuelen 1000 (Ethernet)
1.6.2 /etc/sudoers 文件的编辑语法格式
(1)如果主机没有设置过主机名,可以用localhost 表示本机 。有配置过的则用实际的主机名
(2) 可以使用通配符 * ,取反符号 !。
lisi centos=/usr/sbin/*,!/usr/sbin/ifconfig ,表示lisi 用户可以在 主机名为 centos 的主机上提权使用/usr/sbin/ 下的所有命令,除了 /usr/sbin/ifconfig 命令
(3) ALL 代表所有。
ALL ALL=ALL ,表示所有用户在所有主机可以提权使用所有命令
(4) 用% 表示组。
%wheel 表示wheel 组
(5) 可以使用NOPASSWD: 来免去提权时的密码输入
%wheel ALL=NOPASSWD: /usr/sbin/* #wheel 组用户可以在所有主机上提权使用 /usr/sbin/ 下的所有命令,并且不用输入密码
(6) 支持使用关键字设置和调用别名 ,但是 别名必须大写。关键字 User_Alias、Host_Alias, Cmnd_Alias,分别表示 用户,主机,命令列表
User_Alias USERS=zhangsan,lisi #设置别名,USERS表示 用户zhangsan,lisi
Host_Alias HOSTS=localhost,centos #HOSTS 表示 主机名 localhost ,centos
Cmnd_Alias CMNDS=/usr/sbin/ifconfig,/usr/sbin/useradd #CMNDS 表示 命令 /usr/sbin/ifconfig 和 /usr/sbin/useradd
USERS HOSTS=CMNDS #调用别名。
#允许用户zhangsan,lisi ,在本机 和 主机名centos 主机上允许 提权使用命令 /usr/sbin/ifconfig 和命令 /usr/sbin/useradd
1.6.3 查看 sudo -l 查看用户的提权
[zhangsan@localhost ~]$ sudo -l [sudo] zhangsan 的密码: 用户 zhangsan 可以在 localhost 上运行以下命令:(ALL) ALL
1.6.4 查看sudo 操作记录
sudo 的默认日志文件 /var/log/sudo
添加字段 Defaults logfile="/var/log/sudo" ,开启日志
二:系统引导和控制登录
2.1 开关机安全控制
2.1.1 调整BIOS 引导设置
(1) 将第一引导设备设置为当前系统所在硬盘
(2) 禁止从其他设备(光盘,U盘,网络)引导设备
(3)将安全级别设为setup ,并设置管理员密码
2.1.2 GRUB 限制
重启系统时,按 e 直接就可以进入GRUB 菜单。需要进行限制,设置密码
[root@localhost ~]# grub2-mkpasswd-pbkdf2 #设置密码 输入口令: Reenter password: PBKDF2 hash of your password is grub.pbkdf2.略过,这是一长串的密码加密[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.bak [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak #备份这两个文件[root@localhost ~]# vim /etc/grub.d/00_header #编辑文件 cat << EOF set superusers="root" password_pbkdf2 root grub.pbkdf2...... EOF[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统,进入grub 菜单需要输入账户和密码
2.2 终端登录控制
2.2.1 限制root 只在安全终端登录
安全终端配置 /etc/securetty
[root@localhost logs]# vim /etc/securetty #编辑配置文件,将禁止root 登录的终端注释。如注释 tty2,就禁止root在tty1 终端登录 tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 tty9
2.2.1 禁止普通用户登录
建立 /etc/nologin 文件。 建立后,所有的普通用户将无法登录。删除文件后,恢复正常。或者重启系统后,/etc/nologin 文件自动消失
[root@localhost ~]# touch /etc/nologin
三:网络端口扫描
3.1 NMAP 工具扫描
(1) 下载软件包
[root@promote ~]# rpm -qa |grep nmap nmap-6.40-7.el7.x86_64 #如果没有安装此软件包,则下载 nmap-ncat-6.40-19.el7.x86_64[root@promote ~]# yum -y install nmap
(2) 使用nmap 工具
nmap命令常用的选项和扫描类型
-p:指定扫描的端口.
-n :禁用反向DNS解析(以加快扫描速度)。
-sS: TCP的SYN扫描(半开扫描) ,只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sT : TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型) ,用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并末开放。
-sF: TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性
-sU: UDP扫描,探测目标主机提供哪些UDP服务, UDP扫描的速度会比较慢
-sP: ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描
-P0 :跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描
[root@promote ~]# nmap -p 80 192.168.23.0/24 #查看192.168.23.0 网段,开发80 端口的有哪些Starting Nmap 6.40 ( http://nmap.org ) at 2021-06-26 16:59 CST Nmap scan report for promote.ldns.rate.local (192.168.23.1) #主机iP 地址 Host is up (0.00015s latency). PORT STATE SERVICE 80/tcp filtered http MAC Address: 00:50:56:C0:00:08 (VMware) #主机mac地址[root@promote ~]# nmap -n -sP 192.168.23.0/24 # 快速扫描查看192.168.23.0 网段哪些主机可以ping通Starting Nmap 6.40 ( http://nmap.org ) at 2021-06-26 16:59 CST Nmap scan report for 192.168.23.1 Host is up (0.000069s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.23.2 Host is up (0.000034s latency). MAC Address: 00:50:56:ED:B2:47 (VMware) Nmap scan report for 192.168.23.254 Host is up (0.000043s latency). MAC Address: 00:50:56:EB:E6:DF (VMware) Nmap scan report for 192.168.23.10 Host is up. Nmap done: 256 IP addresses (4 hosts up) scanned in 1.96 seconds[root@promote ~]# nmap -n -sT 192.168.23.10 # 快速扫描目标 主机开放的 tcp 端口Starting Nmap 6.40 ( http://nmap.org ) at 2021-06-26 17:00 CST Nmap scan report for 192.168.23.10 Host is up (0.00036s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbindNmap done: 1 IP address (1 host up) scanned in 0.04 seconds
3.2 netstat 命令
netstat命令常用选项:
-a :显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-n :以数字的形式显示相关的主机地址、端口等信息。
-t :查看TCP相关的信息。
-u :显示UDP协议相关的信息。
-p :显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r :显示路由表信息。
-l :显示处于监听状态的网络连接及端口信息。
-i : 显示网卡接口信息
netstat -natp #查看正在运行使用tcp 协议的相关信息
netstat -naup #查看正在运行使用的 udp 协议 相关信息
netstat -na | more # more 查看所有开放的端口信息
netstat -i 或者 netstat -ie #显示网卡接口信息。
总结:
要保护root 账号,限制普通用户。
账户密码的设置应该复杂,英文,数字,大小写,特殊字符等,都应该有,防止暴力破解
管理普通账号,清理长期不使用的,无用的账号,清理锁定陌生账号。
授予权限要谨慎,不要给普通用户超出范围的权限。
清理历史命令,防止泄露数据。如密码等
能够对系统造成威胁的操作,要设置保护,如进入grub 菜单等
只开放必要端口和业务端口,对于非必要端口,不使用端口,统统关闭
相关文章:
系统安全及应用
一:账号安全控制 1.1 系统账号清理 1.1.1 将非登陆用户的Shell 设置为 /sbin/nologin (设置为这个解释器,禁止用户登陆) [rootlocalhost ~]# usermod -s /sbin/nologin zhangsan #将用户zhangsan 的登录解释器 设置为 /sbin/n…...
ubuntu解决普通用户无法进入root
项目场景: 在RK3566上移植Ubuntu20.04之后普通用户无法进入管理员模式 问题描述 在普通用户使用sudo su试图进入管理员模式的时候报错 解决方案: 1.使用 cat /etc/passwd 查看所有用户.最后一行是 若无用户,则使用 sudo useradd -r -m -s /…...
Mac m1,m2,m3芯片使用nvm安装node14报错
使用nvm安装了node 12/16/18都没有问题,到14就报错了。第一次看到这个报错有点懵,查询资料发现是Mac芯片的问题。 Issue上提供了两个方案: 1、为了在arm64的Mac上安装node 14,需要使用Rosseta,可以通过以下命令安装 …...
IDEA工具下载、配置和Tomcat配置
1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载:https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址:https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…...
实战网络安全:渗透测试与防御指南
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在数字化时代,网络安全已成为企业和个人不可忽视的重要课题。网络攻击的复杂性与日俱增,从数据泄露…...
Vue 3 中的 toRef 与 toRefs:使用与案例解析
在 Vue 3 的响应式系统中,toRef 和 toRefs 是两个非常实用的工具函数。它们主要用于将响应式对象的属性转换为单独的 ref,以便在模板或逻辑中更方便地使用。本文将详细介绍 toRef 和 toRefs 的用法,并通过一个老师信息的案例来演示它们的实际…...
如何让Dev-C++支持C++11及以上标准
目录 问题描述解决方案步骤1:打开编译选项 问题描述 在Dev-C中使用C11/17/20新特性(如pop_back()等)时,可能出现编译错误: #include <iostream> #include<string> using namespace std; int main() {str…...
java8-日期时间Api
目录 LocalDate更新时间LocalTimeLocalDateTimeInstantPeriod Duration格式化、解析日期-时间对象时区 java.util.Date java.util.Calendar 不支持时区 线程不安全 月份从0起线程不安全,只有包裹在ThreadLocal中才安全 java.text.DateFormat java.text.SimpleDateFo…...
电脑无法开机,重装系统后没有驱动且驱动安装失败
电脑无法开机,重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了,电脑卡住后,强制关机,再开机后开机马上就关机。尝试无数次开机后失败,进入BIOS界面,发现已经没有Windows系统了。重新安装系统后&…...
Vue.js 传递路由参数和查询参数
Vue.js 传递路由参数和查询参数 在 Vue.js 开发中,Vue Router 提供了灵活的方式来处理路由参数和查询参数,使得组件能够根据不同的路径或查询条件渲染相应的内容。 路由参数 路由参数(也称为路径参数)是 URL 路径的一部分&…...
Java 反射机制介绍
Java学习资料 Java学习资料 Java学习资料 一、引言 在 Java 编程里,反射机制是一项强大且独特的特性。它赋予程序在运行时动态地获取类的信息,并且可以操作类或对象的属性、方法和构造函数等。借助反射机制,程序的灵活性和可扩展性得到显著…...
Final2x--开源AI图片放大工具
Final2x--开源AI图片放大工具 链接:https://pan.xunlei.com/s/VOHSklukQAquUn3GE7eHJXfOA1?pwdr3r3#...
TCP全连接队列
1. 理解 int listen(int sockfd, int backlog) 第二个参数的作用 backlog:表示tcp全连接队列的连接个数1。 如果连接个数等于backlog1,后续连接就会失败,假设tcp连接个数为0,最大连接个数就为1,并且不accept获取连接…...
前端力扣刷题 | 4:hot100之 子串
560. 和为K的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例: 输入:nums [1,1,1], k 2 输出:2 法一:暴力法 var subar…...
【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
字节跳动发布UI-TARS,超越GPT-4o和Claude,能接管电脑完成复杂任务
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
2025课题推荐——USBL和DVL的误差建模与补偿
在海洋探测与研究中,定位技术的准确性至关重要。超短基线(USBL)和多普勒速度计(DVL)是两种广泛应用于水下定位和导航的技术,它们在深海探测、海洋工程和水下机器人等领域发挥着重要作用。然而,这…...
mysql_use_result的概念和使用案例
mysql_use_result 是 MySQL C API 中的一个函数,它用于检索一个结果集,并且不同于 mysql_store_result,它不会立即将整个结果集读入客户端。相反,它会初始化一个结果集,客户端随后可以通过调用 mysql_fetch_row 来逐行…...
微信小程序date picker的一些说明
微信小程序的picker是一个功能强大的组件,它可以是一个普通选择器,也可以是多项选择器,也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…...
FLTK - FLTK1.4.1 - demo - adjuster.exe
文章目录 FLTK - FLTK1.4.1 - demo - adjuster.exe概述笔记根据代码,用fluid重建一个adjuster.fl 备注 - fluid生成的代码作为参考代码好了修改后可用的代码END FLTK - FLTK1.4.1 - demo - adjuster.exe 概述 想过一遍 FLTK1.4.1的demo和测试工程,工程…...
神经网络入门:从感知机到激活函数
什么是神经网络 神经网络(Neural Network) 是一种模拟生物神经系统工作方式的计算模型,是机器学习和深度学习的核心组成部分。它的设计灵感来源于人脑中神经元之间的连接和信息传递方式。神经网络通过模拟这种结构,能够从数据中学…...
第04章 13 管道信息对象分类说明
在VTK(Visualization Toolkit)中,管道信息(Pipeline Information)是一个重要的概念,它允许管道中的不同对象之间传递元数据和执行策略。这些信息对象帮助协调管道中各个组件的操作,确保数据在传…...
AI 发展是否正在放缓?AI 发展将驶向何方?
编者按: 人工智能真的已经遇到发展瓶颈了吗?随着 OpenAI、Google 和 Anthropic 等顶级 AI 公司纷纷表示新模型开发收益在减少,这个问题引发了整个行业的深度思考。 我们今天为大家带来的这篇文章,作者的核心观点是:虽然…...
一个简单的自适应html5导航模板
一个简单的 HTML 导航模板示例,它包含基本的导航栏结构,同时使用了 CSS 进行样式美化,让导航栏看起来更美观。另外,还添加了一些 JavaScript 代码,用于在移动端实现导航菜单的展开和收起功能。 PHP <!DOCTYPE htm…...
CrypTen——基于pytorch的隐私保护机器学习框架
目录 一、CrypTen概述 二、应用场景 三、CrypTen优势 四、CrypTen技术解析 1.基于pytorch的构建基础 2.核心密码学原语 3.加密模型训练流程 五、传统隐私保护技术与CrypTen的对比 1.传统隐私保护技术介绍 2.CrypTen与传统隐私保护技术的区别 六、CrypTen的环境配置…...
日志模块升级,采用sleuth实现日志链路追踪
文章目录 1.common-log4j2-starter1.目录结构2.pom.xml 引入sleuth3.application.yml 开启Sleuth4.log4j2-spring.xml xiugai 日志输出格式5.TraceIdFilter.java 输出带有TraceId的箭头6.LogAspect.java 更改AOP的范围(因为后面出现了栈溢出问题)7.pom.x…...
84,【8】BUUCTF WEB [羊城杯 2020]Blackcat
进入靶场 音乐硬控我3分钟 回去看源码 <?php // 检查 POST 请求中是否包含 Black-Cat-Sheriff 和 One-ear 字段 // 如果任意一个字段为空,则输出错误信息并终止脚本执行 if(empty($_POST[Black-Cat-Sheriff]) || empty($_POST[One-ear])){die(请提供 Black-C…...
中信证券、安我保险-安我股保联合策略
中信证券2025年资本市场年会在深圳开幕,会议以“站上起跑线”为主题,对2025年全球金融市场、宏观经济与政策、A股市场投资策略、大类资产配置、资本市场新格局下的各经济领域发展趋势进行了全面展望。 据悉,中信证券2025年资本市场年会,现场邀请了百余位顶尖学者、产业专家、企…...
WPF实战案例 | C# WPF实现大学选课系统
WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#) 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…...
如何在Spring Boot项目中高效集成Spring Security
1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...
浅谈Unity中Canvas的三种渲染模式
Overview UGUI通过 Canvas 组件渲染和管理UI元素。Canvas 是 UI 元素的容器,它决定了 UI 元素的渲染方式以及它们在屏幕上的显示效果。Canvas 有三种主要的渲染模式,每种模式有不同的用途和特点。本文将介绍这三种渲染模式 1. Screen Space - Overlay 模…...
组件中的emit
我们从页面向子组件传递参数时,我们可以使用props;我们从页面向子组件传递模板片段时,可以使用slots;当我们需要子组件传递参数给调用它的页面时,我们可以使用emit进行参数传递。 例如: <template>…...
java发送邮件
文章目录 需要的依赖发送邮件准备申请授权码 配置文件测试代码 遇到的问题 需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><…...
网络安全 | F5-Attack Signatures-Set详解
关注:CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集:使用过滤器或手动选择要包含的签名。 基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于,可以专注于定义用户感兴趣的攻击签名…...
左右互搏03-so调用java md5-android开发
依然走动态注册 新建一个java类 package com.koohai.encutils;import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.util.Log;import java.security.MessageDigest; import java.util.List; …...
性能测试丨JVM 性能数据采集
什么是JVM性能数据采集? JVM性能数据采集是指通过一些工具和技术采集与Java虚拟机相关的性能数据。这些数据包括但不限于内存使用、CPU使用、垃圾回收(GC)行为、线程活动等。合理地分析这些数据,可以帮助我们找出系统的瓶颈&…...
MySQL 基础学习(3):排序查询和条件查询
MySQL 查询与条件操作:详解与技巧 在本文中,我们将探讨 MySQL 中的查询操作及其相关功能,包括别名、去重、排序查询和条件查询等,并总结一些最佳实践和注意事项。 一、使用别名(AS) 在查询中,…...
Autogen_core: Quickstart
代码 from dataclasses import dataclass from typing import Callablefrom autogen_core import DefaultTopicId, MessageContext, RoutedAgent, default_subscription, message_handlerdataclass class Message:content: intdefault_subscription class Modifier(RoutedAgen…...
导出地图为pdf文件
有时我们只是想创建能共享的pdf文件,而不是将地图打印出来,arcpy的ExportToPDF()函数可以实现该功能. 操作方法: 1.在arcmap中打开目标地图 2.导入arcpy.mapping模块 import arcpy.mapping as mapping 3.引用当前活动地图文档,把该引用赋值给变量 mxd mapping.MapDocumen…...
从零开始打造智能推荐引擎:技术、实践与未来展望
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
【Leetcode刷题记录】16.最接近的三数之和
16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。📑排序双指针 这道题和三数之和很像,不同点是…...
什么是Pytest Fixtures作用域及如何为Pytest Fixtures设置合适的作用域
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 编写重复代码很可能是你最不乐意做的事情之一。至少对我来说是这样。 在一个全力追…...
vue3 vue2区别
Vue 3 和 Vue 2 之间存在多个方面的区别,以下是一些主要的差异点: 1. 性能改进 Vue 3:在性能上有显著提升,包括更小的包体积、更快的渲染速度和更好的内存管理。Vue 2:性能相对较低,尤其是在大型应用中。…...
硬件学习笔记--36 TTL、RS232、RS485相关介绍
RS232、TTL、RS485是三种不同的电气标准和通信接口,它们各自具有独特的特点和应用场景。以下是这三者的主要区别: 一、定义与标准 TTL(Transistor-Transistor Logic) TTL是一种数字信号电平标准,由TTL器件产生&#x…...
FPGA实现任意角度视频旋转(完结)视频任意角度旋转实现
本文主要介绍如何基于FPGA实现视频的任意角度旋转,关于视频180度实时旋转、90/270度视频无裁剪旋转,请见本专栏前面的文章,旋转效果示意图如下: 为了实时对比旋转效果,采用分屏显示进行处理,左边代表旋转…...
HBase-2.5.10 伪分布式环境搭建【Mac】
文章目录 前言一、搭建单节点Zookeeper1. 解压zookeeper2. 配置环境变量3. 修改配置文件4. 启动zk 二、搭建伪分布式Hbase1. 解压hbase2. 配置环境变量3. 修改配置4. 启动HBase 前言 搭建hbase伪分布式环境 提示:以下是本篇文章正文内容,下面案例仅供参…...
我的2024年年度总结
序言 在前不久(应该是上周)的博客之星入围赛中铩羽而归了。虽然心中颇为不甘,觉得这一年兢兢业业,每天都在发文章,不应该是这样的结果(连前300名都进不了)。但人不能总抱怨,总要向前…...
erase() 【删数函数】的使用
**2025 - 01 - 25 - 第 48 篇 【函数的使用】 作者(Author) 文章目录 earse() - 删除函数一. vector中的 erase1 移除单个元素2 移除一段元素 二. map 中的erase1 通过键移除元素2 通过迭代器移除元素 earse() - 删除函数 一. vector中的 erase vector 是一个动态数组&#x…...
STM32项目分享:智能宠物喂食系统(升级版)
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能宠物喂食系统(升级版) (资…...
逻辑复制parallel并发参数测试
逻辑复制parallel并发参数测试 一、测试结果、测试环境描述 1.1、测试结果 cpu表中有1000万条数据,大小为1652MB,当更新的数据量多于10万条的时候有明显变化,多余30万条的时候相差2倍。 更新的数据量较多时,逻辑复制使用并发参数相比于使用…...