Некоторым программам нужен узко ограниченный доступ, которого обычно нет у вызывающих их пользователей. Для исполняемого обычного файла бит set-user-ID может предоставить новому процессу идентификатор владельца файла в качестве эффективного идентификатора пользователя. Тогда программа может выполнять операции, разрешённые этой учётной записи, сохраняя сведения о вызывающей стороне.
Разрешения · Урок 5
Setuid
Узнайте, как бит режима set-user-ID влияет на исполняемые программы и почему он требует тщательной проверки безопасности.
Setuid — не универсальное указание «запустить от root». Его действие зависит от владельца исполняемого файла, операционной системы, файловой системы и параметров подключения, а также от того, как программа управляет учётными данными.
Распознавание setuid
В системах, где исполняемый файл passwd использует setuid, подробный список может выглядеть так:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68248 Jan 10 09:30 /usr/bin/passwd
Строчная s в позиции выполнения владельца означает, что установлены и setuid, и право выполнения владельца. Если setuid присутствует, а право выполнения владельца отсутствует, ls -l показывает в этой позиции прописную S.
Не предполагайте, что все дистрибутивы имеют одинаковый режим или схему аутентификации. Проверяйте настоящую систему, а не полагайтесь на пример.
Что означает строчная s в позиции выполнения владельца?
Изменение учётных данных
Когда ядро учитывает setuid при выполнении, новый процесс обычно получает эффективный идентификатор пользователя на основе владельца исполняемого файла. Для программы, принадлежащей root, это может предоставить доступ, разрешённый root, но только во время работы программы и только через операции, выполняемые её кодом.
Этот механизм позволяет тщательно написанной программе проверить запрос и внести ограниченное изменение в защищённое состояние. Например, локальной утилите изменения пароля может требоваться контролируемый доступ к данным аутентификации, которые обычные пользователи не могут редактировать напрямую. Современные реализации также используют PAM, блокировку файлов, политики и другие защитные меры; один setuid не объясняет весь процесс.
Какой идентификатор прежде всего берётся у владельца файла, когда setuid исполняемого файла учитывается?
Установка и удаление бита
Установите setuid символически:
$ sudo chmod u+s myfile
В восьмеричной записи setuid добавляет 4 в начальную цифру специальных битов:
$ sudo chmod 4755 myfile
Здесь начальная 4 устанавливает setuid, а 755 задаёт обычные биты владельца, группы и остальных. Удалите setuid без других изменений режима командой chmod u-s myfile.
Какое начальное восьмеричное значение обозначает специальный бит setuid?
Setuid как чувствительный механизм безопасности
Дефект в привилегированной setuid-программе может превратиться в путь повышения привилегий. Такие программы должны проверять входные данные, контролировать доверенные переменные среды и пути файлов, избегать небезопасного запуска подпроцессов, сводить привилегированный код к минимуму и как можно раньше сбрасывать повышенные учётные данные.
Linux обычно не учитывает setuid для интерпретируемых скриптов, поскольку безопасной реализации мешают состояния гонки и особенности интерпретаторов. Файловые системы, подключённые с nosuid, также подавляют действие setuid и setgid. Когда возможно, предпочитайте более узкие механизмы: операции через службу, тщательно ограниченную политику sudo или capabilities.
Никогда не добавляйте setuid произвольной оболочке, интерпретатору или скопированной программе ради эксперимента в общей системе. Проверяйте существующие setuid-файлы и практикуйтесь только в изолированной одноразовой среде.
Каково назначение подключения файловой системы с nosuid?
Урок завершён
Вы завершили Setuid
Теперь вы можете распознать setuid и объяснить его влияние на учётные данные и безопасность.
Ищите
sилиSв позиции выполнения владельца.Связывайте выполнение setuid с эффективным идентификатором владельца исполняемого файла.
Устанавливайте или удаляйте бит символическими либо восьмеричными режимами
chmod.Рассматривайте каждую привилегированную программу как чувствительный к безопасности код.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт