SELinux核心机制与排错实战:安全上下文、布尔值和审计日志全解析
SELinux 这个名字很多人一听就觉得头疼。提到 Linux 里的内核级防火墙大家第一反应往往是 iptables、nftables 这类网络层工具但真正在系统内部“盯进程”盯得最死的其实是 SELinux 这套强制访问控制机制。它不是管网络端口的而是管“哪个进程能碰哪些文件、哪些端口、哪些系统能力”的。这篇文章我会从零开始拆解 SELinux 的运行逻辑把模式切换、安全上下文、布尔值、审计日志和排错思路都过一遍适合运维、后端开发和对系统安全有兴趣的读者参考。先说解决什么问题。传统 Linux 权限模型下只要进程持有某个用户的身份就能访问该用户能访问的所有资源一旦应用被攻破入侵者顺着这个身份就能横向摸到一大堆文件。SELinux 的维度是给每个进程和资源都打上标签用策略控制“谁可以碰谁”即使进程是 root没有对应策略也寸步难行。这篇文章不是教科书式的概念堆砌而是我在生产环境里管理 SELinux 的经验总结包含完整的命令、判断思路和几次让我印象深刻的排错记录。1. SELinux到底在管什么从DAC到MAC的权限模型1.1 传统权限DAC的漏洞在哪里Linux 传统的权限管理叫作 DAC自主访问控制。它的核心是“属主、属组、其他用户”加“读、写、执行”这三个权限位配合 root 用户拥有最高权限的设定。这种模型本身没什么问题但有一个痛点是权限判断完全围绕“用户身份”展开。只要某个进程以某用户的身份在运行它就能读走这个用户能读的所有数据。举个典型例子。一个 Web 服务进程以 www-data 用户运行Web 目录下有个上传功能被攻击者利用传了一个可执行的脚本。一旦脚本以 www-data 身份执行它就能读取服务器上所有属主是 www-data 的文件或者通过 sudo 漏洞进一步提权。换句话说DAC 模型下应用一旦沦陷攻击者拿到的权限边界基本就是“运行用户”的边界。这就是 Linux 系统安全里最尴尬的一层大多数管理员把精力放在端口防护、密码策略、权限位上但对“进程之间互相访问”这件事几乎不设防。SELinux 就是来补这一块的。1.2 MAC给每个进程和资源分别“上锁”SELinux 采用的模型叫 MAC强制访问控制。它和 DAC 最大的区别是访问决定不由资源属主自己说了算而是由系统范围内的安全策略统一裁决。举个例子DAC 好比大楼门口有一张门禁卡刷进去了就能在大楼里自由走动MAC 则是大楼里每个房间都有独立门禁即使你进了大厅想进财务室还得看财务室认不认你。在这个模型里所有进程都被分配一个“域”所有文件、端口、设备都被分配一个“类型”。SELinux 的策略里定义了一条条规则什么域可以访问什么类型、执行什么操作。规则不匹配访问就是“默认拒绝”。默认拒绝这个原则极其重要因为它把安全基调从“白名单之外全放行”变成了“白名单之外全部拦截”。很多刚接触 SELinux 的人会问我已经是 root 了为什么还不能读某个文件因为 root 在 DAC 层面确实通杀但在 MAC 层面上root 只是普通主体之一照样要接受策略审查。1.3 安全上下文、域与类型在 SELinux 里文件和进程都会带一个安全上下文格式通常是四段用户user、角色role、类型type、级别level。常见的形如system_u:system_r:httpd_t:s0这种字符串其中最关键的是第三段类型。进程的上下文叫“域”文件的上下文叫“类型”。类型强制Type EnforcementTE是整个 SELinux 策略的骨架。判断规则也很朴素进程域 A 能不能读、写、执行类型为 B 的文件都由策略决定。举个例子类型httpd_t是 Web 服务进程的域类型httpd_sys_content_t是 Web 内容文件的类型。如果策略里没有“httpd_t 可以读 httpd_sys_content_t”这条规律之外的规则那么即使文件权限是 777Web 服务进程也可能读不了。很多新手在文件权限上反复折腾最后发现是 SELinux 拦着不让读原因就在这个模型上。1.4 不同发行版对 SELinux 的支持差异SELinux 并不是所有 Linux 发行版默认都在用。以企业级服务器为主的 RHEL 系发行版默认开启策略类型是 targeted而 Debian 系发行版大多默认不启用甚至在安装时就没有把相关模块装上。这个差异带来两类问题第一从 Debian 系转过来的运维会觉得 SELinux “根本没有存在感”某天在 RHEL 系服务器上部署应用突然遇到一堆 Permission denied第一反应往往不是查 SELinux。第二切换发行版后原本写好的部署脚本会遇到“文件上下文不对”“监听端口被拒”等奇怪问题因为 SELinux 的策略约束在默认情况下就生效了。所以在拿到一台新服务器时我建议第一件事就是确认一下排错底层getenforce看一眼当前是什么模式sestatus看策略状态。了解底层的运行环境后面排查问题和优化都要省力得多。2. 三种运行模式理解Enforcing/Permissive/Disabled2.1 三种模式的区别与适用场景SELinux 的运行模式有三种理解它们是学习管理的第一道门槛模式行为审计日志适用场景Enforcing强制违反策略的操作被直接拦截记录生产环境安全策略完整生效Permissive宽松违反策略的操作不拦截只记录记录调试、排错、灰度切换评估Disabled禁用不加载任何策略不审计不记录几乎不推荐仅用于特殊兼容场景生产环境里绝大多数情况应该保持 Enforcing。Permissive 不是“半开的安全”它更像是一个“只记录不执法”的观察哨业务照常跑但所有潜在违规都会被写进审计日志。你可以在这个模式下一遍遍地看日志确认到底哪些调用是被策略卡住的等摸清楚再切回 Enforcing。Disabled 则彻底把 SELinux 的代码路径关掉。注意这是“不加载策略”不是“策略全部放行”两者有本质区别。要考虑的是从 Disabled 回到 Enforcing 并不轻松因为整个文件系统可能缺少安全上下文需要重新标记这个我下面会具体讲。2.2 查看当前模式与状态在命令行里查看当前模式最简单的是getenforce它会输出 Enforcing、Permissive 或 Disabled。要看得更详细用sestatus它的输出类似SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33这里要注意Current mode是当前系统的实际运行模式而Mode from config file是重启之后会生效的模式。有些人用setenforce 0临时切到 Permissive 后看到Current mode变了以为配置也改了其实重启后会回到配置文件里的值。这个差异在生产环境里容易埋坑。2.3 切换模式临时命令与永久配置临时切换模式用setenforce参数可以直接写数字或者模式名setenforce 0 # 切到 Permissive setenforce 1 # 切回 Enforcing setenforce enforcing # 同上 setenforce permissive # 同 setenforce 0注意setenforce无法把系统从 Enforcing/Permissive 切换到 Disabled也不能从 Disabled 切回 Enforcing因为这涉及内核启动参数和策略装载。想要永久修改需要编辑配置文件/etc/selinux/config部分发行版中/etc/sysconfig/selinux是指向它的软链找到这一行SELINUXenforcing把它改成SELINUXpermissive或SELINUXdisabled保存后重启系统生效。配置文件里还有一行SELINUXTYPEtargeted这是策略类型一般保持targeted即可不要在生产环境随手改成mls因为 MLS 策略的约束粒度更细很多应用没适配会直接跑不起来。2.4 从Disabled切回Enforcing时最容易翻车我遇到过好几次这样的情况有人图省事把 SELinux 配成 disabled跑了几个月后因为安全审计要求必须开启结果重启后系统直接起不来或者 SSH 都登不上。原因是文件系统在 disabled 状态下不会写入安全上下文很多配置文件的类型标签都是错的SELinux 一旦开始 Enforcing就会把敏感的进程和文件全部挡在门外。如果你现在处于 disabled 状态准备切回 Enforcing有两个方式可以安全过渡先改配置为SELINUXpermissive重启后确认系统正常再用setenforce 1临时切到 Enforcing观察一段时间的审计日志。如果想一步到位开启 Enforcing可以在重启前创建/ 根目录下的 autorelabel 标记文件touch /.autorelabel系统启动时会对整个文件系统重新打标签。文件多的话这个过程可能很漫长需要耐心等待不要中途强杀进程。长期运行的服务器上文件数以百万计全盘重新标记少则十几分钟多则数小时。这个时间成本必须在变更计划里预留出来。3. 日常管理核心安全上下文、布尔值与端口3.1 用 -Z 参数查看安全上下文SELinux 的安全上下文不像普通权限位那样直观但好在主流命令都支持-Z参数。比如ls -Z /var/www/html/ ps aux -Z | grep httpd id -Zls -Z查看文件上下文ps -Z查看进程上下文id -Z查看当前用户的 SELinux 身份。输出会是类似system_u:object_r:httpd_sys_content_t:s0的字符串。日常排错时我会同时看进程的域和文件的类型判断它们的组合是否合理。比如 Web 服务进程的上下文是system_u:system_r:httpd_t:s0那它要访问的静态文件类型就应该是httpd_sys_content_t。如果目录被系统标记成了默认的var_t或者更宽松的default_tWeb 服务大概率读不出来。3.2 修改文件上下文chcon、restorecon、semanage fcontext管理文件上下文的核心是两个命令加一个服务chcon、restorecon和semanage fcontext。很多文档把它们混在一起讲但它们的职责完全不同用错了会出乱子。chcon是临时修改某个文件或目录的上下文chcon -t httpd_sys_content_t /data/wwwroot/index.html这种修改写不进策略规则直接改的是文件系统的扩展属性xattr。缺点很明显如果之后你执行restorecon这个临时修改会被覆盖回策略默认值如果文件被重新部署标签也可能跟着丢失。所以chcon适合快速验证某条思路不适合作为长期方案。正确的长期方案是先给路径定义规则再让restorecon去应用semanage fcontext -a -t httpd_sys_content_t /data/wwwroot(/.*)? restorecon -Rv /data/wwwrootsemanage fcontext -a是在策略里添加一条路径与类型的映射规则注意路径用正则写法(/.*)?表示匹配该目录本身和它下面所有子文件。添加完规则后用restorecon将规则落地到文件系统。这样以后即使安全上下文丢了再跑一遍restorecon就能恢复。查看当前所有自定义文件上下文规则用semanage fcontext -l | grep /data3.3 布尔值不改策略也能调整服务能力布尔值Boolean是 SELinux 里非常实用的设计它把策略规则展开成一个个可开关的能力项。比如“是否允许 Web 服务访问网络”“是否允许 Web 服务读写用户主目录”“是否允许 SSH 用户以登录角色进入系统”等等。列出所有布尔值和当前状态getsebool -a semanage boolean -lgetsebool -a输出的格式是httpd_can_network_connect -- off表格信息不如semanage boolean -l丰富。修改布尔值用setseboolsetsebool httpd_can_network_connect on这条命令只对当前运行状态生效。如果要持久化必须加-P参数setsebool -P httpd_can_network_connect on在生产环境我基本只用带-P的写法否则下次重启后开关又回到关闭状态应用可能悄悄从正常变成故障排错时非常痛苦。比较常用的布尔值组合httpd_can_network_connect允许 Web 服务主动向外发起网络连接比如调用外部 API。httpd_enable_homedirs允许 Web 服务读取用户主目录用于个人主页服务。httpd_use_nfs允许 Web 服务访问 NFS 挂载的目录。ssh_sysadm_login允许系统管理员角色通过 SSH 直接登录。3.4 自定义端口的标准配置流程SELinux 对端口也有类型标签。比如 Web 服务默认监听 80 和 443这些端口被标记为http_port_t。如果你把 Web 服务改成监听 8081默认策略里没有这条放行规则服务启动时就会报“无法绑定端口”或者“Permission denied”。最直接的验证方式是看审计日志或者直接用semanage port查看当前端口映射semanage port -l | grep http_port_t然后为自定义端口添加放行记录semanage port -a -t http_port_t -p tcp 8081这个命令的意思是把 TCP 协议的 8081 端口映射到http_port_t类型。添加后服务再绑定端口就不会被 SELinux 拦住了。类似的场景还有 SSH 自定义端口对应ssh_port_t数据库服务对应mysqld_port_t这类标签。记住一个原则能用semanage port解决端口绑定问题就不要用audit2allow生成一个全新的放行模块否则策略面会变大维护成本也更高。4. 排错实战围绕审计日志定位被SELinux拦截的访问4.1 先从现象里分辨是不是 SELinux 的问题SELinux 造成的故障常常伪装成文件权限问题、网络连接问题或服务启动失败。我总结了几类典型现象文件权限明明是 755 或 644但服务进程就是读不了、写不了。服务监听端口换了以后日志里出现 bind 失败但没有端口被占用的迹象。服务之间互相调用通不了nc 或 telnet 测试端口却显示能通。系统日志里频繁出现Permission denied但普通权限位怎么查都正常。遇到这些现象先别急着改文件属主和权限位花一分钟确认 SELinux 状态和审计日志比盲目试错高效得多。可以这样做getenforce ausearch -m AVC -ts recent如果两条命令出的结果能对上号大概率就是 SELinux 的锅。4.2 用ausearch读懂AVC审计记录SELinux 的拦截记录一般由内核审计子系统写入常见通道是/var/log/audit/audit.log。查看最近被拦截的 AVC 记录用ausearch -m AVC -ts recent ausearch -m AVC --start today ausearch -m AVC -c httpd一条典型的拒绝记录是这样的typeAVC msgaudit(1710000000.123:456): avc: denied { read } for pid1234 commhttpd nameindex.html devdm-0 ino5678 scontextsystem_u:system_r:httpd_t:s0 tcontextsystem_u:object_r:default_t:s0 tclassfile permissive0拆开看关键字段avc: denied { read }被拒绝的操作是读取。commhttpd发起操作的进程名。scontext进程的安全上下文这里是httpd_t域。tcontext目标资源的安全上下文这里是default_t类型。tclass目标资源的类别这里是普通文件。permissive0当前是 Enforcing 模式所以操作确实被拦截了如果等于 1说明在 Permissive 模式只记录未拦截。读明白这条记录问题的本质就清楚了Web 服务进程想读一个类型为default_t的文件。这个文件不在 Web 服务可读范围内所以被拒。解决方案自然就是把它改成 Web 内容应有的类型。如果你对字段不熟悉还可以借助audit2why做初步分析它能把 AVC 记录翻译成更易懂的建议。4.3 经典场景Web服务目录迁移后全员403遇到一个很典型的场景。某天我帮一个团队调整部署目录把 Web 根目录从默认位置迁移到/data/wwwroot路径和权限都设置妥当目录里放了测试页面但访问时始终返回 403。第一反应是检查文件权限ls -l /data/wwwroot/index.html显示 644属主也正确。然后用curl本机测试还是 403。查看审计日志ausearch -m AVC -ts recent | grep httpd结果看到tcontextsystem_u:object_r:default_t:s0说明该目录的安全上下文没有匹配 Web 服务可读的类型因为/data/wwwroot是新建目录默认标签是default_t而不是httpd_sys_content_t。解决方式分两步semanage fcontext -a -t httpd_sys_content_t /data/wwwroot(/.*)? restorecon -Rv /data/wwwroot再看ls -Z /data/wwwroot文件类型已经变成httpd_sys_content_t刷新页面正常返回。整个过程如果没有 SELinux 常识我可能会在 Nginx 配置、PHP 权限、SELinux 布尔值之间折腾大半天最后甚至直接关掉 SELinux 收场。4.4 自定义端口与目录都碰到时怎么处理另一个常见组合是目录和端口一起改。比如 Web 服务从 80 改成 8081静态文件从/var/www/html挪到/data/wwwroot。这种情况下需要同时解决两个层面的问题文件上下文目录迁移后配置semanage fcontext并restorecon。端口标签自定义端口用semanage port -a -t http_port_t -p tcp 8081加入白名单。这两个操作都是幂等的反复执行不会破坏已有规则。如果发现semanage fcontext -a已经存在同一条规则会提示冲突可以用-m参数修改已有规则或者先-d删除再添加。4.5 用audit2allow生成自定义模块的边界在极少数情况下某些软件行为非常特殊用布尔值和端口规则都覆盖不到那时候可以考虑audit2allow。它的作用是把审计日志中的拒绝记录直接转换成一个自定义策略模块ausearch -m AVC -ts recent | audit2allow -M mymodulename semodule -i mymodulename.pp执行后涉及到的被拒操作都会被放行。这看起来省事但风险很高生成的模块会把日志里出现的所有拒绝行为都打包放行等于给进程开了一道自定义权限门。我建议只有在完全明白当前拒绝记录对应哪些操作、并且确认这些操作是业务必需的前提下才用这个方案。更稳妥的排错顺序是先看布尔值是否能覆盖再看端口规则再看文件上下文最后才考虑自定义模块。自定义模块一旦装上常年不清理会让 SELinux 策略面逐渐膨胀失去精细化管控的意义。4.6 常见问题速查表现象常见原因推荐排查与处理方式服务读不了新目录的文件文件类型不符合进程域可读范围semanage fcontext添加规则后restorecon服务监听自定义端口失败端口未加入策略端口标签semanage port -a -t 对应标签 -p 协议 端口Web 服务无法请求外部 API网络相关布尔值关闭setsebool -P httpd_can_network_connect on服务之间互相访问被拒布尔值或类型标签不匹配ausearch -m AVC分析后逐项修正关闭 SELinux 后想重新开启但系统异常文件系统上下文缺失配置为 permissive 后重启或touch /.autorelabel全盘重新标记不知道当前是什么模式状态未确认getenforce、sestatus先查清楚再动手5. 经验与建议把 SELinux 管理变成一项常规操作最后分享一点我自己的经验。SELinux 的管理重点其实不在命令本身而在一个稳定的判断流程。我处理权限问题时固定遵循这样的顺序先确认当前模式和策略状态然后查审计日志定位拒绝记录接着从布尔值、端口规则、文件上下文三方面排查最后才考虑生成自定义模块。日常维护中我每次调整服务端口、迁移目录或者修改服务间调用关系时都会同步检查跟 SELinux 相关的配置项把对应的semanage、setsebool操作写进部署脚本里。这样即使换一台新机器重新部署流程也是可重复的不会出现“这台机器能跑、那台机器不能跑”的玄学。还建议在变更窗口期间临时把模式切换到 Permissive 观察一段时间等业务运行稳定后立刻切回 Enforcing并检查期间产生的 AVC 记录看有没有遗漏的异常行为。这个方法可以让线上变更平滑落地又不会让系统长期处于“只记录不拦截”的裸奔状态。对 SELinux 的正确态度不是“好用就打开不好用就关掉”而是理解它之后把它纳入常规运维体系。它确实有学习成本但一旦建立起这套排查思路你会发现它其实是一个很可靠的守护者帮你在应用层权限之下又补上了一道几乎看不见的防线。

