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

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

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

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

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

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

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

Вы можете настроить 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 запускать ваше приложение в качестве пользователя приложения с

sudo -u appuser /path/to/yourapp