Русская Википедия:Suid

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Заголовок со строчной буквы setuid, SUID и setgid, SGID (от Шаблон:Lang-en — «установка ID пользователя во время выполнения» и Шаблон:Lang-en2 — «установка ID группы во время выполнения») являются флагами прав доступа в файловых системах операционных систем семейства Unix, которые позволяют пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла, а установленные на каталогах, обеспечивают механизм наследования группы и, иногда, владельца каталогов и файлов.

Общая информация

Шаблон:Нет ссылок в разделе В Unix-подобных операционных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю (root).

Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет эффективный идентификатор пользователя (EUID) на идентификатор того пользователя, который является владельцем этого файла. То есть, независимо от того, кто запускает эту программу, она при выполнении имеет права хозяина исполняемого файла программы.

История

Бит suid был изобретен Деннисом Ритчи и запатентован в США компанией AT&T в 1979 году. Позже патент 4135240 «Protection of data file contents» был выложен в свободный доступ.Шаблон:Нет АИ

В SunOS 4.0 разработчики первыми реализовали механизм наследования владельца и группы каталога для создаваемых в нём файлов и каталогов с помощью битов SUID и GUID. В Unix System V эта функция была реализована с версии Release 4Шаблон:Sfn.

setuid и setgid на файлах

setuid и setgid, установленные на файлах, используются для подмены (косвенной установки) эффективных идентификаторов процесса, поскольку прямая замена идентификаторов UID и GID у процесса в ОС семейства UNIX простым пользователям запрещенаШаблон:Sfn.

Атрибуты setuid и setgid устанавливаются командой chmod установкой 2 и 3 битов четвёртого знака восьмиричного числа: соответствие маске 04000 означает setuid, 02000 означает setgid. Например, команда chmod 6711 file установит на файле оба битаШаблон:Sfn.

Символьные аргументы chmod для установки и снятия sticky-битов — +s и -s, например, команда chmod u+s file установит SUID, а команда chmod ug-s file снимет с файла оба битаШаблон:SfnШаблон:Sfn.

Aтрибут setuid установлен для исполняемого файла

Бит setuid используется для замены эффективного идентификатора пользователя при запуске исполняемого файлаШаблон:SfnШаблон:Sfn.

Типично процесс работает с эффективными идентификаторами, совпадающими с идентификаторами UID и GID запустившего его пользователя. Но при запуске на выполнение файла с атрибутом setuid любым пользователем, запущенный процесс работает от идентификатора пользователя, являющегося владельцем файла — операционная система назначет этому процессу EUID, соответствующий UID владельца файла. В частности, этот механизм используется для повышения привилегий процесса до суперпользователя (root)Шаблон:SfnШаблон:Sfn.

Из-за возможности состояния гонки многие операционные системы игнорируют установленный атрибут к shell-скриптамШаблон:Нет АИ.

Хотя атрибут setuid очень удобен во многих случаях, его неправильное использование может представлять угрозу безопасности, когда атрибут присваивается исполняемому файлу, который не тщательно спроектирован. Пользователи могут использовать уязвимости в недоработанных программах, чтобы получить повышенные привилегии или непреднамеренно запустить программу троянского коня.Шаблон:Нет АИ

Aтрибут setgid установлен для исполняемого файла

Установленный бит setgid заменяет эффективный идентификатор группы процесса на идентификатор группы его исполняемого файла (вместо GID запустившего его пользователя)Шаблон:Sfn.

setgid на каталогах

Бит setgid, установленный для каталога, имеет специальное значениеШаблон:SfnШаблон:Sfn.

Установленный для каталога бит setgid (команда установки: chmod g+s) указывает операционной системе создавать в нём новые каталоги и файлы, наследующие ID группы этого каталога вместо ID группы пользователя, создавшего файл, а новые подкаталоги также наследуют бит setgidШаблон:SfnШаблон:Sfn. Это позволяет создать общее рабочее пространство для группы без неудобств членам группы явно менять их текущую группу для создания новых файлов и каталоговШаблон:Sfn.

setuid на каталогах

Установленный на каталоге бит setuid используется во FreeBSD в случае компиляции ядра с поддержкой suiddir — всем созданным в каталоге файлам и подкаталогам назначается владельцем владелец родительского каталога. Эта функция является уязвимостью и по умолчанию отключенаШаблон:Sfn.

Бит setuid, установленный для каталогов, игнорируется в большинстве версий UnixШаблон:Нет АИ.

Шаблон:Орисс в разделе

Наследование устанавливается только для новых файлов и каталогов. Уже существующим файлам и каталогам этот бит нужно устанавливать вручную, например:

find /path/to/directory -type d -exec chmod g+s {} \;

Также следует учесть, что для всех пользователей такой группы umask должна быть изменена со значения по умолчанию 0022 на 0012, иначе новые файлы/папки не будут иметь право записи (w) для группы.

setuid и setgid на неисполняемых файлах

Установка битов suid/sgid на неисполняемых файлах, как правило, бессмысленна.

Пример

[bob@foo]$ cat /etc/passwd
alice:x:1007:1007::/home/alice:/bin/bash
bob:x:1008:1008::/home/bob:/bin/bash

[bob@foo]$ cat printid.c

# include <stdlib.h>
# include <stdio.h>
# include <unistd.h>
# include <sys/types.h>

int main(void)
{
    printf("Real UID\t= %d\n", getuid());
    printf("Effective UID\t= %d\n", geteuid());
    printf("Real GID\t= %d\n", getgid());
    printf("Effective GID\t= %d\n", getegid());

    return EXIT_SUCCESS;
}

[bob@foo]$ gcc -Wall printid.c -o printid
[bob@foo]$ chmod ug+s printid
[bob@foo]$ su alice
Password:
[alice@foo]$ ls -l
-rwsr-sr-x 1 bob bob 6944 2007-11-06 10:22 printid
[alice@foo]$ ./printid
Real UID = 1007
Effective UID = 1008
Real GID = 1007
Effective GID = 1008
[alice@foo]$

Безопасность

Программа с установленным битом setuid является потенциально опасной, и неиспользуемые программы с установленным битом SUID лучше убрать из установленной операционной системы. Злоумышленник, проникнув в систему, старается получить максимально возможные права доступа, и, например, сумев из-за ошибки владельца системы установить бит SUID на интерпретатор команд bash, он получит права суперпользвоателя даже залогинившись гостевой учётной записьюШаблон:Sfn.

См. также

Примечания

Шаблон:Примечания

Ссылки