安全狗安装配置实战:服务器主机安全防护与暴力破解拦截
前阵子有朋友的服务器被挂上了挖矿程序CPU直接飙到100%一查SSH日志几千条暴力破解记录。折腾了一晚上清理完第二天又被打进来最后给他装了个安全狗才算安稳了几天。这种经历做运维的应该不陌生——明文端口暴露在公网上光靠系统和云平台那点默认安全机制远远不够。安全狗是一款国内常见的主机安全防护软件主要面向服务器场景提供Web应用防火墙、暴力破解拦截、网页防篡改、WebShell查杀、恶意进程监控这些能力。和云平台自带的防火墙不是一个维度它装在服务器操作系统这一层能直接监控系统行为、拦HTTP请求、查文件落地。这篇文章就从实际操作角度把安装安全狗的全过程、装完之后的配置要点、以及我在生产环境里踩过的一些坑完整梳理一遍适合刚接手服务器运维的同事也适合那些装了安全狗但没发挥出它全部能力的同学。1. 装之前先把需求搞明白安全狗到底帮你挡什么1.1 服务器日常面临的威胁不只有DDoS很多人一提到服务器安全第一反应就是DDoS高仿、CDN清洗。但实际上平时遇到最多的根本不是这类大流量攻击而是一些看起来不那么刺激、却天天都在发生的场景SSH、RDP、数据库端口被暴力破解弱口令分分钟被扫出来Web应用存在SQL注入、XSS、文件上传漏洞被塞了一句话木马网页被篡改首页挂马、跳转菠菜站点挖矿木马定时任务、可疑进程、异常外联这些攻击的共性在于它们都会直接或间接地在服务器上产生动作比如修改文件、启动进程、读写系统目录、修改计划任务。而安全狗的核心逻辑就是监控这些系统层行为再加上一层Web请求过滤把攻击拦截在“造成后果”之前。1.2 主机安全防护软件的定位与选型思路我用过云锁、安全狗、宝塔防火墙也自己折腾过ModSecurity。如果用一个词概括它们之间的差异最恰当的是“侧重点不同”方案主要拦截方式优势不足云锁系统加固WAF功能全面、UI现代新版本部分高级功能收费安全狗系统防御WAF防篡改免费版功能足、部署快界面年代感强文档分散宝塔防火墙基于OpenResty的Web层防火墙与宝塔面板集成度高仅覆盖Web层不覆盖系统层ModSecurity反向代理层WAF规则可定制性强配置门槛高误报多安全狗最吸引我的地方有三点一是采用“系统层Web层”双重防御不但能在Nginx入口拦请求还能在内核态感知文件变化和进程行为二是免费版就很够用日常防护并不需要开会员三是安装只要几步不像ModSecurity那样需要自己拼一堆规则和依赖。如果你只是在服务器上跑一个静态博客那随便装哪个都行但如果是电商站、API服务、有登录功能的业务系统我还是建议把安全狗这种主机型防护装上它和云平台的安全组形成互补前者是“大门上锁”后者是“室内装监控”。2. 安装前的准备这几件事不做好装了也是白装2.1 系统环境与版本选择安全狗目前提供Windows版和Linux版对应覆盖了主流服务器场景。安装前必须先确认两个信息操作系统类型Windows Server还是Linux发行版CentOS、Ubuntu、Debian、Alibaba Cloud Linux等系统位数32位还是64位以Linux版为例安装包区分了32位和64位下错了包会直接报“invalid magic number”或者“cannot execute binary file”。大多数云服务器现在都是64位提前用一条命令确认uname -m # 输出 x86_64 表示64位输出 i686/i386 表示32位另外Linux版本对内核版本有一定匹配要求。安全狗的驱动模块需要编译进当前运行的内核如果内核太新或者太特殊就可能在编译模块时报错。官网上一般会标明当前版本支持的内核范围装之前看一眼总比装到一半卡住强。Windows版相对省心基本就是一路Next。但要注意安全狗是系统级服务程序安装时要求有管理员权限别用Guest账号或者普通用户去装不然服务起不来或者组件注册不完整。2.2 提前准备的依赖与系统设置Linux环境下安装安全狗最关键的一个前置条件是安装编译工具和内核开发包。因为在安装驱动模块时安装程序会把内核模块源码编译成当前系统内核对应的.ko文件。缺少gcc、make、kernel-devel编译这步就直接失败了。CentOS/RHEL系列执行yum install -y gcc gcc-c make kernel-develUbuntu/Debian系列执行apt-get install -y build-essential linux-headers-$(uname -r)安装期间建议临时把SELinux设为permissive或者disabled否则安全狗的服务进程在受限域里可能无法正常加载模块。修改方式setenforce 0 # 永久关闭视自己的安全策略决定测试环境建议关闭 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config有些同学对关SELinux有顾虑可以理解。如果你不想永久关闭至少安装过程中先临时放开等装完确认功能正常后再自己按需调整SELinux策略即可。Windows系统安装前建议先打完全部补丁尤其是早期Windows Server 2008不补丁容易出现安装中断。另外如果机器之前装过其他安全软件360、腾讯管家之类建议先卸载干净否则内核级驱动容易冲突轻则安装失败重则开机蓝屏。2.3 端口与网络安全组规划安全狗本身的监听端口比较固定但不同版本、不同模块会有差异。一般安装后它会常驻一个管理服务通过本地回环地址通信不做外部开放。如果你使用云平台不需要在安全组里额外放行“安全狗”的端口因为它的拦截逻辑是在服务器内部完成的不是依赖外部引流。要注意的反而是Web服务端口安装时安全狗会自动识别nginx、apache、iis的监听端口。如果业务端口不是常见的80/443比如用了8088之类的高端口要在配置里把这个端口手动加进保护范围否则安全狗都不知道该盯哪个门。3. 完整安装过程以Linux和Windows为例逐步走3.1 Windows版安装实录Windows版安装是图形化操作适合对命令行不太熟的运维。我以Windows Server 2016为例大致流程如下从官网下载最新Windows安装包后缀一般是.exe几十MB左右双击运行因为是内核级安全软件UAC弹窗一定要点“是”选择安装目录默认是C:\Program Files\Safedog不建议改到有中文路径的目录勾选需要安装的组件我一般保留全部实时防护、Web防护、防篡改、主动防御安装过程中会弹防火墙授权提示确保勾选“专用网络”并允许访问安装完成重启服务器或手动启动“安全狗Web Protection Service”装完以后桌面上会多一个安全狗图标打开主界面可以看到防护总览、攻击事件、实时拦截记录等信息。Windows版的优势是鼠标就能配置缺点是占用比Linux版高一点如果你在低配Windows服务器2G内存上跑适当关闭一些非必要的实时监控项。3.2 Linux版安装流程命令实践Linux下安装安全狗走的是命令行整个过程比Windows更直接。以一台CentOS 7.9 Nginx的服务器为例我实际的操作记录是这样的先下载对应架构的安装包到本地wget https://www.safedog.cn/download/software/safedog_linux_64.tar.gz下载完成后解压进到目录里看下文件tar -zxvf safedog_linux_64.tar.gz cd safedog_linux_64 ls -lh目录里一般会有一个install.py脚本或者是setup.sh负责整个安装流程。我遇到的是install.py直接执行python install.py如果提示python命令找不到那说明系统里可能只有python3可以尝试python3 install.py安装脚本运行的过程会比较长期间会做几件事解压程序文件到/usr/local/safedog、安装内核模块、注册系统服务、识别Web服务并配置防护端口。屏幕上会有大量输出看到install success或者Please restart your server基本就结束了。装完以后验证一下状态service safedog status # 或者 systemctl status safedog再确认版本safedog -v一般到这里安全狗的核心服务已经在运行了。为了让服务和机器一起起来还可以顺手设置开机自启chkconfig safedog onUbuntu/Debian系统用systemctl命令管理systemctl enable safedog systemctl start safedog3.3 安装后目录结构与关键文件Linux安装完成后主要文件分布在两个目录程序目录和配置目录。搞清楚这两个目录后面做排查和备份就知道去哪找东西。/usr/local/safedog主程序目录里面存放二进制程序、内核模块、规则库/etc/safedog配置目录存放各个模块的配置文件/usr/local/safedog/log日志目录拦截记录和运行日志都在这里查看日志文件的方式很简单tail -f /usr/local/safedog/log/safedog.log如果需要临时停用某一个防护模块可以直接改配置然后重启服务不用卸载整个软件。我习惯的做法是先把相关配置备份一份再动cp /etc/safedog/conf.ini /etc/safedog/conf.ini.bak4. 装完别急着收工关键配置与防护效果验证4.1 基础初始化绑定域名和受保护端口安全狗安装完成后并不会自动把你所有站点都纳入保护范围。它需要知道“哪些站点是我的、哪些入口是开放的”。首次打开控制台时建议先做这些事第一确认Web服务端口被正确识别。如果你用的是Nginx安全狗会读取Nginx配置把listen端口和server_name提取出来。但如果是通过Docker映射的端口或者Nginx配置里用了变量它可能识别不到需要手动添加。第二把你的业务域名绑定到Web防护里。这样安全狗在做CC攻击识别时才能判断哪些请求是打向你的正常业务。第三开启源IP保护。很多业务系统是服务器之间互相调用的比如API网关调后端、定时任务拉取数据。如果不设置源IP白名单安全狗的CC防护或Web扫描器拦截可能会把这些正常请求当成恶意请求拦下来。4.2 WAF防护等级与URL白名单调整安全狗的Web防火墙默认有低、中、高几个防护等级。刚装完的时候我建议先用中等级别跑几天看看有没有误报稳定后再根据业务情况上调或下调。以我的经验最容易出问题的是后台登录页面和带有大量参数的上传接口。安全狗的Web防护规则对SQL注入、XSS、命令执行这些攻击特征是匹配的但有时业务系统本身的参数里就含有类似攻击特征的字符串比如搜索关键词里带了“select”或者某些API参数是加密的base64串看起来像注入攻击。解决办法是添加URL白名单进入Web防护模块 → 找到URL白名单设置添加后台登录路径如/admin/login.php添加某些不需要WAF过滤的静态资源路径如/static/添加外部回调接口如/api/callback这类接口经常被第三方平台以各种UA访问添加白名单的逻辑是“按路径精确放行”千万别图省事直接关闭WAF或者把它调成低等级那是把安全狗当摆设。4.3 防篡改与文件监控配置网页防篡改是安全狗比较受欢迎的功能。它的工作原理是把你指定的目录标记为保护目录之后任何进程试图修改这些文件安全狗都会拦截并记录。我实际配置的经验对网站根目录开启防篡改保护比如/usr/share/nginx/html或者/var/www/wwwroot对上传目录要单独考虑比如/upload目录最好允许PHP/JPG等文件写入但禁止脚本执行对系统关键文件如/etc/passwd、/etc/crontab开启文件监控但不必做防篡改因为这些文件会被包管理器或运维脚本定期更新配置防篡改时最容易踩的坑是保护了首页目录之后正常发布系统更新代码也失败了提示没有权限。这时候不是安全狗坏了而是你需要临时关闭防篡改开关更新完再打开。4.4 用一个真实攻击测试验证防护效果安装和基础配置完成后我建议做一轮攻击自测确认防护真的生效。注意要在自己服务器上做测试不要跑去打别人的站点。测试方法可以很简单在浏览器里访问你的站点URL尝试在参数后加上?id1 and 11--用Burp Suite或Postman发一个包含scriptalert(1)/script的POST请求在服务器的SSH登录口连续输错几次密码触发暴力破解检测执行完这些操作后回到安全狗控制台看拦截记录如果显示对应的攻击类型和源IP说明防护链路是通的。还有一种更严谨的验证方式是用Metasploit或SQLMap打一个本地测试目标看安全狗能不能拦住。不过这种测试需要你自己准备靶机环境别在生产库上直接跑无人机扫的是别人的机器自己扫自己的环境也要注意边界。5. 常见安装与使用问题排查实录5.1 Linux内核模块编译失败怎么办安装过程中最容易遇见的报错就是内核模块编译失败常见提示有“kernel module build failed”“make: *** 没有规则可以创建目标”之类。原因一般是系统缺少kernel-devel包或者内核版本和安全狗当前版本不兼容。排查步骤# 确认当前内核版本 uname -r # 确认kernel-devel版本是否与内核一致 rpm -qa | grep kernel-devel如果发现kernel-devel没装补装后重新执行安装脚本即可yum install -y kernel-devel-$(uname -r)提示找不到kernel-devel-具体版本时先yum update kernel*更新内核重启后再装。如果重启后依然失败就要考虑是不是安全狗当前版本还没适配这颗太新的内核。我遇到过一台刚升级到新内核版本的机器安全狗官网还没来得及跟进这种情况下要么等新版要么换回旧内核自己不熟悉内核编译的话不要硬来。5.2 与云锁或宝塔防火墙一起装会冲突吗这个问题被问得最多。我的回答是可以不用装那么多个东西。安全狗和云锁都包含内核级文件监控和WAF两个同时常驻轻则重复拦截日志重则内核模块互相打架出现网络异常、进程挂掉。如果你非要保留宝塔防火墙同时又想用安全狗建议这样分配宝塔防火墙管Web请求层安全狗用来管暴力破解、文件篡改、WebShell查杀然后在安全狗的Web防护模块里把相应监听端口关闭或调低等级避免两层WAF重复拦截同一请求。实际上我更推荐的办法是只保留一个。对大多数业务来说安全狗单独一套就覆盖了Web入口和系统内部两个层面比叠加多个免费工具更稳定排查问题也更清晰。5.3 误拦正常请求如何快速放行装了安全狗之后第二天报警一看是自己人访问后台被拦了这是很常见的情况。误拦通常集中在三类请求类型复杂的SQL查询参数、上传量大的接口、以及某些加密的JSON体。快速解决路径先看拦截日志里的具体命中的规则名称是SQL注入还是XSS特征根据规则名称去WAF模块找到对应规则确认这条规则是否适合全局启用临时方案是把请求里的URL加进URL白名单长期方案是调整WAF防护等级或者利用“自定义规则”把带有特定Header的请求放行如果后台登录被拦截最稳妥的做法是把后台路径从默认的/admin改成不常规的路径同时把后台路径放进白名单。安全性和易用性都可以兼顾。5.4 卸载安全狗的正确姿势卸载这事儿看起来简单其实有讲究。如果直接在控制台里点退出、然后删除安装目录很可能会导致内核模块残留影响后续安装其他安全软件。Linux下正常卸载流程# 进入安全狗安装目录 cd /usr/local/safedog # 执行卸载脚本 ./uninstall.py如果安装包被删了也可以直接调用系统服务将安全狗服务停掉再手动移除模块service safedog stop chkconfig --del safedog rm -rf /usr/local/safedog不过手动删除前最好先确认哪些目录是安全狗专属的不要误删到系统其他文件。Windows下卸载就简单了控制面板里的“程序和功能”中找到安全狗正常卸载后重启一次即可。5.5 服务异常、CPU占用高的排查方向安全狗本身是一个常驻服务正常情况下CPU占用几乎可以忽略。但如果观察到safedog或safedogd进程CPU异常首先要考虑是不是它在全盘扫描或者规则更新。排查顺序用top命令查看进程占用确认是不是安全狗在扫盘查看日志是否有大量拦截记录或规则更新记录临时停用非核心防护模块比如文件防篡改或Web扫描再观察CPU如果CPU依然高考虑是不是系统本身中毒了安全狗在拼命拦截导致资源螺旋上升还有一个容易被忽略的如果服务器磁盘写满安全狗的日志也可能占满空间。我建议定期清理/usr/local/safedog/log目录或者配置日志轮转。最后说点实际的安全狗安装这件事看一遍流程觉得很简单真正动手时才会遇到版本不匹配、内核编译失败、和旧软件冲突等一堆小问题。我个人的建议是不要把它当成一个“装完就不管”的工具至少花半小时把Web防护、防篡改、白名单这三块配置一遍再跑几天看日志你会对自己服务器的流量状况有个更清楚的认识。遇到拿不准的情况优先看日志其次才是改配置。日志里记录着攻击者的探路痕迹也记录着你自己的误操作这都是排查问题最直接的线索。服务器安全没有一劳永逸的方案安全狗这类工具能帮你挡住大部分脚本小子和自动扫描但真正的安全意识还得靠日常维护习惯撑起来。

