Jump to content

успокоился

(Перенаправлено с SUID )

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

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

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

[ редактировать ]

The 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 '{}' '\'.

The 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 системный вызов недоступен пользователям, не являющимся пользователем root, в Unix. См. ограничения chroot для более подробной информации.

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

[ torvalds ~ ] $ 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: Changing password for thompson

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

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

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

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

[ torvalds ~ ] $ groups torvalds
torvalds : torvalds engineers

[ torvalds ~ ] $ stat -c "%a %U:%G %n" ./music/
2770 root:engineers ./music/

[ torvalds ~ ] $ mkdir ./music/electronic

[ torvalds ~ ] $ stat -c "%U:%G %n" ./music/electronic/
torvalds:engineers ./music/electronic/

[ torvalds ~ ] $ echo 'NEW FILE' > ./music/imagine.txt

[ torvalds ~ ] $ stat -c "%U:%G %n" ./music/imagine.txt
torvalds:engineers ./music/imagine.txt

[ torvalds ~ ] $ 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 engineers

[ torvalds /home/shared/ ] $ stat -c "%a  %U:%G  %n" ./videogames/
1770  torvalds:engineers  ./videogames/

[ torvalds /home/shared/ ] $ echo 'NEW FILE' > videogames/tekken

[ torvalds /home/shared/ ] $ su - wozniak
Password:

[ wozniak ~/ ] $ groups wozniak
wozniak : wozniak engineers

[ wozniak ~/ ] $ cd /home/shared/videogames

[ wozniak /home/shared/videogames/ ] $ rm tekken
rm: cannot remove ‘tekken’: Operation not permitted

Липкий бит с SGID

[ редактировать ]

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

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

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

[ torvalds /home/shared/ ] $ groups torvalds
torvalds : torvalds engineers

[ torvalds /home/shared/ ] $ stat -c "%a  %U:%G  %n" ./blog/
3171  root:engineers  ./blog/

[ torvalds /home/shared/ ] $ echo 'NEW FILE' > ./blog/thoughts

[ torvalds /home/shared/ ] $ su - wozniak
Password:

[ wozniak ~/ ] $ cd /home/shared/blog

[ wozniak /home/shared/blog/ ] $ groups wozniak
wozniak : wozniak engineers

[ wozniak /home/shared/blog/ ] $ stat -c "%a  %U:%G  %n" ./thoughts
664  torvalds:engineers  ./thoughts

[ wozniak /home/shared/blog/ ] $ rm thoughts
rm: cannot remove ‘thoughts’: Operation not permitted

[ wozniak /home/shared/blog/ ] $ mv thoughts /home/wozniak/
mv: cannot move ‘thoughts’ to ‘/home/wozniak/thoughts’: Operation not permitted

[ wozniak /home/shared/blog/ ] $ mv thoughts pondering
mv: cannot move ‘thoughts’ to ‘pondering’: Operation not permitted

[ wozniak /home/shared/blog/ ] $ echo 'REWRITE!' > thoughts

[ wozniak /home/shared/blog/ ] $ cat thoughts
REWRITE!

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

[ редактировать ]

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

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

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

См. также

[ редактировать ]
  1. ^ фон Хаген, Уильям (13 мая 2010 г.). Библия Ubuntu Linux . стр. 3–59. ISBN  9780470881804 .
  2. ^ Перейти обратно: а б с Фриш, Элин (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. ^ «Краткое описание ключевых патентов на программное обеспечение» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9d7d3885f4c036bc865ac343c74e6b9c__1712555520
URL1:https://arc.ask3.ru/arc/aa/9d/9c/9d7d3885f4c036bc865ac343c74e6b9c.html
Заголовок, (Title) документа по адресу, URL1:
setuid - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)