Как я могу использовать SetUID в сценарии оболочки для запуска от имени пользователя без полномочий root?

На сервере нашей компании установлены Ubuntu 12.04 (Precise) и Apache 2. У нас установлено специальное внутреннее веб-приложение. У меня есть скрипт bash, который вытягивает любые обновления этого приложения из системы контроля версий на сервер. Только один пользователь в системе (владелец файла сценария) имеет необходимые ключи SSH для подключения к системе контроля версий, но я бы хотел, чтобы любой пользователь в системе мог запустить этот сценарий для обновления приложения.

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

Я думал, что смогу обойти это на некоторое время, сделав это perl-скриптом, но в Precise также больше нет пакета suid-perl. Похоже, это устарело.

Я нашел несколько сайтов, которые рекомендуют обойти это путем добавления пользователей в файл sudoers, но мой сценарий не требует прав root для запуска, и он не вносит никаких изменений в любую часть файловой системы, кроме веб-сайта, поэтому я не хотел бы никому предоставлять привилегии sudoer. Сценарий просто требует разрешения владельца сценария для правильной работы.

Итак, каков предпочтительный современный подход к выполнению сценария с UID пользователя (другого, не root, не sudo)?

1 ответ

Решение

Вы можете настроить sudo так, чтобы люди могли запускать команды как особые пользователи без полномочий root, например, в sudoers

user1   (ALL) = (appuser) /path/to/yourapp

позволит пользователю user1 запускать ваше приложение как appuser с

sudo -u appuser /path/to/yourapp

так же

%somegroup    (ALL) = (appuser) /path/to/yourapp

в sudoers позволит пользователям в группе somegroup запускать ваше приложение как appuser с

sudo -u appuser /path/to/yourapp
Другие вопросы по тегам