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

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

6 голосов
/ 02 апреля 2011

похоже, у меня возникли некоторые проблемы с пониманием семантики бита 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файл, chmod u + s, g + x file).Затем я добавил своего основного пользователя в группу «testuser», чтобы я мог выполнить файл как член группы.После всего этого права доступа к файлу выглядели так:

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

Так что, когда я вошел в систему как пользователь testuser, скрипт выдает:

Real UserID: 1001
Effective UserID: 1001

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

Real UserID: 1000
Effective UserID: 1000

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

Ответы [ 3 ]

8 голосов
/ 02 апреля 2011

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

4 голосов
/ 02 апреля 2011

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

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

0 голосов
/ 11 мая 2011

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

...