В Unix флаги прав доступа УИП и setgid (сокращенно «заданного идентификатора пользователя» и «установить идентификатор группы») [1] позволяет пользователям запускать исполняемый файл с файловой системой разрешений владельца исполняемого или группы , соответственно , и к поведению изменения в каталогах . Они часто используются, чтобы позволить пользователям компьютерной системы запускать программы с временно повышенными привилегиями для выполнения определенной задачи. Хотя предполагаемый идентификатор пользователя или предоставляемые привилегии идентификатора группы не всегда повышаются, как минимум они являются конкретными.
Флаги setuid
и setgid
необходимы для задач, требующих других привилегий, чем те, которые обычно предоставляются пользователю, например, возможность изменять системные файлы или базы данных для изменения пароля входа в систему. [2] Некоторые задачи, требующие дополнительных привилегий, могут быть не сразу очевидны, например, ping
команда, которая должна отправлять и прослушивать пакеты управления на сетевом интерфейсе.
Эффекты
setuid
И setgid
флаги имеют различные эффекты, в зависимости от того , применяются ли они к файлу, к каталогу или двоичной или отсутствия двоичного исполняемого файла. setuid
И setgid
флаги имеют эффект только на бинарных исполняемых файлов , а не на скриптах (например, Bash, Perl, Python). [3]
При установке на исполняемый файл
Когда атрибуты setuid
или setgid
установлены для исполняемого файла, то любые пользователи, способные выполнить файл, автоматически выполнят файл с привилегиями владельца файла (обычно root ) и / или группы файла, в зависимости от установленных флагов. [2] Это позволяет разработчику системы разрешить запуск доверенных программ, выполнение которых пользователю в противном случае было бы запрещено. Это не всегда может быть очевидным. Например, команде ping может потребоваться доступ к сетевым привилегиям, к которым не может получить доступ обычный пользователь; поэтому ему может быть присвоен флаг setuid, чтобы гарантировать, что пользователь, которому нужно выполнить эхо-запрос другой системы, может это сделать, даже если его собственная учетная запись не имеет необходимых привилегий для отправки пакетов.
В целях безопасности, вызывающий пользователь, как правило , запрещены системы от изменения нового процесса каким - либо образом, например, с использованием ptrace
, LD_LIBRARY_PATH
или передачи сигналов к нему, чтобы использовать повышенную привилегию, хотя сигналы от терминала по- прежнему будет принят.
setuid
И setgid
биты обычно устанавливает с помощью команды chmod
, установив высокие порядка восьмеричную цифру 4 для setuid
или 2 для setgid
. « » Будет установить как и биты (4 + 2 = 6), что делает файл чтение / запись / исполняемый для владельца (7) и исполняемый группой (первый 1) и другие (1) второго. Когда пользователь, не являющийся владельцем, выполняет файл, процесс запускается с разрешениями пользователя и группы, установленными для него его владельцем. Например, если файл принадлежит пользователю и группе , он будет запускаться независимо от того, кто запускает файл.chmod 6711 file
setuid
setgid
root
wheel
root:wheel
Большинство реализаций chmod
команды также поддерживают более мелкие символьные аргументы для установки этих битов. Предпочтительно более мелкозернистый режим показан на демонстрации ниже как " chmod ug+s
"
Влияние на безопасность
Хотя эта setuid
функция очень полезна во многих случаях, ее неправильное использование может представлять угрозу безопасности [2], если setuid
атрибут назначается исполняемым программам, которые не были тщательно спроектированы. Из-за потенциальных проблем безопасности [4] многие операционные системы игнорируют setuid
атрибут при применении к исполняемым сценариям оболочки .
Наличие setuid
исполняемых файлов объясняет, почему chroot
системный вызов недоступен для пользователей без полномочий root в Unix. См. Ограниченияchroot
для более подробной информации.
При установке в каталоге
Установка setgid
разрешения для каталога (" chmod g+s
") приводит к тому, что новые файлы и подкаталоги, созданные в нем, наследуют его идентификатор группы , а не основной идентификатор группы пользователя, создавшего файл (идентификатор владельца никогда не затрагивается, только идентификатор группы) .
- Вновь созданные подкаталоги наследуют
setgid
бит. Таким образом, это позволяет создать общую рабочую область для группы без неудобств, связанных с необходимостью того, чтобы члены группы явно изменяли свою текущую группу перед созданием новых файлов или каталогов. - влияет только на идентификатор группы новых файлов и подкаталогов, созданных после установки
setgid
бита, и не применяется к существующим объектам. - не влияет на идентификатор группы файлов, которые созданы в другом месте и перемещены в соответствующий каталог. Файл будет по-прежнему содержать идентификатор группы, который был применен, когда и где он был создан.
Установка setgid
бита в существующих подкаталогах должна выполняться вручную с помощью такой команды, какfind /path/to/directory -type d -exec chmod g+s '{}' \;
Набор setuid
разрешений для каталога игнорируется в большинстве систем UNIX и Linux . [ необходима цитата ] Однако FreeBSD может быть настроен для интерпретации setuid
аналогично setgid
, и в этом случае он заставляет все файлы и подкаталоги, созданные в каталоге, принадлежать владельцу этого каталога - простая форма наследования. [5] Обычно это не требуется в большинстве систем, основанных на BSD , поскольку по умолчанию каталоги обрабатываются так, как будто их setgid
бит всегда установлен, независимо от фактического значения. Как указано в open(2)
: «Когда создается новый файл, ему дается группа каталога, в котором он находится». [6]
Примеры
Проверка разрешений
Права доступа к файлу можно проверить в восьмеричной и / или буквенной форме с помощью инструмента командной строки. stat
[torvalds ~] $ stat -c "% a% A" ~ / test / 1770 drwxrwx - T
SUID
4701 для исполняемого файла, принадлежащего root и группе root
Пользователь с именем thompson пытается запустить файл. Установлено разрешение на выполнение для всех пользователей («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
Владелец процесса - это не пользователь, запустивший исполняемый файл, а владелец исполняемого файла.
SGID
2770 в каталоге с именем «музыка», принадлежащем пользователю «root» и группе «инженеры».
Пользователь с именем «torvalds», который принадлежит в первую очередь к группе «torvalds», но во вторую очередь к группе «инженеры», создает каталог с именем «electronic» в каталоге с именем «music». Групповое владение новым каталогом под названием «electronic» наследует «инженеров». То же самое и при создании нового файла с именем «imag.txt»
Без SGID групповое владение новым каталогом / файлом было бы «torvalds», поскольку это основная группа пользователей «torvalds».
[torvalds ~] $ groups torvalds torvalds: инженеры торвальдса[torvalds ~] $ stat -c "% a% U:% G% n" ./music/ 2770 root: инженеры ./music/[torvalds ~] $ mkdir ~ / music / electronic[torvalds ~] $ stat -c "% U:% G% n" ./music/electronic/ torvalds: engineering ./music/electronic/[torvalds ~] $ echo 'НОВЫЙ ФАЙЛ' > ./music/imagine.txt[торвальдс ~] $ stat -c "% U:% G% n" ./music/imagine.txt торвальдс: инженеры ./music/imagine.txt[torvalds ~] $ touch ~ / test[torvalds ~] $ stat -c "% U:% G% n" ~ / test torvalds: torvalds ~ / test
Липкий кусочек
1770 г. в каталоге «видеоигры», принадлежащем пользователю «torvalds» и группе «инженеры».
Пользователь с именем «torvalds» создает файл с именем «tekken» в каталоге с именем «videogames». Пользователь с именем «возняк», который также входит в группу «инженеры», пытается удалить файл с именем «tekken», но не может, поскольку он не является владельцем.
Без липкого бита «возняк» мог бы удалить файл, потому что каталог с именем «видеоигры» разрешает чтение и запись «инженерам». Его использование по умолчанию можно увидеть в /tmp
папке.
[torvalds / home / shared /] $ groups torvalds torvalds: инженеры торвальдса[torvalds / home / shared /] $ stat -c "% a% U:% G% n" ./videogames/ 1770 торвальдсов: инженеры ./videogames/[torvalds / home / shared /] $ echo 'NEW FILE' > видеоигры / tekken[torvalds / home / shared /] $ su - wozniak Пароль:[возняк ~ /] $ groups возняк возняк: возняк инженеры[возняк ~ /] $ cd / home / shared / видеоигры[wozniak / home / shared / videogames /] $ rm tekken rm: невозможно удалить tekken: операция запрещена
Клейкая насадка с SGID
3171 в каталоге с именем "блог", принадлежащем группе "инженеры" и пользователю "root".
Пользователь с именем «torvalds», который принадлежит в первую очередь к группе «torvalds», но во вторую очередь к группе «инженеры», создает файл или каталог с именем «мысли» внутри каталога «блог». Пользователь с именем «возняк», который также принадлежит к группе «инженеры», не может удалять, переименовывать или перемещать файл или каталог с именем «мысли», поскольку он не является владельцем и установлен бит закрепления. Однако, если «мысли» - это файл, то «возняк» может его редактировать.
Окончательное решение остается за липкой битой. Если липкий бит и SGID не были установлены, пользователь «возняк» мог переименовать, переместить или удалить файл с именем «мысли», потому что каталог с именем «блог» позволяет читать и писать по группе, а возняк принадлежит группе, и umask 0002 по умолчанию позволяет редактировать новые файлы по группам. Бит залипания и SGID можно комбинировать с чем-то вроде umask только для чтения или атрибута только для добавления.
[torvalds / home / shared /] $ groups torvalds torvalds: инженеры торвальдса[torvalds / home / shared /] $ stat -c "% a% U:% G% n" ./blog/ 3171 root: инженеры ./blog/[torvalds / home / shared /] $ echo 'НОВЫЙ ФАЙЛ' > ./blog/ Thinks[torvalds / home / shared /] $ su - wozniak Пароль:[возняк ~ /] $ cd / home / shared / blog[wozniak / home / shared / blog /] $ groups возняк возняк: инженеры возняка[wozniak / home / shared / blog /] $ stat -c "% a% U:% G% n" ./ мысли 664 торвальдса: инженеры ./ мысли[wozniak / home / shared / blog /] $ rm think rm: невозможно удалить "мысли": операция запрещена[wozniak / home / shared / blog /] $ mv мысли / home / wozniak / mv: невозможно переместить 'мысли' в '/ home / wozniak / Think': операция не разрешена[wozniak / home / shared / blog /] $ mv мысли обдумывая mv: невозможно переместить «мысли» в «размышления»: операция запрещена[wozniak / home / shared / blog /] $ echo 'ПЕРЕПИСАТЬ!' > мысли[wozniak / home / shared / blog /] мысли $ cat ПЕРЕПИСАТЬ!
Безопасность
Разработчики должны тщательно разрабатывать и реализовывать программы, использующие этот бит в исполняемых файлах, чтобы избежать уязвимостей безопасности, включая переполнение буфера и внедрение пути . Успешные атаки с переполнением буфера на уязвимые приложения позволяют злоумышленнику выполнить произвольный код с правами используемого процесса. В случае, если уязвимый процесс использует setuid
бит для запуска от root
имени, код будет выполняться с привилегиями root, фактически предоставляя злоумышленнику root-доступ к системе, в которой запущен уязвимый процесс.
Особое значение в случае setuid
процесса имеет окружение процесса. Если среда не очищена должным образом с помощью привилегированного процесса, его поведение может быть изменено непривилегированным процессом, который его запустил. [7] Например, ГНУ Libc был в одной точке уязвимы для эксплойт с использованием setuid
и переменной среды , которая позволила выполнение кода из ненадежных общих библиотек . [8]
История
setuid
Бит был изобретен Dennis Ritchie [9] и включенной в su
. [9] Его работодатель, в то время Bell Telephone Laboratories , подал заявку на патент в 1972 году; патент был получен в 1979 году под номером US 4135240.«Защита содержимого файлов данных». Позже патент стал общественным достоянием . [10]
Смотрите также
- Идентификатор пользователя
- Идентификатор группы
- Идентификатор процесса
chmod
sudo
- Запутанная депутатская проблема
- PolicyKit
- Безопасность Unix
- Отзыв привилегии (вычисления)
- Разделение привилегий
Рекомендации
- ^ фон Хаген, Уильям (13.05.2010). Библия Ubuntu Linux . С. 3–59. ISBN 9780470881804.
- ^ a b c {{cit e book | first = Æleen | last = Frisch | title = Основное системное администрирование | url = https://books.google.com/books?id=uRW8V9QOL7YC&q=setuid&pg=PT375 | page = 351 | publisher = O'Reilly | isbn = 9780596550493 | date = 2009-02-09}}
- ^ Биллимория, Кайвань Н. (2018). Практическое системное программирование с Linux: изучите интерфейсы системного программирования Linux, теорию и практику . Packt Publishing Ltd. стр. 250. ISBN 978-1-78899-674-7.
- ^ «Unix - часто задаваемые вопросы» .
- ^ «chmod - изменить режимы файлов» . freebsd.org .
- ^ «open, openat - открыть или создать файл для чтения, записи или выполнения» . freebsd.org .
- ^ Нил Браун (23 ноября 2010 г.). «Призраки прошлого Unix, часть 4: Проекты, требующие особого обслуживания» . LWN.net . Проверено 30 марта 2014 . CS1 maint: обескураженный параметр ( ссылка )
- ^ Джейк Эдж (27 октября 2010 г.). «Две уязвимости в glibc» . LWN.net . Проверено 30 марта 2014 . CS1 maint: обескураженный параметр ( ссылка )
- ^ а б Макилрой, М. Дуглас (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (технический отчет). CSTR. Bell Labs. 139. CS1 maint: обескураженный параметр ( ссылка )
- ^ «Краткое изложение основных патентов на программное обеспечение» .
Внешние ссылки
- Чен, Хао; Вагнер, Давид ; и Дин, Дрю; Сетуид демистифицированный (pdf)
- Цафрир, Дан; Да Силва, Дилма ; и Вагнер, Дэвид; Мрачный вопрос изменения идентичности процесса: пересмотр сетуида, демистификация (pdf)
- Поллок, Уэйн; Разрешения и режимы файлов и каталогов Unix