stringtranslate.com

setuid

Флаги прав доступа Unix и Linux setuid и setgid (сокращение от set user и set groupident ) [1] позволяют пользователям запускать исполняемый файл с разрешениями файловой системы владельца или группы исполняемого файла соответственно и изменять поведение в каталогах. Они часто используются, чтобы позволить пользователям компьютерной системы запускать программы с временно повышенными привилегиями для выполнения определенной задачи. Хотя предоставляемые привилегии предполагаемого идентификатора пользователя или идентификатора группы не всегда повышены, они, как минимум, специфичны.

Флаги setuidи setgidнеобходимы для задач, требующих привилегий, отличных от тех, которые обычно предоставляются пользователю, например, возможности изменять системные файлы или базы данных для изменения своего пароля для входа. [2] Однако некоторые задачи, требующие дополнительных привилегий, могут быть неочевидны сразу, например, команда ping, которая должна отправлять и прослушивать пакеты управления на сетевом интерфейсе.

Режимы файлов

Биты setuidи setgidобычно представляются как значения 4 setuidи 2 setgidв старшей восьмеричной цифре файлового режима. Например, установлены 6711биты setuidи setgid( 4 + 2 = 6 ), а также файл, доступный для чтения/записи/исполняемый для владельца (7), а также исполняемый для группы (первый 1) и других (второй 1). Большинство реализаций имеют символическое представление этих битов; в предыдущем примере это могло быть u=rwx,go=x,ug+s.

Обычно chmodрекурсивный режим не ограничен каталогами, поэтому изменение существующего дерева каталогов необходимо выполнять вручную с помощью такой команды, как .find /path/to/directory -type d -exec chmod g+s '{}' '\'

Последствия

Флаги setuidи setgidимеют разные эффекты в зависимости от того, применяются ли они к файлу, каталогу, двоичному или недвоичному исполняемому файлу. Флаги setuidи setgidдействуют только на двоичные исполняемые файлы, а не на сценарии (например, Bash, Perl, Python). [3]

При установке в исполняемом файле

Если атрибуты setuidили setgidустановлены для исполняемого файла, то любые пользователи, способные выполнить файл, будут автоматически выполнять его с привилегиями владельца файла (обычно root ) и/или группы файла, в зависимости от установленных флагов. [2] Это позволяет разработчику системы разрешить запуск доверенных программ, которые в противном случае пользователь не смог бы выполнить. Это не всегда может быть очевидно. Например, команде ping может потребоваться доступ к сетевым привилегиям, к которым обычный пользователь не имеет доступа; поэтому ему может быть присвоен флаг setuid, чтобы гарантировать, что пользователь, которому необходимо проверить связь с другой системой, сможет это сделать, даже если его учетная запись не имеет необходимых привилегий для отправки пакетов.

Влияние на безопасность

В целях безопасности система обычно запрещает вызывающему пользователю каким-либо образом изменять новый процесс, например, используя ptraceили LD_LIBRARY_PATHотправляя ему сигналы для использования повышенных привилегий, хотя сигналы от терминала все равно будут приниматься.

Хотя эта setuidфункция во многих случаях очень полезна, ее неправильное использование может представлять угрозу безопасности [2] , если setuidатрибут назначен исполняемым программам, которые не разработаны тщательно. Из-за потенциальных проблем безопасности [4] многие операционные системы игнорируют этот setuidатрибут при его применении к исполняемым сценариям оболочки . [ нужна цитата ]

Наличие setuidисполняемых файлов объясняет, почему chrootсистемный вызов недоступен для пользователей Unix без полномочий root . См. ограниченияchroot для более подробной информации.

При установке в каталоге

Установка setgidразрешения для каталога приводит к тому, что файлы и подкаталоги, созданные в нем, наследуют владение группой, а не основной группой процесса создания файла. Созданные подкаталоги также наследуют этот setgidбит. Политика применяется только во время создания и, следовательно, только в перспективе. Каталоги и файлы, существующие на момент setgidприменения бита, не затрагиваются, как и каталоги и файлы, перемещенные в каталог, в котором установлен бит.

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

Разрешения setuid, установленные для каталога, игнорируются в большинстве систем UNIX и Linux . [5] [ нужна цитация ] Однако FreeBSD можно настроить для интерпретации setuidаналогично setgid, и в этом случае она заставляет все файлы и подкаталоги, созданные в каталоге, принадлежать владельцу этого каталога - простая форма наследования. [6] Обычно это не требуется в большинстве систем, производных от BSD , поскольку по умолчанию каталоги обрабатываются так, как будто их setgidбит всегда установлен, независимо от фактического значения. Как сказано в разделе open(2): «Когда создается новый файл, ему присваивается группа каталога, в котором он содержится». [7]

