Privilégio (computação)

Na computação, privilégio é definido como a delegação de autoridade para executar funções relevantes para a segurança em um sistema de computador.[1] Um privilégio permite que um usuário execute uma ação com consequências de segurança. Exemplos de vários privilégios incluem a capacidade de criar um novo usuário, instalar software ou alterar funções do núcleo (kernel).

Os usuários aos quais foram delegados níveis extras de controle são chamados de privilegiados. Os usuários que não têm a maioria dos privilégios são definidos como usuários sem privilégios, regulares ou normais.

Teoria editar

Os privilégios podem ser automáticos, concedidos ou solicitados.

Um privilégio automático existe quando não há necessidade de permissão para executar uma ação. Por exemplo, em sistemas em que as pessoas precisam "entrar" (login) em um sistema para o usar, o "sair" (logout) não exigirá um privilégio. Os sistemas que não implementam a proteção de arquivos, como o sistema operacional em disco da Microsoft (MS-DOS), basicamente concedem privilégios ilimitados para executar qualquer ação em um arquivo.

Um privilégio concedido existe como resultado da apresentação de alguma credencial à autoridade que concede o privilégio. Isso geralmente é feito entrando (logon) em um sistema com um nome de usuário e senha e, se o nome de usuário e a senha fornecidos estiverem corretos, o usuário recebe privilégios adicionais.

Um privilégio é solicitado por um programa executado emitindo uma solicitação de privilégios avançados ou executando algum programa para solicitar os privilégios adicionais. Um exemplo de usuário solicitando privilégios adicionais é fornecido pelo comando sudo para executar um comando como superusuário (root) ou pelo sistema de autenticação Kerberos.

