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

Предоставить разрешение на управление процессами других пользователей

У меня есть userA и userB, которые запускают процессы:

userA@server:~$ ./some_command.sh &
[1] 30889

Затем у меня есть веб-приложение, работающее как userC, которое управляет этими процессами (приостановка, возобновление, завершение и завершение).

Как я могу дать разрешение пользователю C сделать это? В целях безопасности я не хочу давать пользователю права root.

У меня есть полный контроль над пользователем C. Одна из возможностей - изменить идентификатор пользователя на такой же, как у userA, но как насчет userB?

Обновление: управление процессами выполняется с помощью стороннего модуля, поэтому невозможно применить sudo без значительной перезаписи.

Практика, когда пользователи делятся uid, очень не одобряется.

Предложения:

  • Посмотрите в sudo команда. Это решение goto для «как запустить команду от имени другого пользователя»: вы указываете записи в /etc/sudoers файл, указывающий, каким пользователям (или группам и т. д.) разрешено запускать команды от имени разных пользователей и при каких обстоятельствах. Его конфигурацию также можно поместить в каталог LDAP.
  • Если это производственная среда (или что-то, что вы планируете в конечном итоге разместить в производственной среде), это считается лучшей практикой для userA / userB быть «пользователем приложения». Это аккаунт с именем, которое легко передает его предполагаемое назначение (оракул, веб-приложенияи т.д.), а не тот, который любой пользователь считает «своим» личным кабинетом. В идеале никто не должен иметь возможность войти в систему как этот пользователь (т. Е. Отключенный пароль), и если вы хотите, чтобы пользователи получали доступ к оболочке для этого пользователя, это должно быть сделано через sudo абстракция. (т.е. роль, которая позволяет пользователю выполнять sudo su - oracle получить оракул shell) Это заставляет пользователей входить в систему как они сами, прежде чем стать пользователем приложения, и оставляет лучший контрольный след.
  • Если ни одно из этих решений невозможно, вы можете воспользоваться предложением @ Hex об использовании терминального мультиплексора, например screen или tmux, хотя некоторая абстракция между учетными записями для входа в систему и общими учетными записями приложений все же рекомендуется. Вы должны попытаться избежать этого, если только процессы имеют какое-то конечное взаимодействие.
  1. Setuid для исполняемых файлов, запускаемых пользователями A / B, для пользователя C.

  2. ?

  3. Прибыль

Я бы предложил комбинацию Monit и sudo для управления заданиями ...

Monit будет обрабатывать запуск / остановку / статус приложения.

Sudo с правами Monit даст вам возможность сотрудничества.

Видеть: разрешить пользователю запускать определенное действие по мониторингу

Вероятно, лучше всего использовать процесс прокси под userA / userB, читающий файлы управления для каждого PID.

some_command.sh:

thecommand &
CTL=/var/run/%1.ctl
echo %1 > $CTL
while read -n 1 cmd; do
    case $cmd in
        k)
            kill %1
            exit $?
            ;;
        s)
            kill -TSTP %1
            ;;
        ...
done < $CTL

Вы могли бы заставить рабочие процессы читать управляющие файлы ... но тогда они не могли бы продолжить, не так ли.