Запуск сценария оболочки с привилегиями владельца

На сервере Debian (5.0.3) у меня есть пользователь svnsync кто владеет определенным сценарием оболочки:

-rwsrwsr-x 1 svnsync users  119 Dec 21 13:45 mirror-svn.sh

Я хотел бы, чтобы все в users группа, чтобы иметь возможность выполнить этот скрипт с svnsyncпривилегии. Это связано с триггеромsvnsync synchorize"команды из сценариев после фиксации; цитирование svnbook:

[...] вы можете захотеть, чтобы ваш основной репозиторий отправлял изменения на одно или несколько благословенных зеркал как часть его реализаций ловушек post-commit и post-revprop-change. Это позволило бы обновлять зеркало как можно ближе к реальному времени, насколько это возможно.

В любом случае, я не могу заставить работать SUID, по-видимому, потому что Linux / Debian является одной из современных систем Unix, упомянутых здесь:

По этой причине некоторые современные системы UNIX игнорируют биты SUID и SGID в сценариях оболочки.

Этот вопрос SF предполагает то же самое: "вы не можете использовать SUID root для сценариев оболочки". Итак, вот мой дополнительный вопрос:

Если я действительно хочу запустить скрипт с привилегиями его владельца, независимо от возможных рисков, есть ли какой-нибудь простой способ сделать это? Было предложено скомпилировать скрипт в двоичный файл, но я бы предпочел более простой способ, если это вообще возможно. Как насчет вызова сценария оболочки, например, из сценария Perl (я на самом деле пробовал это, но не смог заставить его работать)? Добавление всех в файл sudoers тоже не очень хороший вариант.

Обновление: получилось, установивperl-suidкак предложил 0x89 и используя скрипт-обертку Perl, как показано ниже.

#!/usr/bin/suidperl -T
$ENV{PATH} = "/bin:/usr/bin";
system("/path/to/mirror-svn.sh");

chmod +s устанавливается в этом сценарии оболочки. Также обратите внимание, что $ENV{PATH} должен быть установлен в скрипте; в противном случае вы получите жалобу, что это небезопасно.

1 ответ

В более новых версиях Debian есть пакет perl-suid, который решает эту проблему для сценариев perl, возможно, он также доступен в 5.0.3.

Проблема безопасности при предоставлении сценариям бита SUID не ограничивается сценариями оболочки, а затрагивает любой интерпретируемый язык. Вот почему ваша первоначальная попытка вызвать скрипт из perl не сработала. Кажется, что можно установить бит SUID для сценариев в Solaris, но я думаю, что, поскольку вы не хотите писать обертку C вокруг своего сценария, переход на Solaris не подходит для вас?;-).

Другие вопросы по тегам