文档
快速开始 + 每部分每设备的功能说明(持续更新中)
大厂云服务器(非 root 用户)sudo 适配
背景
腾讯云、阿里云等大厂云服务器默认禁用 root 登录,只能用普通用户(Ubuntu 用 ubuntu、Debian 用 admin、CentOS 用 centos)登录。这些普通用户通常在 sudo 组,且配置了免密 sudo(NOPASSWD: ALL)。
问题现象
用普通用户登录时,面板里所有需要管理员权限的操作都会失败:
| 功能 | 报错 |
|---|---|
| 换源 | E: 无法打开锁文件 /var/lib/apt/lists/lock - open (13: Permission denied) |
| Docker 安装 | 写 /etc/apt/sources.list.d/ 权限不足 |
| Nginx / 应用安装 | apt-get install 权限不足 |
根因
项目的安装/换源/配置命令没有加 sudo 前缀,直接以普通用户执行,写 /etc/、执行 apt-get install 等需要 root 的操作时因权限不足失败。
解决方案
新增 sudo_helper.py 模块,实现自动提权:
1. 懒检测用户身份:首次执行命令时 whoami 判断是否 root,非 root 时用 sudo -n true 探测是否免密 sudo(结果按连接缓存)。
2. 自动加 sudo 前缀:对「需要 root 的操作类命令」(apt-get install/update、yum/dnf install、systemctl enable/start、写 /etc/、nginx -s reload、certbot、htpasswd、docker 官方脚本等)自动加 sudo -n sh -c '...' 前缀。
3. 精确匹配,不误伤:command -v、cat、whoami、pwd 等检测/读命令不会被加 sudo。
4. root 用户零影响:root 用户登录时,命令原样返回,行为完全不变。
接入点:
app.py的_ssh_cmd_by_conn/_ssh_cmd_checked(覆盖换源、Docker、应用大全等大部分命令)nginx_manager.py/nginx_sites_ext.py的_exec包装(覆盖网站管理的 nginx 配置、certbot、htpasswd)
注意事项
1. 免密 sudo 是前提:大厂云默认用户(ubuntu/centos/admin)都免密 sudo,可正常提权。若用户服务器改成了「sudo 需要密码」,面板会返回明确提示「请改用 root 登录或配置免密 sudo」,不会静默失败。
2. 新增命令时勿忘提权:以后新增「需要 root 的安装/配置命令」时,确认命令里有 apt-get install、写 /etc/、systemctl 等关键词,sudo_helper.needs_sudo() 能自动识别;若命令形态特殊(如自定义安装脚本),需在 _SUDO_OP_PATTERNS 里补充匹配规则。
3. 验证方式:在腾讯云北京(id=73,ubuntu 用户)上已实测换源、docker 源写入、nginx 干跑安装、systemctl 均正常。