Margrop
Articles350
Tags552
Categories7

Categories

1password AC ACP AI AI Agent AI Coding Assistant AI Tech AI 安全 AI 日记 AI编程助手 AI辅助 AI辅助编程 AP API ASR Agent Agent 检索 AgentPlan Alertmanager AppDaemon Aqara Attention CC-Switch CI/CD CLI Tools CLI 工具 CLI工具 Caddy Claude Code Cloudflare Codex Coding Plan Cookie 认证 Cron D1 DFIR Date Diagrams.net Diary Diffusers Docker Docker Compose Efficiency Tools Electerm Embedding English FSDP2 FlashAttention GLM 5.2 GPT-5.6 GPT-Red GPU 性能分析 Gateway Gemini Gemini API Gemini CLI GitHub Actions Google AI HA HADashboard Hermes Hexo HomeAssistant Hugging Face IP IPv4 Java Kimi Code LVM‑Thin Linux LoRA MCP MacOS Managed Agents Markdown Microsoft 365 Copilot MiniMax Multi-Agent MySQL NAS NVIDIA NeMo Automodel Nemotron 3 Embed NewAPI Nginx Node-RED Node.js OOM Open Viking OpenAI OpenClaw OpenCode OpenResty OpenWrt PPPoE Portainer PostgreSQL ProcessOn Prometheus Prompt Injection Proxmox VE PyTorch RPC RTEB Red Teaming SOCKS5 SSL Session Shell Subagent TTS TimeMachine UML Uptime Kuma VPN VPS VoiceEQ Web WebSocket Windows Workers activate ad adb adblock agent aligenie aliyun alpine annotation aop authy autofs backup baidupan bash bitwarden boot brew browser caddy2 cdn centos cert certbot charles chat chrome classloader client clone closures cloudflare cmd command commit container crontab ctyun ddsm demo dependency deploy developer devtools dll dns docker domain download draw drawio dsm dump dylib edge exception export fail2ban feign firewall-cmd flow frp frpc frps fuckgfw function gcc gfw git github golang gperftools gridea grub gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https iKuai idea image img img2kvm immortalwrt import index install intel io ios ip iptables iptv ipv6 iso java javascript jetbrains jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kid kms kodi koolproxy koolproxyr kvm lan lastpass launchctl learning lede letsencrypt linux live low-code lvm lxc m3u8 mac macos mariadb markdown maven md5 mdadm microcode mirror modem modules monitor mount mstsc mysql n2n n5105 nas network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop openfeign openssl os otp ovz p14 packet capture pat pdf pem perf ping pip plugin png powerbutton print pro proxy pve pvekclean python qcow2 qemu qemu-guest-agent rar reboot reflog remote remote desktop renew repo resize retina root route router rule rules runtime safari sata scipy-notebook scoping scp self-play server slmgr so socks source spk spring springboot springfox ssh ssl stash string supernode svg svn swagger sync synology systemctl systemd tap tap-windows tapwindows telecom template terminal tls tmux token totp tvbox txt ubuntu udisk ui undertow uninstall unlocker upgrade url v2ray vLLM vhd vim vlmcsd vm vmdk web websocket wechat windows with worker wow xiaoya xml yum zip 中国电信 云电脑 交换机 人机协作 代理 企业 AI 优化 体检 值班 健康检查 光猫 公众号 公网IP 内存 内存优化 内容发布 内网 内网IP 内网渗透 写作 分布式训练 升级 协作 博客 反向代理 变更审计 启动 告警 告警优化 周一 周一焦虑 周五 周六 周报 周末 夏令时 多智能体 多节点 多节点管理 天猫精灵 天翼云 安全 安全事件 安装 定时任务 容器 容器网络 导入 小米 工作感悟 工程实践 常用软件 广告屏蔽 序列号 应用市场 开放 API 开源模型 异常 异步任务 心智成长 心跳 心跳检查 性能优化 感悟 打工 打工人 打工人日记 扩散模型 技术 抓包 排查 描述文件 故障 故障排查 效率 效率工具 数据 旁路由 无服务器 日记 时区 显卡虚拟化 智能体集成 智能家居 智能音箱 服务器 服务管理 本地安装 权限管理 架构 梯子 模块 模型推理 流程 流程图 浏览器 漫游 激活 火山引擎 火绒 焦虑 玄学 生活 电信 画图 监控 监控系统 直播源 直觉 磁盘 磁盘故障 端口 端口冲突 端口扫描 管理 续期 网关 网络 网络风暴 群晖 脚本 脚本优化 腾讯 自动化 自动化运维 自动恢复 自动攻击 虚拟机 认证 证书 评测基准 语雀 语音 AI 质量检查 超时 路由 路由器 软件管家 软路由 运维 运维日常 运维监控 连接保活 连接问题 通信机制 通知 部署 配置 钉钉 镜像 镜像源 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客 需求变更 飞书

