Leadaxe 定位 macOS 27 上 singbox-launcher 特权启动 shell 未以 root 运行,下一版改用 /bin/bash -p
在 singbox-launcher #138(anrock1985 于 2026-09-28 报告:macOS 27 上自 v2.1.0 起 TUN 无法启动,先报 classic.log 打不开、手动建文件后又报 Connect: operation not permitted,目前仍 open)中,Leadaxe 于 2026-09-29 09:47:47Z 说明两个现象出自同一条件:特权启动的 shell 以用户 uid 运行而非 root。目录 /Library/Logs/sing-box-lxd(root:wheel 0755)在免 root 时校验能通过,却无法在其中创建 classic.log,故报 cannot open;手动把日志文件创建成自己的属主后,日志可以打开、内核免 root 启动,但 TUN 上得到 Connect: operation not permitted。他称 macOS 27 上 shell 为何没有 root 目前未实测,工作假设是特权启动给出 euid 0 而 real uid 仍是用户,bash 不带 -p 时会丢弃 euid。下一版启动器:启动 shell 改为 /bin/bash -p;操作日志前先确认自己是否为 root,否则给出形如「refused: the start shell runs as uid 501 (real uid 501), not 0」的拒绝;打开 classic.log 失败时点名系统原因。他同时索取了 /private/var/select/sh、/bin/sh --version、日志目录属主与启动瞬间的进程 uid 等信息。该修复尚未随任何版本发出(仓库最新发布仍为 09-28 的 v2.3.3,早于本条诊断)。
作者原文@LeadaxeСпасибо за подробный отчёт. Оба симптома воспроизводятся одним условием: шелл привилегированного старта работает под вашим uid, а не под root.
При готовом каталоге
/Library/Logs/sing-box-lxd(root:wheel 0755) проверки каталога проходят и без root, а создать в нёмclassic.logнельзя — отсюдаcannot open. Когда файл создан вручную с вашим владельцем, лог открывается, ядро стартует без root и получаетConnect: operation not permittedна TUN.Почему шелл оказывается без root на macOS 27, пока не измерено. Рабочая версия: привилегированный запуск отдаёт euid 0 при вашем real uid, а bash без флага
-pв таком случае сбрасывает euid.В следующей версии лаунчера:
- шелл старта —
/bin/bash -p;- до работы с логом шелл проверяет, что он root, иначе отказ вида
refused: the start shell runs as uid 501 (real uid 501), not 0;- отказ открыть
classic.logназывает системную причину.Чтобы подтвердить причину, нужны данные с вашей машины:
- Вывод команд:
ls -l /private/var/select/sh /bin/sh --version ls -lnT /Library/Logs/sing-box-lxd
- Кто владелец процессов при старте. Оставьте созданный вручную
classic.log, нажмите Start и в течение пары секунд выполните в терминале:ps -axo pid,uid,ruid,command | grep -E 'start-singbox-privileged|sing-box-lxd run' | grep -v grepЯдро живёт недолго, поэтому команду удобно запустить циклом до нажатия Start:
while :; do ps -axo pid,uid,ruid,command | grep -E 'start-singbox-privileged|sing-box-lxd run' | grep -v grep; sleep 0.2; done
- v2.0.2 работала уже на macOS 27 или на предыдущей версии системы?
- Появлялся ли запрос пароля администратора при нажатии Start?