相关新闻

Maven依赖下载慢?手把手教你配置国内镜像仓库加速构建

Maven依赖下载慢?手把手教你配置国内镜像仓库加速构建

Maven 拉依赖慢,几乎是每个在本地做 Java 开发的人都会撞上的问题。新拉一个项目,第一次执行mvn clean package,进度条像卡住了一样,控制台不停输出Downloading from central,动辄十几分钟乃至直接超时失败&#xff0c…

2026/10/19 13:32:23 阅读更多 →
Windows 7多用户管理:从控制面板到命令行的账户添加与权限实践

Windows 7多用户管理:从控制面板到命令行的账户添加与权限实践

在公司或者家里,只要你用过Windows 7,就一定遇到过这样的场景:一台电脑摆在那里,家里几口人都要用,或者办公室里几个人轮流用一台公共机器。每个人都有自己的桌面壁纸、文件、浏览器收藏夹,结果谁也不敢动设…

2026/10/19 13:32:23 阅读更多 →
资源管理器进程结束导致黑屏?三步快速恢复桌面

资源管理器进程结束导致黑屏?三步快速恢复桌面

很多朋友第一次碰到这种情况,心里大概都咯噔一下:桌面没了,任务栏没了,只有壁纸和鼠标指针孤零零地留在屏幕上,甚至干脆全黑。我之前帮人远程看电脑,对方就是在任务管理器里选中“Windows 资源管理器”&…