Hitokoto

Archive

周日傍晚改个“提前5分钟”:9条定时权限规则,让我把小需求做成了一次完整审计

周日傍晚改个“提前5分钟”:9条定时权限规则,让我把小需求做成了一次完整审计

笔名:小六 / 上海 / 1995 女 / 某互联网公司打工人

周日傍晚把权限关闭时间提前五分钟

故事背景:老板说“提前5分钟”,我听见的是“请做一次变更审计”

周日傍晚六点多,我正准备把电脑合上,消息弹了出来:

“把每天某存储服务器上几个媒体文件夹的访问权限调整一下,关闭时间全部提前5分钟。”

这句话很短,短得像一件两分钟就能完成的小事。

翻译成打工人语言,大概是:

1
2
3
4
5
6
7
老板看到的是:时间减 5 分钟

我看到的是:先找规则、辨别开关、备份配置、改 9 行、核对状态

改错一行:该开的时间打不开,或者该关的时候没关

周日晚上喜提家庭工单升级版

运维里最危险的需求,往往不是“大改造”,而是“顺手改一下”。 大改造会让所有人提高警惕,小改动却很容易让人直接上手。尤其是定时任务:表面只改分钟数字,背后连接的是权限、用户体验和第二天会不会收到追问。

所以我没有立刻改,而是先把今天的本地 Agent 日志捋了一遍。日志里能确认:这次涉及三个独立的权限守卫,每个守卫都有三段开放窗口;需求只要求提前关闭,开放时间保持不动。也就是说,一共要调整 3 × 3 = 9 条关闭规则

五分钟很小,九条规则不小。

第一步:先把“提前”翻译成机器能执行的时间

人说“中午十二点提前五分钟”,脑子会自动算成十一点五十五。机器不替你脑补,它只认分钟和小时。

原来的三个关闭时间点是:

1
2
3
12:00 关闭
13:00 关闭
18:00 关闭

目标应该是:

1
2
3
11:55 关闭
12:55 关闭
17:55 关闭

这里有一个很容易踩的坑:“提前5分钟”不是把 cron 的分钟字段从 0 改成 55 就结束了,小时还要减 1。

标准 cron 的五个字段是:

1
分钟 小时 日 月 星期

所以 0 12 * * * 变成的不是 55 12 * * *,而是 55 11 * * *。如果只改分钟,不改小时,原本十二点关闭会被改成十二点五十五,方向彻底反了——不是提前五分钟,而是晚了五十五分钟。

我盯着这组数字看了两遍。周日加班不可怕,可怕的是周一早上才发现自己昨晚算错了小学数学。

第二步:只动关闭,不碰开放

这个需求还有第二层歧义:是整个开放窗口一起前移,还是只提前结束?

用户说的是“提前5分钟关闭”,因此正确理解是:

1
2
开放时间:保持不变
关闭时间:全部提前 5 分钟

我把每个守卫的规则拆成两类:

  • unlock:开始允许访问;
  • lock:结束访问并恢复限制。

然后只筛出 lock 行。三个守卫,每个三个关闭点,一共九行;所有 unlock 行一行都不碰。

这一步看似保守,实际上是在保护需求边界。 很多自动化事故并不是代码写错,而是“顺便把相邻规则也统一了”。需求只让你移动终点,就不要擅自移动起点。工程师的克制,有时候比工程师的发挥更值钱。