Примеры

Проверка разрешений

Разрешения файла можно проверить в восьмеричной и/или алфавитной форме с помощью инструмента командной строки.stat

[ Торвальдс ~ ] $ stat  -c "%a %A" ~/test/ 1770 drwxrwx--T  

СУИД

4701 в исполняемом файле, принадлежащем root и группе root.

Пользователь с именем «Томпсон» пытается выполнить файл. Для всех пользователей установлено разрешение на исполнение («1»), поэтому «Томпсон» может выполнить файл. Владельцем файла является root, и установлено разрешение SUID («4»), поэтому файл выполняется как root.

Причина, по которой исполняемый файл будет запускаться как «root», заключается в том, что он может изменять определенные файлы, к которым обычно не разрешено пользователю, без предоставления пользователю полного root-доступа.

Использование этого по умолчанию можно увидеть в /usr/bin/passwdдвоичном файле. /usr/bin/passwdнеобходимо изменить /etc/passwdи /etc/shadowкоторые хранят информацию об учетных записях и хэши паролей для всех пользователей, и их может изменить только пользователь «root».

[ thompson ~ ] $ stat  -c "%a %U:%G %n" /usr/bin/passwd 4701 root:root /usr/bin/passwd  [ thompson ~ ] $ passwd passwd: Изменение пароля для Thompson

Владельцем процесса является не пользователь, запустивший исполняемый файл, а владелец исполняемого файла.

СГИД

2770 в каталоге с именем «музыка», принадлежащем пользователю «root» и группе «инженеры».

Пользователь с именем «torvalds», который принадлежит в первую очередь к группе «torvalds», но во вторую очередь к группе «инженеры», создает каталог с именем «electronic» в каталоге с именем «music». Групповое владение новым каталогом под названием «электронный» наследуется «инженерами». То же самое происходит при создании нового файла с именем «imagine.txt».

Без SGID группа владельцев нового каталога/файла была бы «torvalds», поскольку это основная группа пользователей «torvalds».

[ Торвальдс ~ ] $ группы  Торвальдс Торвальдс : инженеры Торвальдса[ torvalds ~ ] $ stat  -c "%a %U:%G %n" ./music/ 2770 root:engineers ./music/  [ Торвальдс ~ ] $ mkdir  ./music/electronic[ torvalds ~ ] $ stat  -c "%U:%G %n" ./music/electronic/ torvalds:engineers ./music/electronic/  [ Торвальдс ~ ] $ echo 'НОВЫЙ ФАЙЛ' > ./music/imagine.txt   [ torvalds ~ ] $ stat  -c "%U:%G %n" ./music/imagine.txt torvalds:engineers ./music/imagine.txt  [ Торвальдс ~ ] $ touch  ~/test[ torvalds ~ ] $ stat  -c "%U:%G %n" ~/test torvalds:torvalds ~/test  

Липкий бит

1770 в каталоге «видеоигры», принадлежащем пользователю «Торвальдс» и группе «Инженеры».

Пользователь с именем «torvalds» создает файл с именем «tekken» в каталоге с именем «videogames». Пользователь с именем «возняк», который также входит в группу «инженеры», пытается удалить файл с именем «tekken», но не может, поскольку не является его владельцем.

Без липкого бита «Возняк» мог бы удалить файл, поскольку каталог с именем «видеоигры» позволяет «инженерам» читать и писать. Использование этого параметра по умолчанию можно увидеть в /tmpпапке.

[ torvalds /home/shared/ ] $ groups  torvalds torvalds : инженеры Торвальдса[ torvalds /home/shared/ ] $ stat  -c "%a %U:%G %n" ./videogames/ 1770 torvalds:engineers ./videogames/  [ torvalds /home/shared/ ] $ echo 'НОВЫЙ ФАЙЛ' > videogames/tekken   [ torvalds /home/shared/ ] $ su  -  wozniak Пароль:[ возняк ~/ ] $ группы  возняк возняк : инженеры возняка[ возняк ~/ ] $ cd  /home/shared/videogames[ wozniak /home/shared/videogames/ ] $ rm  tekken rm: невозможно удалить «tekken»: операция не разрешена

Липкий бит с SGID

3171 в каталоге с именем «блог», принадлежащем группе «инженеры» и пользователю «root».