相关新闻

达梦DSC共享存储集群搭建指南:从架构选型到故障演练

达梦DSC共享存储集群搭建指南:从架构选型到故障演练

1. 先弄清DSC的定位:共享存储和主备、读写分离有什么不同1.1 为什么最终选了DSC双节点,而不是继续用数据守护主备在动手搭这套达梦数据库共享存储集群之前,我先把需求捋了一遍:业务侧要求两个数据库节点都能对外提供读写服务&…

2026/10/11 22:18:03 阅读更多 →
基于PyQt5与α-β剪枝的五子棋博弈搜索实战

基于PyQt5与α-β剪枝的五子棋博弈搜索实战

简介:这份资源是面向计算机相关专业学生与开发者的毕业设计级五子棋AI项目,采用Python与PyQt5构建图形界面,核心实现人机博弈,并引入深度优先搜索与α-β剪枝算法提升AI决策效率,适合作为人工智能、游戏开发方向的课程…

2026/10/11 22:18:03 阅读更多 →
微信聊天记录结构化导出:从SQLite提取到HTML/Word/CSV三格式交付

微信聊天记录结构化导出:从SQLite提取到HTML/Word/CSV三格式交付

简介:这是一套面向微信用户与Python开发者的聊天记录分析工具集,解决个人聊天数据长期保存、多格式导出及年度行为洞察的实际需求,适用于数字存档爱好者、数据分析初学者及轻量级微信应用开发者。资源包共238个文件,以94个Python脚…