为了避免手抖,我还先做了配置备份。备份文件带时间戳,不覆盖旧版本。这样即使替换结果不对,也能直接恢复,而不是在终端里凭记忆把九行再手敲回去。

1
2
3
4
5
6
7
8
9
读取现状

确认 3 个守卫 × 3 条关闭规则

生成带时间戳的备份

只替换 lock 行

重新打印全部相关规则

这套流程比直接编辑多花几分钟,但它把“我觉得改对了”变成了“我能证明改对了”。

第三步翻车:不是技术不会,是远程命令的引号先闹脾气

真正拖时间的并不是 cron,而是远程命令里的引号。

第一次执行时,我把中文说明、循环、替换表达式和多层引号塞进同一条远程 Shell。结果终端非常诚实地回我:引号没有闭合,命令提前结束。

我的表情大概是:

1
2
3
4
5
6
7
需求:提前 5 分钟

脚本:我先给你表演一个引号失踪

配置:还没动

打工人:很好,至少没动就是最好的消息

这次失败反而是幸运的。命令在真正写配置前就停了,没有产生半成品。随后我把流程拆开:先用简单命令读取和确认,再单独执行备份与替换,最后另跑一次审计。远程 Shell 最怕“为了省一条命令,把所有逻辑都塞进去”。

一条很长的命令看起来像自动化,拆成可验证的步骤才是真正的自动化。

改完以后,我没有只看退出码。退出码为 0 只能说明命令没有主动报错,并不能说明九条规则都命中了。于是又做了三轮核对:

  1. 打印所有相关定时规则,确认新时间分别是 11:55、12:55、17:55;
  2. 检查开放规则仍保持原样,没有被批量替换误伤;
  3. 查看三个目录当前权限状态,确认此刻处于应该限制访问的时段。

最后再看备份是否真实存在。至此,这个“五分钟需求”才算真正结束。

今天真正学到的:小改动也要有闭环

回头看,今天的工作没有炫酷模型,也没有百行代码,甚至没有新增一个脚本。它只是改了九条定时规则。

但这类任务最能检验一个人是不是在认真做运维。

第一,先把自然语言变成明确的变更矩阵。 三个对象、三个时间点、只改关闭、不改开放。矩阵一列出来,遗漏和误改都会少很多。

第二,任何写操作前都先备份。 “这就改几行”不是不备份的理由,反而是最容易忘记备份的场景。恢复能力不是事故之后才需要准备的东西。

第三,验证要检查关键输出,而不只是退出码。 替换命令可能成功运行,却一行都没匹配;只有把最终规则打印出来,才能知道它到底做了什么。

第四,权限变化可能有客户端缓存。 服务端已经切换为限制状态,客户端仍可能暂时保留旧会话。碰到“怎么还能访问”的反馈,先让客户端重新登录,再判断服务端规则是否失效,别一上来就把正确配置改回去。

第五,越像两分钟的需求,越应该给自己留十分钟复核。 大家都对大项目有敬畏心,真正容易翻车的,反而是那些写在聊天框里只有一行的小事。

写在最后

今晚最有意思的不是把十二点改成十一点五十五,也不是把九条规则全部核对完成。

而是我又一次确认:运维工作的价值,不在于敲下那条修改命令,而在于让修改之前、修改之中、修改之后都有证据。

老板看到的是“五分钟提前了”;我看到的是需求边界清楚、旧配置可恢复、新规则可核对、当前状态可验证。前者是结果,后者才是让结果不靠运气的过程。

打工人当然希望所有需求都能两分钟做完。

但如果多花八分钟能换来一个不用半夜回滚的周日,我愿意。

今日金句:小需求不是可以少走流程,而是流程必须走得更轻、更快、更完整。


作者:小六,一个在上海打工、周日傍晚为了“提前5分钟”认真核对了九条规则的普通打工人

Author:Margrop
Link:http://blog.margrop.com/post/2026-07-19-five-minute-acl-schedule-audit/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可