У нас есть сценарий 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