Linux
Sudoers 配置以允許 git post-commit 腳本的參數
我們有一個 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