Во многих системах пользователь root или суперпользователь может полностью управлять системой. Подсистема для UNIX-приложений (SUA) не отличает пользователя root. При разработке стандарта POSIX проблемы, связанные с пользователем root, были учтены. Вместо пользователя root стандарт POSIX определяет соответствующие привилегии для некоторых действий.
В этом разделе
setuid и setgid
Механизмы setuid и setgid позволяют выполняемой программе принимать на себя определенные возможности субъекта безопасности, отличного от пользователя, выполняющего программу. В результате программа может чередовать соответствующие возможности пользователя, запустившего программу, и возможности другого субъекта безопасности.
Действие этих механизмов не совпадает с функциями соответствующих привилегий. Хотя механизмы setuid и setgid позволяют приложению управлять ответом на вопрос «Кто вы?», соответствующие привилегии отвечают на вопрос: «Что вы можете делать?»
Подсистема для UNIX-приложений и учетные записи
В типичных средах UNIX существует единственный пользователь, обладающий всеми привилегиями. Такой пользователь (root) имеет uid == 0. В подсистеме для UNIX-приложений все привилегии, поддерживаемые в данной системе, предоставляются пользователям, являющимся членами либо группы «Администраторы», либо группы «Администраторы домена» для этой системы. Не следует входить в систему, используя учетную запись администратора. Любой пользователь, входящий в группу «Администраторы» или «Администраторы домена», обладает привилегиями root. Не все привилегии, определенные в POSIX или UNIX, доступны в SUA, то есть, существуют привилегии, не предоставленные ни одному пользователю.
Для многих действий обычно требуются соответствующие привилегии. Среди них доступ к файловой системе, передача сигналов другим процессам (управление процессами) или изменение действующего идентификатора пользователя (UID) или идентификатора группы (GID) для процесса, чтобы изменить для этого процесса возможность выполнять определенные действия.
В соответствии со стандартом POSIX для файла определены разрешения, включающие биты установки UID (setuid) и установки GID (setgid). Если для файла установлены любой из битов либо оба бита и процесс выполняет этот файл, процесс получает UID или GID файла. При аккуратном использовании этот механизм позволяет непривилегированному пользователю выполнять программы с более высокими привилегиями, чем у владельца файла или группы. Но при неправильном использовании такой подход может представлять опасность, позволяя непривилегированным пользователям выполнять действия, которые должны выполняться только администратором. По этой причине SUA по умолчанию не поддерживает данный механизм. Вместо этого при попытке выполнить файл, для которого установлен бит setuid либо бит setgid, SUA не выполняет файл и возвращает код ошибки ENOSETUID.
Вопросы настройки setuid в подсистеме для UNIX-приложений
При работе с приложением, для которого необходимо стандартное поведение POSIX, можно настроить SUA так, чтобы выполнялись файлы с установленными битами setuid или setgid. Если SUA настроена таким образом, то при выполнении процессом файла с установленным битом setuid или setgid SUA создает для процесса локальные токены безопасности с привилегиями, назначенными владельцу или группе файла. Так как токены являются локальными, они не распознаются другими компьютерами сети. Это означает, что, даже если файл принадлежит, например, члену группы «Администраторы домена», процесс не будет обладать доверенным доступом к другим компьютерам домена через сеть Microsoft® Windows®. Вместо этого, привилегии будут действовать только на том компьютере, на котором выполняется процесс.
Например, допустим, процесс выполняет файл программы с установленным битом setuid, принадлежащий участнику группы «Администраторы домена». Если эта программа попытается изменить пароль пользователя домена, то эта попытка закончится неудачей, так как токены безопасности процесса являются локальными и поэтому не распознаются другими системами домена. Если, с другой стороны, программа попытается изменить пароль локального пользователя, эта попытка будет успешной, так как владелец файла является членом группы «Администраторы домена», который обычно входит в группу «Администраторы» локального компьютера. Сведения о настройке SUA для выполнения файлов с установленными битами setuid или setgid см. в файлах справки, поставляемых с загружаемым пакетом служебных программ и SDK для UNIX-приложений.
Для функций setuid(2), setgid(2) и chroot(2) процесс должен обладать действующим идентификатором UID, который соответствует системной учетной записи, либо учетной записи администратора локального или основного домена. Изменить UID или GID на другой идентификатор в том же домене можно только, используя учетную запись локального администратора.
Для функций chown(1), chmod(1) и chgrp(1) учетной записи необходимо назначить привилегии Windows SE_BACKUP и SE_RESTORE. Это позволит выполнять операции make с файлами, принадлежащими другим пользователям или группам, а также изменять разрешения на файлы, принадлежащие другим пользователям. Этими разрешениями обычно обладают учетные записи администратора и оператора архива.