2026/10/11 22:18:03 阅读更多 →

最新新闻

飞凡R7车规T-BOX拆解:通信链路与天线设计工程分析

飞凡R7车规T-BOX拆解:通信链路与天线设计工程分析

1. 从一块T-BOX说起:为什么值得拆智能网联汽车这几年最明显的变化,不是屏幕变大,而是车与外界"对话"的能力变强了。T-BOX(Telematics Box,远程信息处理终端)就是负责这场对话的核心部件之一。它藏…

2026/10/11 23:04:47 阅读更多 →
Android系统架构详解:分层结构、Binder与App启动流程

Android系统架构详解:分层结构、Binder与App启动流程

很多刚接触 Android 开发的同学,第一次看到官方文档里那张系统架构图的时候,内心基本都是崩溃的:一层套一层,满屏的缩写,每个框单独看都认识,拼在一起却完全不知道它们在干嘛。我自己当年从应用开发转向系统…

2026/10/11 23:04:47 阅读更多 →
SST固态变压器拓扑架构解析:从多级结构到工程实践

SST固态变压器拓扑架构解析:从多级结构到工程实践

1. 从一张拓扑图说起:SST架构到底在解决什么问题第一次接触SST(Solid-State Transformer,固态变压器)系统架构的人,大概率会被那张拓扑图绕晕——前级AC/DC整流、中间级隔离型DC/DC变换、后级DC/AC逆变,每一…

