Gerenciando privilégios em um sistema de arquivos
Privilégio é um mecanismo que o sistema operacional usa para controlar operações específicas. Cada privilégio tem operações específicas associadas a ele que o chamador da operação pode executar se as duas condições a seguir forem atendidas:
- O privilégio deve ser mantido pelo chamador.
- O privilégio também deve ser habilitado.
O princípio desses requisitos é conhecido como privilégio mínimo. O privilégio mínimo requer que os privilégios sejam habilitados antes de serem usados, em vez de assumidos. Esse requisito minimiza a chance de um usuário executar inadvertidamente uma operação que não pretendia. Por exemplo, SeRestorePrivilege normalmente permitiria que o chamador ignorasse as verificações usuais para acesso de gravação a um arquivo. Por exemplo, um administrador pode não querer realmente substituir as verificações de segurança normais ao copiar um arquivo; no entanto, eles podem desejar fazê-lo ao restaurar esse mesmo arquivo usando um utilitário de backup/restauração.
Para sistemas de arquivos, há muitos privilégios que geralmente são usados para modificar o comportamento normal (notadamente, verificações de segurança) para o sistema. Esses privilégios são:
O SeBackupPrivilege permite a recuperação de conteúdo do arquivo, mesmo que o descritor de segurança no arquivo não conceda esse acesso. Um chamador com SeBackupPrivilege habilitado evita a necessidade de qualquer verificação de segurança baseada em ACL.
SeRestorePrivilege permite a modificação do conteúdo do arquivo, mesmo que o descritor de segurança no arquivo possa não conceder esse acesso. Esta função também pode ser usada para alterar o proprietário e a proteção.
SeChangeNotifyPrivilege permite atravessar a direita. Esse privilégio é uma otimização importante no Windows porque elimina o custo de executar uma verificação de segurança em cada diretório em um caminho.
SeManageVolumePrivilege permite operações específicas de gerenciamento em nível de volume, como volume de bloqueio, desfragmentação, desmontagem de volume e definição de comprimento de dados válido no Windows XP e posterior. Um driver de sistema de arquivos impõe explicitamente esse privilégio específico principalmente com base em operações FSCTL. Nesse caso, o sistema de arquivos toma uma decisão de política para impor esse privilégio. A determinação de se esse privilégio é mantido pelo chamador é feita pelo monitor de referência de segurança como parte da verificação de privilégio normal.
Embora existam vários outros privilégios, eles normalmente são opacos para sistemas de arquivos e somente o SRM (Security Reference Monitor ) os interpreta.
As principais rotinas do Windows para gerenciar privilégios em um sistema de arquivos são:
SePrivilegeCheck executa uma verificação para um conjunto específico de privilégios necessários.
O SeSinglePrivilegeCheck executa uma verificação de um único privilégio específico, é uma versão otimizada do SePrivilegeCheck.
O SeAccessCheck executa a verificação de acesso normal em um objeto (normalmente um objeto de arquivo para um sistema de arquivos).
SeFreePrivileges libera o bloco de privilégios retornado por uma chamada anterior para SeAccessCheck.
SeAppendPrivileges adiciona privilégios habilitados a uma estrutura ACCESS_STATE. Normalmente, um sistema de arquivos usaria o ACCESS_STATE passado para ele durante o processamento IRP_MJ_CREATE.