Меню
Главная
Случайная статья
Настройки
|
setuid, SUID и setgid, SGID (от англ. set user ID upon execution — «установка ID пользователя во время выполнения» и set group ID upon execution — «установка ID группы во время выполнения») являются флагами прав доступа в файловых системах операционных систем семейства Unix, которые позволяют пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла, а установленные на каталогах, обеспечивают механизм наследования группы и, иногда, владельца каталогов и файлов.
Содержание
Общая информация
В Unix-подобных операционных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю (root).
Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет эффективный идентификатор пользователя (EUID) на идентификатор того пользователя, который является владельцем этого файла. То есть, независимо от того, кто запускает эту программу, она при выполнении имеет права хозяина исполняемого файла программы.
История
Бит suid был изобретен Деннисом Ритчи и запатентован в США компанией AT&T в 1979 году. Позже патент 4135240 «Protection of data file contents» был выложен в свободный доступ.[источник не указан 896 дней]
В SunOS 4.0 разработчики первыми реализовали механизм наследования владельца и группы каталога для создаваемых в нём файлов и каталогов с помощью битов SUID и GUID. В Unix System V эта функция была реализована с версии Release 4[1].
setuidиsetgidна файлах
setuid и setgid, установленные на файлах, используются для подмены (косвенной установки) эффективных идентификаторов процесса, поскольку прямая замена идентификаторов UID и GID у процесса в ОС семейства UNIX простым пользователям запрещена[2].
Атрибуты setuid и setgid устанавливаются командой chmod установкой 2 и 3 битов четвёртого знака восьмиричного числа: соответствие маске 04000 означает setuid, 02000 означает setgid. Например, команда chmod 6711 file установит на файле оба бита[2].
Символьные аргументы chmod для установки и снятия этих битов — +s и -s , например, команда chmod u+s file установит SUID, а команда chmod ug-s file снимет с файла оба бита[2][3].
Aтрибутsetuidустановлен для исполняемого файла
Бит setuid используется для замены эффективного идентификатора пользователя при запуске исполняемого файла[2][3].
Типично процесс работает с эффективными идентификаторами, совпадающими с идентификаторами UID и GID запустившего его пользователя. Но при запуске на выполнение файла с атрибутом setuid любым пользователем, запущенный процесс работает от идентификатора пользователя, являющегося владельцем файла — операционная система назначет этому процессу EUID, соответствующий UID владельца файла. В частности, этот механизм используется для повышения привилегий процесса до суперпользователя (root)[2][3].
Из-за возможности состояния гонки многие операционные системы игнорируют установленный атрибут к shell-скриптам
Хотя атрибут setuid очень удобен во многих случаях, его неправильное использование может представлять угрозу безопасности, когда атрибут присваивается исполняемому файлу, который не тщательно спроектирован. Пользователи могут использовать уязвимости в недоработанных программах, чтобы получить повышенные привилегии или непреднамеренно запустить программу троянского коня.
Aтрибутsetgidустановлен для исполняемого файла
Установленный бит setgid заменяет эффективный идентификатор группы процесса на идентификатор группы его исполняемого файла (вместо GID запустившего его пользователя)[2].
setgidна каталогах
Бит setgid, установленный для каталога, имеет специальное значение[2][4].
Установленный для каталога бит setgid (команда установки: chmod g+s ) указывает операционной системе создавать в нём новые каталоги и файлы, наследующие ID группы этого каталога вместо ID группы пользователя, создавшего файл, а новые подкаталоги также наследуют бит setgid[2][1]. Это позволяет создать общее рабочее пространство для группы без неудобств членам группы явно менять их текущую группу для создания новых файлов и каталогов[1].
setuidна каталогах
Установленный на каталоге бит setuid используется во FreeBSD в случае компиляции ядра с поддержкой suiddir — всем созданным в каталоге файлам и подкаталогам назначается владельцем владелец родительского каталога. Эта функция является уязвимостью и по умолчанию отключена[2].
Бит setuid, установленный для каталогов, игнорируется в большинстве версий Unix
|
|