2026/10/19 13:32:23 阅读更多 →

最新新闻

基于Socket的TCP Linux聊天系统实战:从协议设计到文件传输

基于Socket的TCP Linux聊天系统实战:从协议设计到文件传输

做过Linux网络编程的人,大概率都自己动手写过聊天程序。但很多人的练习项目在“能收发字符串”这一步就停了,再往上基本就是查文档、复制粘贴、能跑就算完。这里想完整分享一个我自己完整搭过的项目,基于Socket的TCP协议Linux聊天系统&#x…

2026/10/19 14:17:57 阅读更多 →
CLI驱动的Git原生代码审查工具open-code-review

CLI驱动的Git原生代码审查工具open-code-review

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套可嵌入开发流程的轻量级代码审查协作者 “open-code-review”这个名字乍一听像某个开源项目仓库名,但拆开来看——open(开放)、code(代码)、…

2026/10/19 14:17:57 阅读更多 →
2025 CTF备赛必备:BurpSuite与IDA核心使用要点

2025 CTF备赛必备:BurpSuite与IDA核心使用要点

2025年的CTF备赛圈里,话题绕不开两个名字:BurpSuite和IDA。前者是Web方向拦截分析流量的标准装备,后者是逆向方向打开二进制文件的默认入口。只要你想认真打CTF,这两把刀迟早要上手。不过我这两年带队伍、带新人的过程中发现一个很…

