Linux

Sudoers 配置以允許 git post-commit 腳本的參數

  • April 8, 2011

我們有一個 git post-commit 腳本,它需要與 Git 和 Trac 一起執行,當有人送出某事時,會呼叫一個鉤子來執行命令:

trac-admin /path/to/trac changeset added "reponame" $REV

其中 $REV 是動態的,取決於推送的修訂。問題是該命令要求送出使用者對 trac 數據庫具有寫權限。

我們有很多使用者送出,他們都在一個名為“git”的 Linux 組中,我可以在 trac DB 文件(SQLite)上向該組提供 rw 並且它可以工作,但是“git”組中的任何人都可以刪除數據庫。它目前歸 www-data,www-data 所有。

我添加了一個 sudo 配置行:

%git ALL=(www-data) NOPASSWD: /usr/local/bin/trac-admin

這行得通,它允許腳本工作,但是現在他們擁有 trac-admin 附帶的所有選項,我想限制此命令的訪問以包含 /path/to/trac 的參數,並添加更改集。

我嘗試使用 /usr/local/bin/trac-admin /path/to/trac 變更集添加“reponame”添加 Cmnd 別名,但它不起作用,因為添加的 $REV 正在破壞它,並且不能動態添加到/etc/sudoers.

有沒有辦法在 Cmnd Alias 中包含萬用字元以允許它在 sudoers 中工作?

放入 /usr/local/bin/whatever

#!/bin/bash --

reponame="$( printf '%q' "$1" )"
rev="$( printf '%q' "$2" )"

/usr/local/bin/trac-admin /path/to/trac changeset added "$reponame" "$rev"

然後在 sudoers 中使用 /usr/local/bin/whatever。讓使用者這些指令:

sudo whatever repo rev

創建一個僅執行您要授予訪問權限的事情的腳本,然後授予對該腳本的 sudo 訪問權限,而不是將 sudo 訪問權限授予 trac-admin

引用自:https://serverfault.com/questions/257369