1

Я хочу создать ситуацию, когда что-то непривилегированный пользователь делает (через SSH), запускает событие, которое заставляет задание upstart выполнить какое-то действие. Действия основаны на изменениях файловой системы, поэтому я приветствую альтернативные методы.

В основном я хочу иметь что-то вроде:

description "Foo job"
exec foo
start on foo

а затем попросите пользователя вызвать событие как foo. Когда я говорю "пользователь", я на самом деле имею в виду скрипт ловушки git, который запускается автоматически, когда git передает SSH в хранилище на хосте.

Я попытался просто запустить initctl emit foo , но это работает только тогда, когда я делаю это как root.

Я также не могу использовать пользовательские задания для этого конкретного случая, потому что я хочу, чтобы рассматриваемая работа перезапускала серверы и создавала структуры каталогов, к которым у пользователя, отправляющего событие, нет доступа.

Любые идеи о том, как я мог бы сделать это без предоставления пользователю ненужных привилегий?

РЕДАКТИРОВАТЬ: Просто чтобы добавить требование, которое я забыл упомянуть. Это должно быть в сценарии, поэтому ввод паролей не вариант.

1 ответ1

2

Чтобы ответить на мой собственный вопрос, файл sudoers можно изменить, чтобы позволить пользователям запускать определенные команды с аргументами. Так что для рассматриваемой ситуации что-то вроде этого сделает работу:

Cmnd_Alias EMIT_CMD = /sbin/initctl emit foo
user ALL=(ALL) NOPASSWD: EMIT_CMD

Это можно поместить либо в /etc /sudoers, либо в файл в /etc/sudoers.d, если ваша система обработки настроена таким образом.

После настройки sudo непривилегированный пользователь сможет вызывать команду initctl без пароля, но только с указанными аргументами, и любой другой набор аргументов завершится сбоем, поскольку пользователь (надеюсь) отсутствует в списке sudoers в любой другой емкости.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .