我们有一个需要用Git和Trac运行的git post-commit脚本,当有人提交一个被调用的钩子时,会运行这个命令:
trac-admin /path/to/trac changeset added "reponame" $REV
$ REV是dynamic的,取决于推送的版本。 问题是这个命令要求提交用户对trac数据库有写权限。
我们有很多用户提交,他们都在一个名为“git”的Linux组中,我可以在trac数据库文件(SQLite)上给rw这个组,然后它可以工作,然后在“git”组中的任何人都可以删除数据库。 它目前由www-data,www-data所有。
我添加了一个这样的sudoconfiguration行:
%git ALL=(www-data) NOPASSWD: /usr/local/bin/trac-admin
这工作,它允许脚本工作,但是现在他们有trac-admin所有的选项,我想限制这个命令的访问,包括/path/到/ trac的参数,并改变设置添加。
我尝试添加一个Cmnd别名与/ usr / local / bin / trac-admin / path / to / trac changeset添加了“reponame”,但它不起作用,因为添加的$ REV正在打破它,而且不能dynamic添加到的/ etc / sudoers中。
有没有办法在Cmnd Alias中包含通配符来允许它在sudoers中工作?
把/ usr / local / bin /任何
#!/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 /。 让用户这些说明:
sudo whatever repo rev
创build一个只做你想授予访问权限的脚本,然后授予sudo对该脚本的访问权限,而不是授予对trac-admin的sudo访问权限