Как я могу использовать 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