Назад | Перейти на главную страницу

Конфигурация Sudoers для разрешения аргументов для сценария git post-commit

У нас есть сценарий git post-commit, который нужно запускать с Git и Trac, когда кто-то что-то фиксирует, вызывается ловушка, запускающая команду:

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

Где $ REV является динамическим в зависимости от версии нажатия. Проблема в том, что эта команда требует, чтобы пользователь, выполняющий фиксацию, имел разрешение на запись в базу данных trac.

У нас есть много пользователей, которые совершают коммит, все они находятся в группе Linux под названием «git», я могу дать этой группе rw в файле trac DB (SQLite), и он работает, однако тогда любой в группе «git» может удалить базу данных. В настоящее время он принадлежит www-data, www-data.

Я добавил строку конфигурации sudo:

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

Это работает, это позволяет скрипту работать, однако теперь у них есть все параметры, которые поставляются с trac-admin, я хочу ограничить доступ этой команды, чтобы включить аргументы / path / to / trac и добавить набор изменений.

Я попытался добавить псевдоним Cmnd с изменением / usr / local / bin / trac-admin / path / to / trac, добавленным «reponame», но он не работает, потому что добавленный $ REV нарушает его, и это не может быть добавлено динамически в / etc / sudoers.

Есть ли способ включить подстановочные знаки в Cmnd Alias, чтобы это работало в sudoers?

создайте сценарий, который делает только то, к чему вы хотите предоставить доступ, а затем предоставьте доступ sudo к этому сценарию вместо предоставления доступа sudo к trac-admin

Поместите в / 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"

Затем используйте / usr / local / bin / something в sudoers. Предоставьте пользователям следующие инструкции:

sudo whatever repo rev