Управление привилегиями в файловой системе
Привилегия — это механизм, который операционная система использует для управления определенными операциями. Каждая привилегия имеет определенные операции, связанные с ним, что вызывающий объект операции может выполняться, если выполнены следующие два условия:
- Привилегия должна быть проведена вызывающим абонентом.
- Кроме того, необходимо включить привилегию.
Принцип этих требований называется наименее привилегированным. Минимальные привилегии требуют включения привилегий перед их использованием, а не предполагается. Это требование сводит к минимуму вероятность того, что пользователь может непреднамеренно выполнить операцию, которую они не планировали. Например, SeRestorePrivilege обычно позволяет вызывающему объекту обойти обычные проверки доступа на запись к файлу. Например, администратор может не переопределить обычные проверки безопасности при копировании файла; однако при восстановлении того же файла с помощью программы резервного копирования и восстановления может потребоваться сделать это.
Для файловых систем существует множество привилегий, которые часто используются для изменения нормального поведения (в частности, проверок безопасности) для системы. Эти привилегии:
SeBackupPrivilege разрешает получение содержимого файла, даже если дескриптор безопасности в файле может не предоставлять такой доступ. Вызывающий объект с поддержкой SeBackupPrivilege не зависит от необходимости проверки безопасности на основе ACL.
SeRestorePrivilege разрешает изменение содержимого файла, даже если дескриптор безопасности в файле может не предоставлять такой доступ. Эту функцию также можно использовать для изменения владельца и защиты.
SeChangeNotifyPrivilege позволяет пройти справа. Эта привилегия является важной оптимизацией в Windows, так как она удаляет затраты на выполнение проверки безопасности для каждого каталога в пути.
SeManageVolumePrivilege позволяет выполнять определенные операции управления на уровне тома, такие как том блокировки, дефрагментация, отключение тома и настройка допустимой длины данных в Windows XP и более поздних версиях. Драйвер файловой системы явно применяет эту определенную привилегию в первую очередь на основе операций FSCTL. В этом случае файловая система принимает решение о применении этой привилегии. Определение того, хранится ли эта привилегия вызывающей стороны, осуществляется монитором ссылок на безопасность в рамках обычной проверки привилегий.
Хотя существует множество других привилегий, они обычно непрозрачны для файловых систем, и интерпретирует их только монитор ссылок на безопасность (SRM).
Основные подпрограммы Windows для управления привилегиями в файловой системе:
SePrivilegeCheck выполняет проверку определенного набора необходимых привилегий.
SeSinglePrivilegeCheck выполняет проверку для одной конкретной привилегии; это оптимизированная версия SePrivilegeCheck.
SeAccessCheck выполняет обычную проверку доступа к объекту (обычно файловый объект для файловой системы).
SeFreePrivileges освобождает блок привилегий, возвращенный предыдущим вызовом SeAccessCheck.
SeAppendPrivileges добавляет включенные привилегии в структуру ACCESS_STATE. Как правило, файловая система будет использовать ACCESS_STATE, переданную ему во время IRP_MJ_CREATE обработки.