Я расширяю некоторое программное обеспечение (автор которого я не являюсь), работающее под GNU/Linux (Ubuntu 14.04) и состоящее из manager
процесса и нескольких worker
процессов. Менеджер может запустить воркера с помощью командной строки, которую я могу указать в файле конфигурации.
После запуска воркера менеджер связывается с ним с помощью пайпа. Из соображений безопасности мы решили позволить рабочим процессам работать под другим пользователем, а не под менеджером (назовем их manager-user
и worker-user
). Это достигается путем написания небольшого скрипта-оболочки, который переключает пользователя с su
и запускает нового рабочего. После этого менеджер может общаться через канал с рабочим процессом. Этот подход работает уже много месяцев.
В качестве альтернативы su
мы рассмотрели возможность использования бита setuid
для запуска рабочих процессов. Итак, мы написали оболочку C
, которую может вызвать менеджер для запуска рабочего процесса. Если мы настроим обертку так, чтобы она принадлежала manager-user
, рабочий процесс запускается правильно (но, конечно, с неправильными привилегиями). Если мы настроим оболочку так, чтобы она принадлежала worker-user
, и установим бит setuid
, то рабочие процессы запустятся, но затем завершатся, потому что они не могут подключиться к менеджеру.
Итак, мой вопрос: как запуск исполняемого файла setuid
влияет на разрешение каналов, созданных как родительским, так и дочерним процессом? Может быть рабочие процессы, запущенные через setuid-обертку, не имеют разрешения на открытие пайпов менеджера (или наоборот)? Если это так, как мы можем изменить эти разрешения?
У меня мало опыта использования setuid
, поэтому приветствуется любая информация/объяснение.