Бит setuid в скрипте Python: Linux против Solaris - PullRequest
12 голосов
/ 29 ноября 2011

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

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

Перед запуском в скрипте устанавливается бит setuid (не включенинтерпретатор python):

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

В Solaris эффективный идентификатор пользователя устанавливается из-за бита setuid:

uid,euid = 10002 0

Но не в Linux:

uid,euid = 10002 10002

Обратите внимание, что версия python 2.6 для Solaris и Linux

Возможно ли, чтобы Python Linux работал как Python Solaris?

Ответы [ 3 ]

23 голосов
/ 29 ноября 2011

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

См. Этот раздел часто задаваемых вопросов для получения дополнительной информации о том, почему механизм настолько опасен: Как заставить работать сценарии оболочки setuid?

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

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

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

   return 0;
}
2 голосов
/ 03 июля 2012

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

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

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

0 голосов
/ 13 мая 2015

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

 sudo -u otheruser command

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...