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

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

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

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

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

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

В любом случае, я не могу заставить работать 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} необходимо указать в скрипте; иначе вы получите жалобу, что это небезопасный.

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

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