Suid

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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). [источник не указан 58 дней]

Общая информация[править | править вики-текст]

В 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 на неисполняемых файлах бессмысленна.

См. также[править | править вики-текст]