Linux安全加固手册实战:16页清单落地与避坑指南

发布时间:2026/11/3 19:37:22

Linux安全加固手册实战:16页清单落地与避坑指南 简介面向Linux系统管理员、运维工程师及安全初学者的一份安全加固实践指南聚焦操作系统层面的基线配置与风险收敛帮助读者在服务器上线前后系统性地排查安全隐患。内容围绕安装阶段的安全设置、用户帐号与密码安全策略、密码shadowing机制、密码管理规范以及网络服务安全中的服务过滤、/etc/inetd.conf、R服务、Tcp_wrapper、/etc/hosts.equiv等配置文件逐项展开并延伸至NFS、tftp、Sendmail、finger、UUCP等常见服务的加固要点目录结构清晰便于按模块查阅与对照落地。资源包共1个PDF文件约40KB篇幅精炼适合作为日常巡检与配置核查的速查手册。目前已有1338人学习适合需要快速建立Linux加固知识框架或补齐配置细节的读者参考使用。1. 拿到一份 16 页的 Linux 安全加固手册先别急着照着敲上周帮一个朋友看他那台对外提供测试环境的 CentOS 机器netstat -an一跑512、513、514 三个端口整整齐齐开着/etc/hosts.equiv里还留着一条 。他说这机器“一直这么用没出过事”。这种心态在中小团队里太常见了——Linux 安全加固这件事不出事的时候觉得是玄学出了事才发现连后悔药都没地方买。这份《LINUX安全加固手册.pdf》就是冲着这种场景来的。16 页七个大章节从安装阶段的软件裁剪、用户帐号与密码策略、网络服务过滤、系统设置、文件系统权限一直讲到防火墙和第三方工具。它不是那种讲 SELinux 原理、讲内核参数调优的深水区文档而是一份面向传统 Linux 服务器SysV init 时代、inetd/xinetd 体系的基线检查清单。适合谁适合手上管着几台到几十台 Linux 服务器、需要一份能逐条对照执行的加固 checklist 的运维和开发也适合做等保自查、内网基线梳理时拿来当参照。下面我按“这份手册讲了什么 → 怎么落地成命令 → 哪些地方会翻车”的顺序拆一遍。2. 用户帐号与密码从 login.defs 到 chattr 的完整闭环帐号安全是整份手册里最容易落地、也最容易被跳过的一章。手册第 3 章给了密码策略、shadow 检查、su 限制、系统帐户清理四条线但原文写得比较散我把它整理成一条可以按顺序执行的链路。2.1 密码策略的三个参数落在哪手册要求“口令至少 6 位、包含特殊字符、有有效期”。这三条在系统里对应的是/etc/login.defs和 PAM 两处配置不是改一个文件就完事。# 1. 密码有效期与最短长度编辑 /etc/login.defs PASS_MAX_DAYS 90 # 密码最长使用 90 天 PASS_MIN_DAYS 7 # 两次改密最小间隔防止绕过历史记录 PASS_MIN_LEN 8 # 手册写 6实际建议 8 起步 PASS_WARN_AGE 7 # 到期前 7 天开始提醒 # 2. 复杂度由 PAM 的 pam_cracklib 控制编辑 /etc/pam.d/system-auth password requisite pam_cracklib.so try_first_pass retry3 minlen8 dcredit-1 ucredit-1 lcredit-1 ocredit-1dcredit/ucredit/lcredit/ocredit分别代表数字、大写、小写、特殊字符至少要出现的个数负号表示“至少”。retry3是输错三次就拒绝。这里有个容易忽略的点PASS_MIN_LEN和pam_cracklib的minlen是两套机制前者管passwd命令的底层校验后者管 PAM 认证栈两个都要设只改一个会出现“策略写了但没生效”的假象。2.2 用 awk 揪出空口令帐户手册 3.3 节给了一条很实用的命令用来检查 shadow 文件里密码字段为空的帐户# 检查 /etc/shadow 中第二字段密码哈希为空的帐户 awk -F: length($2)0 {print $1} /etc/shadow # 顺带检查 UID 为 0 的非 root 帐户这是提权后门的典型特征 awk -F: ($30){print $1} /etc/passwd第一条命令的逻辑是以冒号分隔第二字段就是密码哈希length($2)0说明这个帐户没有设密码任何人su过去都不需要口令。第二条更关键——UID 为 0 的帐户在系统眼里就是 root攻击者拿到写/etc/passwd的权限后第一件事往往就是加一个 UID 0 的普通名字帐户。这两条建议做成 cron 每日跑一次输出非空就告警。2.3 限制 suwheel 组的正确打开方式手册 3.4 节要求“只允许特定用户使用 su 成为 root”做法是改/etc/pam.d/su并把人加进 wheel 组。原文提到 Red Hat 7.0 已经预置了注释行直接去掉注释即可这个说法在今天的 RHEL/CentOS 系仍然成立# 编辑 /etc/pam.d/su取消这两行的注释 auth sufficient pam_rootok.so auth required pam_wheel.so use_uid # 把运维帐号加入 wheel 组GID 10 在多数发行版是 wheel usermod -aG wheel deploy # 验证非 wheel 组用户执行 su 应被拒绝 su - root # 预期输出su: Permission deniedpam_rootok.so让 root 自己su不需要再验证pam_wheel.so use_uid则要求调用者必须在 wheel 组里。注意usermod -G10这种写法是覆盖附加组手册原文用的就是这个实操中更稳的是-aG否则会把用户原有的其他附加组冲掉这个坑后面还会提。2.4 清理系统帐户与文件不可变位手册 3.5 节列了一串要删的帐户adm、lp、sync、shutdown、halt、news、uucp、operator、games、gopher、ftp。这里要分清楚——sync、shutdown、halt这些帐户的存在是为了让普通用户能通过 setuid 程序执行关机等操作删之前确认业务不依赖。真正无脑该删的是games、gopher这类。删完之后手册给了一个很硬的手段给关键文件加不可变位。# 加不可变位连 root 都不能直接改必须先 chattr -i chattr i /etc/passwd /etc/shadow /etc/group /etc/gshadow # 验证属性输出里应看到 i 标志 lsattr /etc/passwd /etc/shadow这一步是双刃剑。加了i之后useradd、passwd、usermod全部会失败因为系统写不进/etc/passwd。正确姿势是日常保持i需要加用户时先chattr -i改完再chattr i。我一般会写个小脚本包一层避免有人忘了加回去。3. 网络服务过滤inetd 时代的清单怎么用在今天第 4 章是整份手册篇幅最大的一章覆盖服务过滤、inetd.conf、R 服务、tcp_wrapper、hosts.equiv、NFS、tftp、sendmail、finger、UUCP、httpd、FTP。这一章的时代烙印最重——大量内容围绕inetd.conf和xinetd.d展开而现代发行版早就用 systemd socket 取代了它们。但判断逻辑是通用的只开需要的服务其余全关关不掉的用访问控制兜底。3.1 先摸清本机到底开了什么手册 4.2 节说“使用 netstat -an 查看本机所提供的服务”这条命令今天要升级一下因为netstat在不少新系统上已经默认不装# 查看所有监听端口及对应进程需要 root ss -tulnp # 只看 TCP 监听排除本地回环 ss -tlnp | grep -v 127.0.0.1 # 对照手册 4.1 的危险端口清单做匹配 ss -tulnp | grep -E :(7|11|15|67|69|87|95|111|144|161|177|512|513|514|515|540|2000|2049)\b-tTCP、-uUDP、-l监听态、-n不做域名解析、-p显示进程。最后一条 grep 是把手册 4.1 表格里的端口号抽出来做批量匹配命中任何一个都值得停下来问一句“这个服务真的需要对外吗”。手册特别点名了rpc.ypupdated、rpc.statd、sadmind这类 RPC 服务容易导致 DOS 和远程溢出而它们对应的端口正是 111 和一批高位端口rpcinfo -p可以单独列出来。3.2 R 服务与 hosts.equiv那个 是重灾区手册 4.3 和 4.5 节反复强调一件事预先生成$HOME/.rhosts和/etc/hosts.equiv并设为 0000防止被写入 。这个建议背后的攻击链值得说清楚——rsh/rlogin的信任机制读的就是这两个文件一旦里面有 意味着任何主机上的任何用户都能免密登录本机。攻击者拿到一个低权限 shell 后往这两个文件里写一行 就等于给自己开了个后门。# 检查是否存在危险的信任配置 cat /etc/hosts.equiv 2/dev/null find /home -maxdepth 2 -name .rhosts -exec cat {} \; # 不需要 R 服务时直接锁死这两个文件 touch /etc/hosts.equiv chmod 000 /etc/hosts.equiv chattr i /etc/hosts.equiv # 关闭 rsh/rlogin/rexecsystemd 体系下检查 socket systemctl status rsh.socket rlogin.socket rexec.socket 2/dev/nullchmod 000加chattr i是双保险前者让非 root 读不了后者让 root 也改不了必须先解锁。手册还提到“文件开始字符不应该为-”这是老版本 rlogind 的一个解析缺陷今天基本见不到了但检查脚本里顺手加一条也无妨。3.3 tcp_wrapper被时代淘汰但思路没过时手册 4.4 节花了不小篇幅讲 tcp_wrapper核心是/etc/hosts.allow和/etc/hosts.deny的匹配顺序先查 allow再查 deny都没命中则放行。手册建议hosts.deny写ALL: ALLALL, PARANOID做默认拒绝hosts.allow里逐条放行。# /etc/hosts.deny —— 默认全拒 ALL: ALLALL, PARANOID # /etc/hosts.allow —— 只放行内网网段访问 sshd sshd: 10.0.0.0/255.0.0.0PARANOID的含义是“主机名与 IP 反解不一致就拒绝”能挡掉一部分 DNS 欺骗但代价是反解不规范的客户端会被误杀。需要说明的是tcp_wrapper 只对通过inetd/xinetd拉起的服务生效对 systemd 直接管理的守护进程无效所以在新系统上它更多是个历史参照。真正替代它的是防火墙规则和服务的ListenAddress绑定思路完全一致默认拒绝白名单放行。3.4 NFS 与 tftp两个“能不开就不开”的服务手册 4.8 节对 NFS 的要求很明确路由上过滤 111 和 2049、/etc/exports权限 644 属主 root、用noexec,nodev,nosuid挂载。4.9 节对 tftp 只有一句话——“无论何种情况下都不应该启动这个服务进程”。这句话我完全同意tftp 无认证、UDP 传输、常被用来做网络设备配置分发一旦对外就是活靶子。# 检查 NFS 导出列表确认没有导出给任意主机 showmount -e localhost # /etc/exports 里避免出现通配只导出给具体 IP # /data 10.0.0.15(rw,sync,no_subtree_check,root_squash) # 挂载选项加固编辑 /etc/fstab # /dev/sdb1 /data ext4 defaults,noexec,nodev,nosuid 0 2root_squash把客户端的 root 映射成匿名用户防止远程 root 直接操作导出目录noexec阻止在挂载点上执行二进制nosuid让 setuid 位失效nodev禁止设备文件——这三个选项是挂载任何外部或共享文件系统时的标配。4. 系统设置与文件系统那些改完就忘的开关第 5、6 章讲的是系统层面的收口控制台限制、关闭 ping、隐藏系统信息、securetty、IP 源路由、资源限制、LILO、Ctrl-Alt-Del、日志、init 脚本权限以及文件权限、mount 控制和备份。这两章条目多但每条都很短我挑几个实操价值最高的展开。4.1 关闭 ping 与 IP 源路由sysctl 的正确写法手册 5.2 节用echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all关闭 ping5.6 节禁止 IP 源路径路由。直接写/proc的问题是重启即失效正确做法是落到/etc/sysctl.conf# 追加到 /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all 1 # 忽略所有 ICMP echo即关闭 ping net.ipv4.conf.all.accept_source_route 0 # 禁止接受源路由包 net.ipv4.conf.all.accept_redirects 0 # 禁止接受 ICMP 重定向 net.ipv4.conf.all.log_martians 1 # 记录源地址非法的包 # 立即生效 sysctl -p关闭 ping 这件事要辩证看它能减少被扫描器发现的概率但也让网络排障失去最基础的工具。内网机器可以关对外提供服务的机器建议保留但配合限速否则运维自己先被坑。accept_source_route和accept_redirects则是无脑关正常业务几乎不会用到源路由而 ICMP 重定向是中间人攻击的经典跳板。4.2 securetty 与 Ctrl-Alt-Del物理接触面的收口手册 5.4 节的/etc/securetty控制 root 能从哪些终端登录5.9 节要禁用 Ctrl-Alt-Del 关机。这两条针对的都是“能碰到机器的人”# /etc/securetty 只保留本地虚拟控制台删掉 ttyp*、pts/* 等远程伪终端 # 这样 root 无法直接通过 telnet/ssh 的 pts 登录必须先普通用户登录再 su # 屏蔽 Ctrl-Alt-Del 重启systemd 体系 systemctl mask ctrl-alt-del.target systemctl daemon-reloadmask比disable更彻底它把 target 软链到/dev/null连手动start都不行。老 SysV 体系对应的是改/etc/inittab里ca::ctrlaltdel那一行注释掉即可。这两条在云主机上意义不大你碰不到物理键盘但在托管机房、边缘设备上很实在。4.3 文件权限与 init 脚本被忽视的提权入口手册 5.11 节要求修正/etc/rc.d/init.d下脚本的权限6.1 节讲文件权限。这两条合起来指向一个常见问题启动脚本如果对普通用户可写攻击者改一行就能在下次重启时以 root 执行任意命令。# 检查 init 脚本权限正常应为 755 且属主 root ls -l /etc/rc.d/init.d/ /etc/init.d/ 2/dev/null # 批量修正去掉组和其他用户的写权限 chmod go-w /etc/rc.d/init.d/* /etc/init.d/* 2/dev/null # 全局排查找出所有人可写的文件排除 /tmp /var/tmp /dev find / -xdev -type f -perm -0002 ! -path /tmp/* ! -path /var/tmp/* ! -path /dev/* 2/dev/null-xdev限定不跨文件系统避免扫到挂载的网络盘-perm -0002匹配“其他人可写”。这条 find 跑出来的结果里如果出现/etc下的配置文件基本可以判定是配置事故或者被入侵后留的写入口。5. 避坑与排查照着手册敲之前先看这五条这份手册写于 SysV 和 inetd 主导的年代直接照抄到今天的 systemd 发行版上翻车概率不低。下面五条是我实际踩过或者见别人踩过的。现象执行usermod -G10 admin后该用户原有的 docker、sudo 等附加组全没了。原因-G是覆盖式设置附加组不是追加。手册原文用的就是这个写法在只有 wheel 一个附加组的场景下没问题但现代机器上用户往往身兼数职。 解决一律用usermod -aG wheel admin-a表示 append。改完用id admin确认附加组列表完整。现象给/etc/passwd加了chattr i第二天useradd报 “cannot open /etc/passwd”。原因不可变位对 root 同样生效所有需要写 passwd 的操作都会失败。 解决把“解锁—修改—上锁”包成脚本或者改用chattr a只追加配合审计牺牲一点严格性换可用性。上锁前务必确认没有正在跑的配置管理工具会改这些文件。现象按手册在hosts.deny写了ALL: ALLALL, PARANOID结果部分内网客户端连不上 sshd。原因PARANOID要求客户端 IP 能反解出与正向解析一致的主机名内网 DNS 不完整时大量客户端被误判。 解决内网环境去掉PARANOID改成ALL: ALL做默认拒绝再在hosts.allow里按网段放行。同时确认 sshd 是否真的走了 tcp_wrapper——systemd 拉起的 sshd 默认不经过它写了也白写。现象echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all之后 ping 不通重启后又通了。原因/proc/sys是运行时参数重启丢失。 解决写进/etc/sysctl.conf并sysctl -p。另外注意容器环境里/proc/sys往往是只读挂载改不动是正常的要在宿主机层面配。现象showmount -e显示导出了/但/etc/exports里明明只写了一行具体路径。原因NFS 的导出表可能来自/etc/exports.d/下的额外文件或者被exportfs动态加过。 解决exportfs -v看实际生效的导出/etc/exports权限设 644 属主 root并检查/etc/exports.d/目录内容。手册要求“输出列表不超过 256 字符”这条在今天已不适用但“只导出给可信具体 IP”的原则不变。6. 把 16 页清单变成可重复执行的基线脚本手册第 7 章只有两句话——“使用防火墙”“使用第三方安全工具”信息量最低但它其实点出了这份文档的定位它是一份检查项清单不是一个自动化方案。真正让加固可持续的做法是把前面几章的检查点固化成脚本每次新机器上线、每次变更后跑一遍输出差异而不是靠人肉回忆。我一般会按“只读检查”和“写操作”分开组织。只读检查随便跑写操作必须带确认。下面是一个骨架把手册里最值得自动化的几条串起来#!/bin/bash # baseline_check.sh —— 只读基线检查输出问题项 FAIL0 check() { local desc$1; shift if eval $ /dev/null 21; then echo [FAIL] $desc FAIL$((FAIL1)) else echo [ OK ] $desc fi } # 1. 空口令帐户awk 输出非空即失败 check 存在空口令帐户 test -z $(awk -F: length(\$2)0{print \$1} /etc/shadow) # 2. UID 0 的非 root 帐户 check 存在 UID 0 的非 root 帐户 test -z $(awk -F: (\$30 \$1!\root\){print \$1} /etc/passwd) # 3. hosts.equiv 含 check hosts.equiv 含通配信任 ! grep -qE ^\s*\ /etc/hosts.equiv 2/dev/null # 4. 危险端口监听 check 存在手册列出的危险端口监听 ! ss -tuln | grep -qE :(7|69|111|512|513|514|2049)\b # 5. 全局可写文件排除临时目录 check 存在非临时目录的全局可写文件 test -z $(find / -xdev -type f -perm -0002 ! -path /tmp/* ! -path /var/tmp/* ! -path /dev/* 2/dev/null) echo ---- echo 问题项合计: $FAIL exit $((FAIL 0))这段脚本的关键在check函数的语义设计传入的命令返回 0 表示检查通过所以每条检查都写成“期望为空/期望不存在”的形式比如test -z $(...)。eval是为了让带引号的 awk 表达式能正确展开代价是可读性下降生产环境里更稳妥的是把每条检查写成独立函数。退出码用问题项数量方便接 CI 或配置管理工具的 drift 检测。写操作那部分我的习惯是永远不自动执行chattr i和userdel。前者会让后续所有帐号操作失败后者删错了没法恢复。这两类操作只输出建议命令由人确认后手动跑。手册里那些rpm -e卸载软件的命令同理——pump、apmd、kudzu这些包在现代系统上根本不存在照抄会得到一串 “package not installed”真正该做的是用rpm -qa对照当前系统的实际包列表重新评估。从那以后我每次接手一台新机器第一件事不是装监控也不是配应用而是把这份基线脚本跑一遍把 FAIL 项逐条过一遍再动手。16 页的 PDF 不可能覆盖所有场景但它给了一个足够完整的起点剩下的靠自己的检查脚本补。希望这份拆解能帮到你少走几条我走过的弯路。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/11/3 19:37:22

