# Identificador de usuário

Sistemas operacionais baseados em Unix identificam os usuários dentro do kernel por um valor inteiro sem sinal chamado de user identifier (em português identificador de usuário, ou ainda, número de identificação do usuário), muitas vezes abreviado para UID ou User ID. O UID, juntamente com o identificador de grupo (GID) e outros critérios de controle de acesso, é usado para determinar quais recursos do sistema um usuário pode acessar. O arquivo de senhas mapeia nomes de usuário textuais para UIDs, porém no kernel, apenas UIDs são usados. UIDs são armazenados nos inodes do sistema de arquivos do Unix, processos em execução, arquivos tar e o, hoje obsoleto, id fornece o UID do usuário atual, bem como mais informações como o nome do usuário, grupo de usuário primário e identificador de grupo (GID).

## Atributos de processo

O padrão POSIX introduziu três campos UID diferentes na tabela descritora de processos para permitir a processos privilegiados assumirem diferentes papéis dinamicamente:

### ID de usuário efetivo

O effective UID (euid), em português UID efetivo, e o effective GID (egid), em português GID efetivo, afetam a criação e o acesso de arquivos. Durante a criação do arquivo, o kernel define os atributos do proprietário do arquivo para o UID efetivo e o GID efetivo do processo de criação. Durante o acesso ao arquivo, o kernel usa o UID efetivo e o GID efetivo do processo para determinar se ele pode acessar o arquivo.

#### ID de usuário do sistema de arquivos

O Linux também tem um arquivo de ID de usuário do sistema de arquivos ou file system user ID (fsuid) que é usado explicitamente para controlar o acesso ao sistema de arquivos. Ele corresponde ao euid a menos que explicitamente defina o contrário. Pode ser ID do usuário do root somente se o ruid, o suid ou o euid seja o root. Sempre que o euid é alterado, a alteração é propagada para o fsuid.
O objetivo do fsuid é permitir que programas (por exemplo, o servidor NFS) se limitem aos direitos de sistema de arquivos de alguns uid fornecidos sem dar essa permissão de uid para enviá-los sinais.

### ID de usuário salvo

O saved user ID (suid), em português ID de usuário salvo, é usado quando um programa em execução com privilégios elevados precisa temporariamente fazer algum trabalho sem privilégios: ele muda o seu ID de usuário efetivo a partir de um valor privilegiado (geralmente root) para algum sem privilégios, e isso desencadeia uma cópia do ID de usuário privilegiado para o slot de ID de usuário salvo. Posteriormente, ele pode retornar ao seu ID de usuário efetivo para o ID de usuário salvo (um processo não privilegiado só pode definir o seu ID de usuário efetivo para três valores: o seu ID de usuário real, seu ID de usuário salvo e seu ID de usuário efetivo, ou seja, sem alterações) para retomar seus privilégios.

### ID de usuário real

O real UID (ruid), ou em português UID real, e o real GID (rgid), ou em português GID real, identificam o verdadeiro dono do processo e afetam as permissões para o envio de sinais. Um processo sem privilégio de superusuário pode sinalizar outro processo apenas se UID real do remetente corresponde com o UID real do receptor. Como os processos filho herdam as credenciais do pai, eles podem sinalizar um ao outro.

## Convenções

O intervalo de valores de UID varia entre sistemas diferentes. No mínimo, um UID representa um número inteiro de 15 bits, variando entre 0 e 32767, com as seguintes restrições:
* O superusuário deve sempre ter um UID zero (0).
* O usuário "nobody" tradicionalmente tem o maior UID possível (como o oposto do superusuário): 32767. Mais recentemente, os sistemas têm atribuído ao usuário um UID na faixa do sistema (1-100, ver abaixo) ou no intervalo 65530-65535.
* A convenção reserva os UIDs de 1 a 100 para uso do sistema. Alguns manuais recomendam reservar UIDs de 101 até 499 (Red Hat Enterprise Linux), ou mesmo até 999 (Debian).
O valor do UID referencia usuários no arquivo /etc/passwd. Arquivos de contra-senha e o Network Information Service também se referem a UIDs numéricos. O identificador do usuário tornou-se um componente necessário dos processos e sistemas de arquivos do Unix. Alguns sistemas operacionais suportam UIDs de 16 bits, permitindo 65536 IDs únicos possíveis. Um sistema moderno, com UIDs de 32 bits irá, potencialmente, permitir 4.294.967.296 (2$^{32}$) valores distintos disponíveis.
Em ambientes complacentes POSIX o o comando id fornece o número do UID do usuário, bem como mais informações sobre sua conta, como o nome de usuário, grupo de usuário primário e identificador de grupo (GID).