Пользователь с именем «Торвальдс», который принадлежит в первую очередь к группе «Торвальдс», но во вторую очередь к группе «Инженеры», создает файл или каталог с именем «мысли» внутри каталога «блог». Пользователь с именем «возняк», который также принадлежит к группе «инженеры», не может удалить, переименовать или переместить файл или каталог с именем «мысли», поскольку он не является владельцем и установлен бит закрепления. Однако если «мысли» — это файл, то «Возняк» может его редактировать.

Окончательное решение принимает Sticky Bit. Если бы липкий бит и SGID не были установлены, пользователь «Возняк» мог бы переименовать, переместить или удалить файл с именем «мысли», поскольку каталог с именем «блог» разрешает чтение и запись группой, а Возняк принадлежит к группе, и маска по умолчанию 0002 позволяет редактировать новые файлы по группам. Бит Sticky и SGID можно комбинировать с чем-то вроде umask только для чтения или атрибутом только для добавления.

[ torvalds /home/shared/ ] $ groups  torvalds torvalds : инженеры Торвальдса[ torvalds /home/shared/ ] $ stat  -c "%a %U:%G %n" ./blog/ 3171 root:engineers ./blog/  [ torvalds /home/shared/ ] $ echo 'НОВЫЙ ФАЙЛ' > ./blog/ Thoughts   [ torvalds /home/shared/ ] $ su  -  wozniak Пароль:[ возняк ~/ ] $ cd  /home/shared/blog[ возняк /home/shared/blog/ ] $ группы  возняк возняк : инженеры возняка[ wozniak /home/shared/blog/ ] $ stat  -c "%a %U:%G %n" ./ мысли 664 torvalds:engineers ./ мысли  [ wozniak /home/shared/blog/ ] $ rm  мысли rm: невозможно удалить «мысли»: операция не разрешена[ wozniak /home/shared/blog/ ] $ mv  мысли  /home/wozniak/ mv: невозможно переместить «мысли» в «/home/wozniak/ мысли»: операция не разрешена[ wozniak /home/shared/blog/ ] $ mv  мысли  обдумывают mv: невозможно переместить «мысли» в «обдумывание»: операция не разрешена[ возняк /home/shared/blog/ ] $ echo 'ПЕРЕПИСАТЬ!' > мысли   [ возняк /home/shared/blog/ ] $ кошачьи  мысли ПЕРЕПИШИТЕ!

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

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

Особое значение в случае процесса setuidимеет среда процесса. Если среда не очищается должным образом привилегированным процессом, ее поведение может быть изменено непривилегированным процессом, который ее запустил. [8] Например, GNU libc в какой-то момент была уязвима для использования эксплойтаsetuid и переменной среды, которая позволяла выполнять код из ненадежных общих библиотек . [9]

История

Бита setuidбыла изобретена Деннисом Ритчи [10] и включена в su. [10] Его работодатель, тогда еще Bell Telephone Laboratories , подал заявку на патент в 1972 году; патент был выдан в 1979 году под номером патента США 4135240  «Защита содержимого файла данных». Позднее патент был помещен в общественное достояние . [11]

Смотрите также

Рекомендации

  1. ^ фон Хаген, Уильям (13 мая 2010 г.). Библия Ubuntu Linux. стр. 3–59. ISBN 9780470881804.
  2. ^ abc Фриш, Элин (9 февраля 2009 г.). Основное системное администрирование. О'Рейли. п. 351. ИСБН 9780596550493.
  3. ^ Биллимория, Кайван Н. (2018). Практическое системное программирование в Linux: изучите интерфейсы, теорию и практику системного программирования Linux. Packt Publishing Ltd. с. 250. ИСБН 978-1-78899-674-7.
  4. ^ «Unix — часто задаваемые вопросы» .
  5. ^ «27.5 Каталоги и биты Set-User-ID и Set-Group-ID» . GNU Coreutils 9.1 . Фонд свободного программного обеспечения . Проверено 13 декабря 2022 г.
  6. ^ "chmod -- изменить режимы файлов". freebsd.org .
  7. ^ «open, openat — открыть или создать файл для чтения, записи или выполнения». freebsd.org .
  8. Браун, Нил (23 ноября 2010 г.). «Призраки прошлого Unix, часть 4: Проекты, требующие сложного обслуживания». LWN.net . Проверено 30 марта 2014 г.
  9. ^ Эдж, Джейк (27 октября 2010 г.). «Две уязвимости glibc». LWN.net . Проверено 30 марта 2014 г.
  10. ^ Аб Макилрой, М. Дуглас (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  11. ^ «Краткое описание ключевых патентов на программное обеспечение».

Внешние ссылки