2026/10/11 23:04:47 阅读更多 →
黑屏花屏闪屏?一套通用排查流程,十分钟快速定位显示故障

黑屏花屏闪屏?一套通用排查流程,十分钟快速定位显示故障

干电脑维护这些年,屏幕问题是我碰到最多的咨询:开机黑屏、看视频花屏、玩游戏闪屏……这些问题一出现,很多人第一反应就是"显示器坏了"或者"显卡烧了",然后急着拆机、换件,结果拆了一通发现问题还…

2026/10/11 23:04:47 阅读更多 →
跨平台移植存储适配实战:路径、编码、权限与容量避坑指南

跨平台移植存储适配实战:路径、编码、权限与容量避坑指南

1. 跨平台存储适配为什么成了隐形杀手做过跨平台移植的人都有一个共识:UI适配难,但至少能看见;存储适配的坑,往往要等上线后用户反馈数据丢了才炸出来。我前后参与过三个跨平台项目的移植工作,从桌面端到移动端、从移动…

2026/10/11 23:04:46 阅读更多 →
GitHub热门榜深度解析:从AI基础设施到开发者工具的技术风向

GitHub热门榜深度解析:从AI基础设施到开发者工具的技术风向

每个月的第一个工作日,我都会把 GitHub 热门项目排行榜从头到尾翻一遍。这个习惯从 2018 年坚持到现在,也算半个“榜龄”十年的老观众了。2026 年 9 月的这期榜单很有意思:十年前霸榜的还是一些爬虫脚本和 CSS 框架,现在前排几乎全…

2026/10/11 23:03:46 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →