Семантика 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 file, chgrp testuser file, chmod u+s,G+x file). Затем я добавил своего основного пользователя в группу "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 (владелец файла) в последнем исполнении. Я неправильно понял всю концепцию или где моя ошибка?

3 ответов


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


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

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


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