Сервер нашей компании работает под управлением 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