suid (сокр. от Set user ID) — атрибут исполняемого файла, позволяющий запустить его с правами владельца.
Содержание |
В 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.