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

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.

Я должен спросить .... Программа принадлежит пользователю root с группой root. Пользователь, запускающий программу, по-видимому, не является пользователем root (# как в командной строке), но входит ли пользователь в группу «root»?

Казалось бы, быстрое исправление предназначено для этого конкретного случая:

 chmod o+rx myscript

Хм, ответы на это вопрос Предполагаю, что в более современных системах я могу устанавливать uid только в программах, а не в сценариях оболочки. Вероятно, другая система на самом деле двоичная,

Хотя я подозреваю, что ответ mdpc правильный и что вам нужно изменить разрешения для «других», есть удобный метод, который вы можете использовать для запуска скриптов от имени других пользователей. Что вам нужно сделать, так это создать очень простую программу на C, которая принимает argv [0], добавляет что-то вроде «.real», а затем выполняет эту строку. Затем вы перемещаете свой сценарий из foo.pl в foo.pl.real и перемещаете скомпилированный двоичный файл в foo.pl и устанавливаете этот двоичный код. Теперь, когда вы запустите foo.pl, вы будете запускать foo.pl.real как пользователь, которого хотите.

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

Ответ mdpc, скорее всего, правильный, но обратите внимание, что perl работает иначе, когда он запускается с setuid.

среди прочего, он автоматически включает режим taint perl, чтобы заставить вас дезинфицировать ввод и аргументы перед их использованием. он также очень требователен к PATH и другим переменным среды, которыми можно злоупотреблять для компрометации системы.

см. perlsec (1) для получения дополнительных сведений (Примечание: в некоторых системах, включая debian, документы perl доступны в виде страниц руководства. в других системах, почти наверняка включая Solaris 10, вам придется запускать "perldoc perlsec", а не " человек перлсек ").

Запустить groups команда для вывода списка групп, членом которых вы являетесь. Вы должны быть членом корневой группы в системе, которую пытаетесь запустить. myscript.

Проверьте параметры монтирования для файловой системы, в которой находится сценарий. Eсть nosuid параметр, который можно использовать для разрешения или запрещения выполнения setuid или setgid.

mount | grep rchuck
/ home / rchuck на homedir.mydomain.com:/export/home4/03/rchuck remote / read / write / nosetuid / nodevices / intr / retrans = 10 / retry = 3 / xattr / dev = 59ca539 в среду, 22 июля 07: 41:23 2009