As arquiteturas modernas de processador têm vários modos de CPU que permitem que o sistema operacional seja executado em diferentes níveis de privilégio. Alguns processadores possuem dois níveis (como usuário e supervisor) e processadores i386+ têm quatro níveis (#0 com mais, #3 com menos privilégios). As tarefas são marcadas com um nível de privilégio, os recursos (segmentos, páginas, portas, etc.) e as instruções privilegiadas são marcadas com um nível de privilégio exigido. Quando uma tarefa tenta usar um recurso ou executar uma instrução privilegiada, o processador determina se ela tem a permissão (se não, uma interrupção de "falha de proteção" é gerada) e isso evita que as tarefas do usuário danifiquem o sistema operacional ou umas às outras.

Na programação de computadores, exceções relacionadas à violações de instruções privilegiadas podem ser causadas quando um arranjo foi acessado fora dos limites ou um ponteiro inválido foi desreferenciado quando o local de memória inválido referenciado é um local privilegiado, como uma entrada/saída de um dispositivo de controle. Isso é particularmente mais provável de ocorrer em linguagens de programação como C, que usam aritmética de ponteiro ou não verificam os limites de arranjo automaticamente.

Unix editar

Em sistemas do tipo Unix, o superusuário (comumente conhecido como "root") possui todos os privilégios e os usuários comuns recebem apenas permissões suficientes para realizar suas tarefas mais comuns. Os sistemas UNIX possuem recursos de segurança integrados e a maioria dos usuários não pode configurar uma nova conta de usuário nem realizar outros procedimentos administrativos. O usuário “root” é um usuário especial, algo chamado superusuário, que pode fazer qualquer coisa no sistema. Esse poder de alto grau é necessário para administrar totalmente um sistema UNIX, mas também permite que seu usuário cometa erros e cause problemas no sistema.

Usuários sem privilégios geralmente não podem:

  • Ajustar as opções do núcleo (kernel);
  • modificar arquivos do sistema ou arquivos de outros usuários;
  • alterar a propriedade de quaisquer arquivos;
  • alterar o nível de execução (em sistemas com inicialização estilo System V)
  • alterar o modo de arquivo de qualquer arquivo
  • ajustar ulimits ou cotas de disco;
  • iniciar, parar e remover daemons;
  • sinalizar processos de outros usuários;
  • criar nós de dispositivo;
  • criar ou remover usuários ou grupos;
  • montar ou desmontar volumes (embora esteja se tornando comum permitir que usuários comuns montem e desmontem mídias removíveis, como discos compactos - isso geralmente é feito via FUSE);
  • executar o conteúdo de qualquer diretório sbin/ (embora esteja se tornando comum simplesmente restringir o comportamento de tais programas quando executados por usuários comuns);
  • vincular (ligar) portas abaixo de 1024.

Windows NT editar

Em sistemas baseados no Windows NT, os privilégios são delegados em vários graus. Essas delegações podem ser definidas usando o gerenciador de política de segurança local (secpol.msc). A seguir está uma lista abreviada das atribuições padrão:

  • O "NT AUTHORITY\System" é, no Windows NT, o equivalente mais próximo do superusuário em sistemas do tipo Unix. Ele tem muitos dos privilégios de um superusuário clássico do Unix (como ser um administrador (trustee) em cada arquivo criado);
  • o "Administrador" é um dos equivalentes mais próximos do superusuário (root) em sistemas do tipo Unix. No entanto, esse usuário não pode substituir tantas proteções do sistema operacional quanto o superusuário.
  • os membros do grupo "Administradores" têm privilégios quase iguais aos do "Administrador";
  • os membros do grupo "Usuários avançados" têm a capacidade de instalar programas e fazer cópias de segurança (backup) do sistema;
  • membros do grupo "Usuários" são equivalentes a usuários sem privilégios em sistemas do tipo Unix.

O Windows define vários privilégios administrativos[2] que podem ser atribuídos individualmente a usuários e/ou grupos. Uma conta (usuário) detém apenas os privilégios concedidos a ela, direta ou indiretamente por meio de associações a grupos. Após a instalação, vários grupos e contas são criados e privilégios são concedidos a eles. No entanto, essas concessões podem ser alteradas posteriormente ou por meio de uma política de grupo. Diferentemente do Linux, nenhum privilégio é concedido de forma implícita ou permanente à uma conta específica.

Alguns privilégios administrativos (se apropriar ou restaurar arquivos arbitrários, por exemplo) são tão poderosos que, se usados com intenção maliciosa, podem permitir que todo o sistema seja comprometido. Com o controle de conta de usuário (ativado por padrão desde o Windows Vista), o Windows remove o token do usuário desses privilégios na entrada (login). Assim, se um usuário entrar com uma conta com amplos privilégios de sistema, ele ainda não estará executando com esses privilégios de sistema. Sempre que o usuário desejar realizar ações administrativas que requeiram algum dos privilégios do sistema, deverá o fazer a partir de um processo elevado. Ao iniciar um processo elevado, o usuário é informado de que seus privilégios administrativos estão sendo reivindicados por meio de um prompt pedindo o seu consentimento. Não manter privilégios até que sejam realmente necessários está de acordo com o princípio do menor privilégio.

Os processos elevados são executados com todos os privilégios do usuário, não com os privilégios totais do sistema. Mesmo assim, os privilégios do usuário ainda podem ser mais do que o necessário para esse processo específico, portanto, não de modo com menor privilégio completamente.

O Windows ME, o Windows 98, o Windows 95 e versões anteriores do Windows não NT baseado em DOS operavam apenas no sistema de arquivos FAT, não suportavam permissões de sistema de arquivos[3] e, portanto, os privilégios são efetivamente anulados em sistemas baseados no Windows NT que não usam o sistema de arquivos NTFS.

Nomenclatura editar

Os nomes usados no código fonte do Windows'" terminam em privilégios ("privilege") ou direito de entrada("logonright"). Isso levou a alguma confusão sobre como deve ser chamado o conjunto completo de todos esses "direitos" e "privilégios".

Atualmente, a Microsoft usa o termo "direitos do usuário" (user rights).[4] No passado, alguns outros termos também foram usados pela Microsoft, como direitos de privilégio ("privilege rights")[5] , direitos de logon do usuário ("logon user rights")[6] e direitos nt ("nt-rights").[7]

Ver também editar

Referências editar

  1. «Glossário». Centro de recursos de segurança do computador (em inglês). Instituto nacional de padrões e tecnologia (NIST). Consultado em 12 de fevereiro de 2019. Cópia arquivada em 13 de fevereiro de 2019 
  2. «Constantes de privilégios» (em inglês). Microsoft 
  3. «Como funcionam as permissões». Microsoft. Você pode definir permissões no nível de arquivo somente se os arquivos estiverem armazenados em um volume NTFS. 
  4. «Direitos do usuário» (em inglês). Biblioteca TechNet da Microsoft. Os direitos do usuário incluem direitos e privilégios de entrada (logon). 
  5. «Direitos de privilégio» (em inglês). Biblioteca MSDN da Microsoft 
  6. «Como definir direitos de usuário de logon usando o utilitário ntrights» (em inglês). Suporte da Microsoft 
  7. «How to set logon user rights by using the ntrights utility» (em inglês). Suporte da Microsoft