假设我有以下工作流程来部署我的 webapp 的新版本。这是一个小型应用程序,因此所有构建 + 部署工作都在同一台服务器上完成 ( example.co
)
- 用户执行
git push
将新代码推送到我的服务器(example.co
) - 服务器有一个裸 git 仓库,用于接收更改。它启动一个
post-receive
钩 - post-receive 钩子运行一个构建脚本,该脚本构建一个新的 Docker 容器并启动它
git 存储库由我服务器上的专用用户管理git
。这样,任何开发人员都可以添加类似 git remote ssh url并使用 SSH 向其推送ssh://[email protected]:/some/path.git
构建和部署工作由deploy
用户完成,因为这需要sudo
权限。
我如何让我的git
用户以用户身份启动脚本deploy
?git 用户是否应该有任何方法可以做到这一点,因为任何人都可以在用户权限下 ssh 进入机器git
?
有没有更好的方法来划分这些权限?
谢谢!
答案1
您授予用户以git
用户身份运行您希望其运行的脚本的权限deploy
:
git ALL=(deploy) NOPASSWD: /usr/local/bin/some-script ""
git 用户是否应该有任何办法做到这一点,因为任何人都可以以 git 用户身份通过 ssh 进入机器?
好吧,首先,希望不是任何人可以登录到机器的只有那些有合法需要访问该帐户的人。其次,SSH 作为用户git
应该触发强制命令,因此登录的人不应该能够任意触发部署脚本。最后,被调用的脚本应该以这样的方式编写,即它不能做任何比“重新部署之前已经部署过的已知安全代码”更具破坏性的事情,因此除了资源耗尽之外,某人能够反复触发脚本实际上不应该有任何坏处。