SUID, SGID, Sticky Bit

Тема дорожной карты · Linux & Unix Fundamentals

Специальные биты прав в Unix системах меняют логику доступа к файлам и директориям. Эти биты, такие как SUID, SGID и Sticky Bit, играют ключевую роль в обеспечении безопасности и управления доступом к ресурсам. Важность этих битов заключается в том, что они позволяют системе управлять теми пользователями и группами, которые имеют доступ к определённым файлам и директориям.

Как это работает

SUID (Set User ID), SGID (Set Group ID) и Sticky Bit — это специальные биты прав доступа, которые меняют поведение системы при работе с файлами и директориями. SUID (u+s, восьмерично 4000) на исполняемом файле позволяет запускать его с эффективным UID владельца, что делает возможным использование команд, таких как passwd и sudo. SGID (g+s, 2000) работает аналогично, но для группы, заставляя новые элементы наследовать группу, что особенно полезно для общих папок. Sticky bit (+t, 1000) на директории, таких как /tmp, разрешает удалять файлы только их владельцам, что предотвращает случайное удаление файлов другими пользователями.

Команды для работы с этими битами включают ls -l, которая показывает текущие права доступа, chmod 644 file для установки конкретных битов, и chown user:group file для изменения владельца. Восьмеричная нотация и символическая запись могут быть использованы для изменения прав доступа. Например, 755 восьмеричная нотация эквивалентна символической записи rwxr-xr-x.

Когда применять

По умолчанию, следует придерживаться принципа наименьших привилегий (Least Privilege). Для файлов это означает установку прав доступа 644, для директорий — 755, а для секретных файлов — 600. Группы можно использовать для обеспечения общего доступа к файлам и директориям, но добавление большого количества пользователей в группы, такие как wheel или sudo, может быть нежелательным. Мировое чтение и запись (777) обычно является ошибкой и создает уязвимости безопасности.

Для более тонкого управления правами доступа можно использовать ACL (Access Control Lists), которые обеспечивают более гибкое управление доступом, особенно полезно для CI-пайплайнов и деплоя пользователей. Команды setfacl и getfacl позволяют управлять ACL. Вместо использования root прав для выполнения одной конкретной задачи, можно использовать возможности (capabilities), такие как setcap, чтобы предоставить конкретные права для выполнения определенных действий, например, CAP_NET_BIND_SERVICE для работы с портом 80.

Типичные ошибки

Типичные ошибки при использовании SUID, SGID и Sticky Bit включают установку прав доступа 777 для того, чтобы программа заработала, что создает огромную дыру безопасности. Также ошибочным является использование команды chown -R для изменения владельца на неправильной директории, что может привести к тому, что вы больше не сможете стать root. Умножение маски (umask) влияет на права доступа новых файлов, и дефолтное значение 0022 может забирать write у группы и других пользователей. Наконец, использование setuid-бинари, которые запускают непроверенный код под root, является классической уязвимостью безопасности.

Связанные понятия

Полезные ресурсы