Setuid не работает на Solaris
У меня есть сценарий Perl, помеченный setuid, но когда я его запускаю, он говорит, что у меня нет разрешения на это. Я использую Solaris 10. Это работает в другой системе, но я не могу сказать, что отличается. Что я делаю неправильно?
$ ls -l
total 16
-r-sr-x--- 1 root root 7354 Apr 19 2008 myscript
$ ./myscript
./myscript: Permission denied.
5 ответов
Я должен спросить.... Программа принадлежит root с группой root. Пользователь, запустивший программу, по-видимому, не root (нет # в качестве командной строки), но находится ли пользователь в группе "root"?
Быстрое решение, казалось бы, для этого конкретного случая:
chmod o+rx myscript
Хм, ответы на этот вопрос говорят о том, что на более современных системах я могу настраивать только программы, а не сценарии оболочки. Возможно, другая система на самом деле является бинарной,
Ответ mdpc, скорее всего, правильный, но обратите внимание, что Perl работает по-разному, когда он запускается setuid.
кроме всего прочего, он автоматически включает режим заражения perl, чтобы заставить вас дезинфицировать ваш ввод и аргументы перед их использованием. он также очень суетлив относительно PATH и других переменных среды, которые могут быть использованы для компрометации системы.
смотрите perlsec(1) для более подробной информации (Примечание: в некоторых системах, включая debian, документы perl доступны в виде man-страниц. В других системах, почти наверняка, включая Solaris 10, вам придется запускать "perldoc perlsec", а не "man perlsec").
Хотя я подозреваю, что ответ mdpc правильный и вам нужно изменить права доступа для "other", есть удобный метод, который вы можете использовать для запуска скриптов другими пользователями. Что вам нужно сделать, это создать очень простую программу на C, которая принимает argv[0], добавляет что-то вроде ".real" и затем выполняет эту строку. Затем вы перемещаете свой скрипт из foo.pl в foo.pl.real и перемещаете свой скомпилированный двоичный файл в foo.pl и устанавливаете этот двоичный файл. Теперь, когда вы запустите foo.pl, вы запустите foo.pl.real от имени нужного вам пользователя.
Как и в любой программе setuid, вы должны убедиться, что у вас нет проблем с безопасностью. Вы должны санировать argv[0], чтобы убедиться, что это та программа, которую, по вашему мнению, вы должны запускать, или есть вероятность, что кто-то сделает ссылку на двоичный файл и получит разрешения, которых он не должен иметь.
Запустить groups
Команда, чтобы получить список групп, членом которых вы являетесь. Вы должны быть членом корневой группы в системе, которую вы пытаетесь запустить myscript
,
Проверьте параметры монтирования для файловой системы, в которой находится скрипт. E сть nosuid
опция, которая может использоваться, чтобы разрешить или запретить выполнение setuid или setgid.
mount | grep rchuck
/ home / rchuck на homedir.mydomain.com:/export/home4/03/rchuck remote/ чтение / запись /nosetuid/nodevices/intr/retrans=10/retry=3/xattr/dev=59ca539 в среду, 22 июля 07:41:23 2009