Linux安全加固手册实战:用户、网络与文件系统配置避坑指南

简介:这份《LINUX安全加固手册》面向系统管理员、运维工程师及信息安全初学者,聚焦Linux主机从安装到网络服务的安全配置实践,帮助读者建立系统化的加固思路。手册以PDF形式呈现,压缩包内共1个文件,体积约40KB&#xf…

2026/11/3 19:37:22

TortoiseGit新手入门:图形化Git操作从安装到提交推送

简介:这份资源是面向 Windows 平台 Git 初学者的 TortoiseGit 图文使用教程,以 docx 文档形式系统梳理了从环境搭建到日常协作的完整流程,帮助不熟悉命令行的用户借助右键菜单快速上手版本控制。压缩包内共 1 个 docx 文件,约 1.1…

2026/11/3 19:37:22

TortoiseGit 使用教程:Windows 右键菜单玩转 Git 操作

简介:这份资源是面向 Windows 平台 Git 初学者的 TortoiseGit 图文使用教程,以 docx 文档形式系统梳理了从环境搭建到日常版本控制的完整流程,帮助不熟悉命令行的用户借助右键菜单快速上手 Git。压缩包内共 1 个 docx 文件,约 1.1…

2026/11/3 20:17:26

基于Django与微信小程序的毕业设计导师双向选择系统

