Семантика SUID (Set-User-ID)

кажется, у меня есть некоторые проблемы с пониманием семантики бита SUID, возможно, кто-то может помочь мне прояснить ситуацию.

Мое понимание семантики бита SUID следующее: когда я устанавливаю бит SUID с файлом, файл будет выполняться как владелец файла, а не как вызывающий файл. Итак, чтобы проверить это поведение, я написал следующий скрипт на Python:

#!/usr/bin/python3 -O

import os

def main():
        print('Real UserID: %d' % os.getuid())
        print('Effective UserID: %d' % os.geteuid())

if __name__ == '__main__':
        main()

После этого я создал пользователя с именем «testuser» с соответствующей группой «testuser» и настроил права доступа к файлам (файл chown testuser, файл chgrp testuser, файл chmod u+s,g+x). Затем я добавил своего основного пользователя в группу «testuser», чтобы я мог выполнять файл как член группы. После всего этого права доступа к файлам выглядели так:

-rwsr-xr-- 1 testuser testuser  168 2011-04-02 13:35 procred.py*

Итак, когда я вхожу в систему как тестовый пользователь, скрипт выдает вывод:

Real UserID: 1001
Effective UserID: 1001

... и когда я запускаю скрипт как мой основной пользователь, скрипт выводит:

Real UserID: 1000
Effective UserID: 1000

Теперь, насколько я понимаю, сценарий должен был работать как пользователь с uid 1001 (владелец файла) в последнем исполнении. Я неправильно понимаю всю концепцию или в чем моя ошибка?


person evermean    schedule 02.04.2011    source источник


Ответы (3)


Установка бита SUID в файле *.py здесь никак не помогает, поскольку скрипт выполняется интерпретатором Python, который в этом случае должен установить SUID. Использование «sudo» — ваш лучший друг здесь.

person Andreas Jung    schedule 02.04.2011

Установка SUID не работает для скриптов, потому что ядро ​​видит #! (shebang — магическое число 0x23 0x21 — man magic) и сбрасывает привилегии перед вызовом интерпретатора /usr/bin/python со сценарием в качестве входных данных. Обходным путем является установка корня SUID интерпретатора Python и добавление функций для изменения привилегий пользователю, владеющему сценарием, перед выполнением сценария, если установлен бит SUID. Делая это наивным образом, вы создадите проблемы с безопасностью. Как это сделать по-умному, можно найти здесь: http://perldoc.perl.org/perlsec.html

Дополнительные ссылки:

person ObiWahn    schedule 02.04.2011

Я нашел эту ссылку в Интернете. вы можете установить SUID для этой оболочки и использовать ее. но лично предпочитаю решение sudo. ;)

person Ali Nikneshan    schedule 11.05.2011