2011-11-29 2 views
10

Я бег этого небольшого питона скрипт как на Linux и Solaris как не привилегированный пользователь:Setuid бит на питон сценария: Linux против Solaris

#!/usr/bin/python 
import os 
print 'uid,euid =',os.getuid(),os.geteuid() 

перед запуском, то УИП битого установлен на сценарии (а не на питона переводчика):

chown root:myusergrp getuid.py 
chmod 4750 getuid.py 

в Solaris, эффективный UID устанавливается из-за Setuid бит:

uid,euid = 10002 0 

Но не на Linux:

uid,euid = 10002 10002 

Обратите внимание на версию питона 2,6 как для Solaris и Linux

ли это possibe иметь Python Linux работать как Python Solaris?

ответ

21

Большинство дистрибутивов Unix обычно не позволяют использовать setuid в файле, который использует #! переводчик. Solaris оказывается той, которая позволяет это благодаря использованию более безопасной реализации, чем большинство других дистрибутивов.

Смотрите эту запись FAQ для более фона о том, почему этом механизм настолько опасен: How can I get setuid shell scripts to work?

Смотрите эту ссылку для более подробного обсуждения и как скомпилировать Setuid исполняемого файла, который будет запускать скрипт: setuid on shell scripts

Соответствующих часть:

int main() 
{ 
    setuid(0); 
    system("/path/to/script.sh"); 

    return 0; 
} 
+0

Solaris основан на SVR4, который, как ваши заметки о ссылках на часто задаваемые вопросы, использует более безопасные способы, чем более старые Unix, для обработки запуска скриптов setuid. – alanc

+0

Отличная точка. Я отредактировал ответ, чтобы это отразить. –

+0

Что делать, если ваш скрипт python должен быть запущен как пользователь без полномочий root, а затем suid во время выполнения в какой-то момент? –

2

Я просто сложить два и два вместе сегодня и придумали альтернативное решение: cython --embed.

Следуйте приведенным выше ссылкам по ссылке, и вы получите бинарные исполняемые файлы с вашего Python, чтобы вы могли chown и chmod u+s, завершив круг без программы-обертки.

Разумеется, будьте осторожны с рисками (этого или любого другого использования setuid), - ошибки в вашем скрипте могут привести к повышенным привилегиям в системе.

1

Вы можете использовать sudo для достижения того, чего хотите. Он работает как разные пользователи:

sudo -u otheruser command 

Права доступа заданы пользователем root, используя visudo. Материал setuid/setguid не применяется к скриптам или оболочке в linux, а только скомпилированному коду.

 Смежные вопросы

  • Нет связанных вопросов^_^