1. 项目概述:基于Django与微信小程序的毕业设计导师双向选择系统这个毕业设计选题瞄准了高校教学管理中的一个实际痛点——每年毕业季,学生与导师之间的双向选择过程往往效率低下、信息不对称。传统方式依赖纸质表格或简单线上表单,学生无法全…

2026/11/3 20:17:26

企业邮件安全:从边界防御到智能动态感知架构

1. 企业邮件安全的现状与挑战过去十年间,我参与过数十家企业邮件系统的安全架构设计与升级。最深刻的体会是:传统的边界防御策略正在失效。上周某金融客户的案例就很典型——他们部署了顶级防火墙、反垃圾邮件网关和沙箱系统,但依然被钓鱼邮件…

2026/11/3 20:17:26

GPT-4与ChatGPT辨析:LLM、Transformer与Token实践

简介:《Developing Apps with GPT-4 and ChatGPT》是一份 O’Reilly 出版的英文电子书 PDF,面向希望把大模型能力落地到实际产品的开发者、技术负责人以及生成式 AI 爱好者,重点讨论如何基于 GPT-4 与 ChatGPT 构建智能聊天机器人、内容生成器…

2026/11/3 20:17:26

规格驱动开发:从提示词到可执行代码的实践

1. 项目概述:当提示词遇见规格化编程三年前我第一次尝试用自然语言生成代码时,还需要在GPT对话框里输入大段注释般的描述。如今,在SpecKit工具链的支持下,我只需输入"创建用户注册API,需要邮箱验证和密码强度校验…

2026/11/3 20:17:26

规格驱动开发:从自然语言到可执行代码的自动化实践

1. 项目概述:当提示词遇见规格化编程三年前我第一次尝试用自然语言生成代码时,面对满屏似是而非的函数和混乱的逻辑结构,不得不花费数小时手动修正。而今天在SpecKit工具链的帮助下,同样的需求通过结构化提示词驱动,生…

2026/11/3 20:12:26

Vibe Coding:提升开发效率的心流编程方法论

1. 什么是Vibe Coding?第一次听到Vibe Coding这个词是在一个开发者社区,当时看到有人分享用这种方式完成了一个人月的工作量。简单来说,Vibe Coding是一种强调开发节奏和沉浸感的编程方法论,核心在于通过特定的工具链和工作流&…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

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

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

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

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

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

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