Suid | это... Что такое Suid? (original) (raw)

setuid и setgid (сокращение от "set user ID upon execution" (установка ID пользователя во время выполнения) и "set group ID upon execution" (установка ID группы во время выполнения), соответственно) являются Unix флагами прав доступа, которые разрешают пользователям запускать исполняемые файлы соответственно с правами владельца или группы исполняемого файла.

Содержание

setuid на файлах

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

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

Установленный setgid атрибут даёт повышение прав группы.

Атрибуты setuid и setgid обычно устанавливаются командой chmod установкой первой пары битов в 4 (setuid) или 2 (setgid). Команда "chmod 6711" соответственно установит обе пары битов сразу в (4+2=6). Также можно использовать символьные аргументы для установки этих битов командой "chmod ug+s".

setuid и setgid на папках

Биты setuid и setgid, установленные для папок, имеют совсем другой смысл.

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

[root@foo]# find /path/to/directory -type d -exec chmod g+s {} \;

Бит setuid, установленный для директорий игнорируется (в большинстве дистрибутивов Linux/Unix).

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

В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root. Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет «эффективный userID» на идентификатор того пользователя, который является владельцем этого файла. То есть, независимо от того — кто запускает эту программу, она при выполнении имеет права хозяина этого файла.

Пример

[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]$

История

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

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

Программа с установленным битом suid является «потенциально опасной». В «нормальном» случае она не позволит обычному пользователю сделать то, что выходит за пределы его полномочий (например, программа passwd разрешит пользователю изменить только собственный пароль). Но, даже незначительная ошибка в такой программе может привести к тому, что злоумышленник сможет заставит её выполнить ещё какие-нибудь действия, не предусмотренные автором программы.

Бит suid на неисполняемых файлах

Обычно, установка бита suid на неисполняемых файлах бессмысленна. Также бит не несет никакого смысла, если он установлен на директорию.

См. также