返回
创建于
状态公开

在自托管 GitHub Actions 运行器(self-hosted runner)时,确实会遇到无法直接使用 sudo 运行某些命令的问题。这是因为 GitHub Actions 的运行器设计上有一些安全限制,默认情况下不允许以 sudo(即 root 权限)直接执行配置或运行脚本(比如 config.shrun.sh)。提示信息通常会是类似“Must not run with sudo”的错误。

为什么不能用 sudo

  1. 安全设计:GitHub Actions 的自托管运行器默认要求以非 root 用户运行,以减少潜在的安全风险。如果以 root 权限运行,可能导致意外修改系统文件或暴露敏感信息。
  2. 权限隔离:运行器通常需要一个普通用户账户来隔离工作目录和操作,避免对宿主系统的直接影响。

如何解决?

根据你的需求,有以下几种方法可以应对这个问题:

方法 1:以非 root 用户运行

  • 推荐做法:创建一个普通用户来运行自托管运行器,而不是用 root。
  • 操作步骤:
    1. 创建一个新用户,例如 github_runner
      bash
      1sudo adduser --disabled-password --gecos "" github_runner
    2. 切换到该用户:
      bash
      1sudo -u github_runner -i
    3. 在该用户的主目录(例如 /home/github_runner)下下载并配置运行器:
      bash
      1mkdir actions-runner && cd actions-runner
      2curl -o actions-runner-linux-x64.tar.gz -L https://github.com/actions/runner/releases/latest/download/actions-runner-linux-x64.tar.gz
      3tar xzf ./actions-runner-linux-x64.tar.gz
      4./config.sh --url https://github.com/你的组织或仓库 --token 你的令牌
    4. 启动运行器:
      bash
      1./run.sh
  • 这样可以避免 sudo 相关的限制,同时保持安全性。

方法 2:启用 RUNNER_ALLOW_RUNASROOT

  • 如果你确实需要在 root 用户下运行(例如某些特殊场景需要 root 权限),可以设置环境变量 RUNNER_ALLOW_RUNASROOT 来绕过限制。
  • 操作步骤:
    1. 在运行 config.shrun.sh 时,添加环境变量:
      bash
      1RUNNER_ALLOW_RUNASROOT=1 ./config.sh --url https://github.com/你的组织或仓库 --token 你的令牌
      2RUNNER_ALLOW_RUNASROOT=1 ./run.sh
    2. 注意:这种方法不推荐用于生产环境,因为以 root 运行可能会带来安全隐患。

方法 3:工作流中需要 sudo 的情况

  • 如果问题不是配置运行器,而是工作流(workflow)里的步骤需要 sudo(例如安装软件或修改系统文件),你可以:
    1. 确保运行器用户有足够的权限。例如,将用户加入 sudo 组:
      bash
      1sudo usermod -aG sudo github_runner
    2. /etc/sudoers 文件中为该用户配置无需密码的 sudo 权限:
      bash
      1sudo echo "github_runner ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
    3. 在工作流 YAML 文件中使用 sudo
      yaml
      1jobs:
      2  build:
      3    runs-on: self-hosted
      4    steps:
      5      - name: Run a command with sudo
      6        run: sudo apt-get update
  • 这样可以在工作流中正常使用 sudo,而不需要以 root 配置运行器。

注意事项

  • Docker 权限问题:如果你的工作流需要使用 Docker,而遇到类似“permission denied”的错误,可能是因为运行器用户没有 Docker 权限。可以将用户加入 docker 组:
    bash
    1sudo usermod -aG docker github_runner
    然后重启运行器或系统以应用权限。
  • 服务模式:如果你将运行器配置为系统服务(使用 svc.sh),可以用普通用户安装服务:
    bash
    1sudo ./svc.sh install github_runner
    2sudo ./svc.sh start

总结

不能直接用 sudo 运行自托管 GitHub Actions 运行器是设计上的限制,但你可以通过创建普通用户或设置 RUNNER_ALLOW_RUNASROOT 来解决。推荐使用非 root 用户运行,既安全又符合最佳实践。如果工作流中需要 sudo,则可以通过配置 sudoers 文件实现。希望这些方法能帮到你!有什么具体问题可以再告诉我,我会尽力解答。

Actions Runner: No Sudo