2026/10/19 14:17:57 阅读更多 →
open-code-review:面向人脑认知的可解释代码审查系统

open-code-review:面向人脑认知的可解释代码审查系统

1. 项目概述:这不是又一个代码审查工具,而是一次对“人如何协作理解代码”的重新建模 “open-code-review”这个名字乍听像某个开源项目的代号,但拆开来看——open,不是指“开源”,而是指“开放性”;code r…

2026/10/19 14:17:57 阅读更多 →
Docker容器化Python环境:Dockerfile与compose最佳实践

Docker容器化Python环境:Dockerfile与compose最佳实践

说实话,做了这么多年开发,每次新同事入职、或者我自己换台电脑重新拉项目,最头疼的都不是业务代码本身,而是Python环境那一堆破事:解释器版本对不上、某个包编译报错缺系统库、全局site-packages被各种项目依赖搅成一锅…

2026/10/19 14:17:57 阅读更多 →
基于Atlas的MySQL读写分离与分库分表实践指南

基于Atlas的MySQL读写分离与分库分表实践指南

1. 项目整体设计与适用场景解析1.1 这个项目到底解决什么问题做后端开发的人应该都有这种感觉:业务量一上来,数据库最先扛不住。单库单表跑到一定量级,写入并发和查询延迟都会明显恶化,这时候大部分人第一反应是上缓存、做读写分离…

2026/10/19 14:16:37 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →