3.3. Usuários e Gerenciamento Básico de Contas
Anterior | Capítulo 3. Fundamentos do FreeBSD | Próxima

## 3.3. Usuários e Gerenciamento Básico de Contas

O FreeBSD permite que múltiplos usuários usem o computador ao mesmo tempo. Enquanto apenas um usuário pode se sentar em frente à tela e usar o teclado a qualquer momento, qualquer número de usuários pode efetuar o login no sistema através da rede. Para usar o sistema, cada usuário deve ter sua própria conta de usuário.

Este capítulo descreve:

- Os diferentes tipos de contas de usuários em um sistema FreeBSD.

- Como adicionar, remover e modificar contas de usuários.

- Como definir limites para controlar os recursos que usuários e grupos podem acessar.

- Como criar grupos e adicionar usuários como membros de um grupo.

### 3.3.1. Tipos de conta

Como todo acesso ao sistema FreeBSD é obtido usando contas e todos os processos são executados por usuários, o gerenciamento de usuários e contas é importante.

Existem três tipos principais de contas: contas do sistema, contas de usuário e a conta de superusuário.

#### 3.3.1.1. Contas do sistema

As contas do sistema são usadas para executar serviços como DNS, correio e servidores web. A razão para isso é a segurança; se todos os serviços fossem executados como superusuário, eles poderiam agir sem restrições.

Exemplos de contas do sistema são `daemon`, `operador`, `bind`, `news`, e `www`.

A `nobody` é uma conta genérica sem privilégios do sistema. No entanto, quanto mais serviços usarem `nobody`, a mais arquivos e processos esse usuário será associado e, portanto, mais privilegiado esse usuário se tornará.

#### 3.3.1.2. Contas de usuário

As contas de usuários são atribuídas a pessoas reais e são usadas para efetuar login e usar o sistema. Todas as pessoas que acessam o sistema devem ter uma conta de usuário exclusiva. Isso permite que o administrador descubra quem está fazendo o que e impede que usuários alterem as configurações de outros usuários.

Cada usuário pode configurar seu próprio ambiente para adequar o sistema ao seu uso, utilizando suas opções padrão para o shell, editor, atalhos de teclado e idioma.

Cada conta de usuário em um sistema FreeBSD tem certas informações associadas:

Nome de usuário

  O nome do usuário é digitado no prompt `login:`. Cada usuário deve ter um nome de usuário exclusivo. Existem diversas regras para criar nomes de usuário válidos que estão documentadas em passwd(5). Recomenda-se usar nomes de usuário que tenham oito ou menos caracteres, todos os caracteres devem ser minúsculos para manter a compatibilidade com aplicativos legados.

Senha

  Cada conta tem uma senha associada.

ID do usuário (UID)

  O ID do Usuário (UID) é um número usado para identificar unicamente o usuário no sistema FreeBSD. Comandos que permitem que um nome de usuário seja especificado o converterão para o UID. Recomenda-se usar um UID menor que 65535, já que valores mais altos podem causar problemas de compatibilidade com alguns softwares.

ID do grupo (GID)

  O ID do grupo (GID) é um número usado para identificar unicamente o grupo principal ao qual o usuário pertence. Os grupos são um mecanismo para controlar o acesso a recursos com base no GID de um usuário, em vez de no seu UID. Isso pode reduzir significativamente o tamanho de alguns arquivos de configuração e permite que os usuários sejam membros de mais de um grupo. Recomenda-se usar um GID de 65535 ou inferior, pois GIDs mais altos podem não funcionar com alguns softwares.

Classe de login

  As classes de login são uma extensão do mecanismo de grupo que fornece flexibilidade adicional ao configurar o sistema para diferentes usuários. As classes de login são discutidas em Seção 13.13.1, “Configurando Classes de Login”.

Tempo para mudança de senha

  Por padrão as senhas não expiram. No entanto, a expiração de senha pode ser ativada por usuário, forçando alguns ou todos os usuários a alterar suas senhas após um determinado período de tempo.

Tempo de expiração da conta

  Por padrão o FreeBSD não expira contas. Ao criar contas que precisam de uma vida útil limitada, como contas de alunos em uma escola, especifique a data de expiração da conta usando o pw(8). Após o tempo de expiração, a conta não poderá ser usada para efetuar login no sistema, embora os diretórios e arquivos da conta permaneçam no servidor.

Nome completo do usuário

  O nome de usuário identifica a conta de forma única para o FreeBSD, mas não reflete necessariamente o nome real do usuário. Semelhante a um comentário, essas informações podem conter espaços, caracteres maiúsculos e ter mais de oito caracteres.

Diretório Inicial (home)

  O diretório "home" é um caminho completo para um diretório no sistema. Este é o diretório inicial do usuário quando o usuário faz o login. Uma convenção comum é colocar todos os diretórios home dos usuários em ``/home/username`` ou ``/usr/home/username``. Cada usuário armazena seus arquivos e subdiretórios pessoais em seu próprio diretório home.

Shell do usuário

  O shell fornece o ambiente padrão do usuário para interagir com o sistema. Existem muitos tipos diferentes de shells e usuários experientes terão suas próprias preferências, que podem ser refletidas nas suas configurações da conta.

#### 3.3.1.3. A conta de superusuário

A conta de superusuário, geralmente chamada de `root`, é usada para gerenciar o sistema sem limitações de privilégios. Por este motivo, não deve ser usado para tarefas do dia-a-dia, como enviar e receber e-mail, exploração geral do sistema ou programação.

O superusuário, ao contrário de outras contas de usuário, pode operar sem limites, e o uso indevido da conta de superusuário pode resultar em desastres espetaculares. As contas de usuário não podem destruir o sistema operacional por engano, por isso é recomendável fazer o login como uma conta de usuário e se tornar o superusuário somente quando um comando exigir privilégios extras.

Sempre cheque duas ou três vezes todos os comandos emitidos como superusuário, pois um espaço extra ou um caractere ausente pode causar uma perda de dados irreparável.

Existem várias maneiras de obter privilégios de superusuário. Embora seja possível efetuar login como `root`, isso é altamente desencorajado.

Em vez disso, use su(1) para se tornar o superusuário. Se `-` for especificado ao executar este comando, o usuário também herdará o ambiente do usuário root. O usuário que executa este comando deve estar no grupo `wheel` ou o comando falhará. O usuário também deve saber a senha da conta de usuário `root`.

Neste exemplo, o usuário só se torna superusuário para executar `make install`, pois isso requer privilégios de superusuário. Quando o comando é concluído, o usuário digita `exit` para deixar a conta de superusuário e retornar à sua conta de usuário.

Exemplo 3.1. Instalar um programa como superusuário

    % configure
    % make
    % su -
    Password:
    # make install
    # exit
    %

O framework integrado su(1) funciona bem para sistemas isolados ou redes pequenas com apenas um administrador. Uma alternativa é instalar o pacote ou port security/sudo. Este software fornece registro de atividades e permite ao administrador configurar quais usuários podem executar quais comandos como superusuário.

### 3.3.2. Gerenciando Contas

O FreeBSD fornece uma variedade de diferentes comandos para gerenciar contas de usuários. Os comandos mais comuns são descritos em Tabela 3.1, “Utilitários para gerenciar contas de usuários”, seguidos por alguns exemplos de seu uso. Veja a página de manual para cada utilitário para maiores detalhes e exemplos de uso.

Tabela 3.1. Utilitários para gerenciar contas de usuários

Comando | Resumo
--- | ---
adduser(8) | Aplicativo de linha de comando recomendado para adicionar novos usuários.
rmuser(8) | Aplicativo de linha de comando recomendado para remover usuários.
chpass(1) | Uma ferramenta flexível para alterar as informações do usuário.
passwd(1) | Ferramenta de linha de comando para alterar senhas de usuários.
pw(8) | Uma ferramenta poderosa e flexível para modificar todos os aspectos das contas de usuário.

#### 3.3.2.1. `adduser`

O programa recomendado para adicionar novos usuários é o adduser(8). Quando um novo usuário é adicionado, este programa atualiza automaticamente o `/etc/passwd` e o `/etc/group`. Ele também cria um diretório inicial para o novo usuário, copia os arquivos de configuração padrão de `/usr/share/skel` e pode, opcionalmente, enviar uma nova mensagem de boas-vindas ao novo usuário. Este utilitário deve ser executado como o superusuário.

O utilitário adduser(8) é interativo e percorre as etapas para criar uma nova conta de usuário. Como visto em Exemplo 3.2, “Adicionando um usuário no FreeBSD”, insira as informações necessárias ou pressione Enter para aceitar o valor padrão mostrado entre colchetes. Neste exemplo, o usuário foi convidado para o grupo `wheel`, permitindo que ele se tornasse o superusuário com o uso do su(1). Quando terminar, o utilitário perguntará se deseja criar outro usuário ou finalizar o comando.

Exemplo 3.2. Adicionando um usuário no FreeBSD

    # adduser
    Username: jru
    Full name: J. Random User
    Uid (Leave empty for default):
    Login group [jru]:
    Login group is jru. Invite jru into other groups? []: wheel
    Login class [default]:
    Shell (sh csh tcsh zsh nologin) [sh]: zsh
    Home directory [/home/jru]:
    Home directory permissions (Leave empty for default):
    Use password-based authentication? [yes]:
    Use an empty password? (yes/no) [no]:
    Use a random password? (yes/no) [no]:
    Enter password:
    Enter password again:
    Lock out the account after creation? [no]:
    Username   : jru
    Password   : ****
    Full Name  : J. Random User
    Uid        : 1001
    Class      :
    Groups     : jru wheel
    Home       : /home/jru
    Shell      : /usr/local/bin/zsh
    Locked     : no
    OK? (yes/no): yes
    adduser: INFO: Successfully added (jru) to the user database.
    Add another user? (yes/no): no
    Goodbye!
    #

### Nota:

Como a senha não é mostrada quando digitada, tenha cuidado para não digitar a senha incorretamente ao criar a conta do usuário.

#### 3.3.2.2. `rmuser`

Para remover completamente um usuário do sistema, execute o rmuser(8) como o superusuário. Este comando executa as seguintes etapas:

1. Remove a entrada crontab(1) do usuário, se existir.

2. Remove todas as tarefas at(1) pertencentes ao usuário.

3. Elimina todos os processos pertencentes ao usuário.

4. Remove o usuário do arquivo de senhas do sistema.

5. Opcionalmente, remove o diretório pessoal do usuário, se ele for de propriedade do usuário.

6. Remove os arquivos de mensagens recebidas pertencentes ao usuário de `/var/mail`.

7. Remove todos os arquivos pertencentes ao usuário das áreas de armazenamento de arquivos temporários, como `/tmp`.

8. Finalmente, remove o nome de usuário de todos os grupos aos quais ele pertence em `/etc/group`. Se um grupo ficar vazio e o nome do grupo for o mesmo que o nome de usuário, o grupo será removido. Isso complementa os grupos exclusivos por usuário criados por adduser(8).

O rmuser(8) não pode ser usado para remover contas de superusuário, pois isso quase sempre ocasiona uma de destruição em massa.

Por padrão, um modo interativo é usado, conforme mostrado no exemplo a seguir.

Exemplo 3.3. Remoção de contas interativas com o `rmuser`

    # rmuser jru
    Matching password entry:
    jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
    Is this the entry you wish to remove? y
    Remove user's home directory (/home/jru)? y
    Removing user (jru): mailspool home passwd.
    #

#### 3.3.2.3. `chpass`

Qualquer usuário pode usar o chpass(1) para alterar seu shell padrão e informações pessoais associadas à sua conta de usuário. O superusuário pode usar esse utilitário para alterar informações adicionais da conta de qualquer usuário.

Quando não há opções, além de um nome de usuário opcional, o chpass(1) exibe um editor contendo informações do usuário. Quando o usuário sai do editor, o banco de dados do usuário é atualizado com as novas informações.

### Nota:

Este utilitário solicitará a senha do usuário ao sair do editor, a menos que o utilitário seja executado como superusuário.

Em Exemplo 3.4, “Usando o `chpass` como superusuário”, o superusuário digitou `chpass jru` e agora está visualizando os campos que podem ser alterados para este usuário. Se `jru` executar este comando, apenas os últimos seis campos serão exibidos e estarão disponíveis para edição. Isso é mostrado em Exemplo 3.5, “Usando o `chpass` como usuário regular”.

Exemplo 3.4. Usando o `chpass` como superusuário

    #Changing user database information for jru.
    Login: jru
    Password: *
    Uid [#]: 1001
    Gid [# or name]: 1001
    Change [month day year]:
    Expire [month day year]:
    Class:
    Home directory: /home/jru
    Shell: /usr/local/bin/zsh
    Full Name: J. Random User
    Office Location:
    Office Phone:
    Home Phone:
    Other information:

Exemplo 3.5. Usando o `chpass` como usuário regular

    #Changing user database information for jru.
    Shell: /usr/local/bin/zsh
    Full Name: J. Random User
    Office Location:
    Office Phone:
    Home Phone:
    Other information:

### Nota:

Os comandos chfn(1) e chsh(1) são links para chpass(1), como são ypchpass(1), ypchfn(1)eypchsh(1). Já que o suporte ao NIS é automático, colocar o `yp` antes do comando não é necessário. Os procedimentos para configurar o NIS está documentado em Capítulo 29, Servidores de Rede.

#### 3.3.2.4. `passwd`

Qualquer usuário pode alterar facilmente sua senha usando o passwd(1). Para prevenir alterações acidentais ou não autorizadas, este comando irá solicitar a senha atual ao usuário antes de configurar uma nova senha:

Exemplo 3.6. Alterando Sua Senha

    % passwd
    Changing local password for jru.
    Old password:
    New password:
    Retype new password:
    passwd: updating the database...
    passwd: done

O superusuário pode alterar a senha de qualquer usuário especificando o nome de usuário ao executar o passwd(1). Quando este utilitário é executado como superusuário, ele não solicita a senha atual do usuário. Isso permite que a senha seja alterada quando um usuário não consegue lembrar a senha original.

Exemplo 3.7. Mudando a senha de outro usuário como superusuário

    # passwd jru
    Changing local password for jru.
    New password:
    Retype new password:
    passwd: updating the database...
    passwd: done

### Nota:

Como com o chpass(1), o yppasswd(1) é um link para passwd(1), então o NIS funciona com ambos os comandos.

#### 3.3.2.5. `pw`

O utilitário pw(8) pode criar, remover, modificar e exibir usuários e grupos. Funciona como um front-end para o usuário do sistema e para os arquivos de grupo. O pw(8) tem um conjunto muito poderoso de opções de linha de comando que o torna adequado para uso em shell scripts, mas novos usuários podem achar isso mais complicado que os outros comandos apresentados nesta seção.

### 3.3.3. Gerenciando Grupos

Um grupo é uma lista de usuários. Um grupo é identificado pelo nome do grupo e pelo GID. No FreeBSD, o kernel usa o UID de um processo, e a lista de grupos a que pertence, para determinar o que o processo pode fazer. Na maioria das vezes, o GID de um usuário ou processo geralmente significa o primeiro grupo na lista.

O mapeamento do nome do grupo para o GID está listado em `/etc/group`. Este é um arquivo de texto simples com quatro campos delimitados por dois pontos. O primeiro campo é o nome do grupo, o segundo é a senha criptografada, o terceiro é o GID e o quarto é a lista de membros delimitados por vírgulas. Para uma descrição mais completa da sintaxe, consulte group(5).

O superusuário pode modificar o `/etc/group` usando um editor de texto. Alternativamente, o pw(8) pode ser usado para adicionar e editar grupos. Por exemplo, para adicionar um grupo chamado `teamtwo` e confirmar se ele existe:

Exemplo 3.8. Adicionando um grupo usando o pw(8)

    # pw groupadd teamtwo
    # pw groupshow teamtwo
    teamtwo:*:1100:

Neste exemplo, `1100` é o GID de `teamtwo`. No momento, `teamtwo` não possui membros. Este comando adicionará `jru` como um membro de `teamtwo`.

Exemplo 3.9. Adicionando contas de usuários a um novo grupo usando o pw(8)

    # pw groupmod teamtwo -M jru
    # pw groupshow teamtwo
    teamtwo:*:1100:jru

O argumento para a opção `-M` é uma lista de usuários, delimitada por vírgulas, a serem adicionados a um novo grupo (vazio) ou para substituir os membros de um grupo existente. Para o usuário, essa associação ao grupo é diferente (e adicional ao) do grupo principal do usuário listado no arquivo de senha. Isso significa que o usuário não aparecerá como membro ao usar a opção `groupshow` com o pw(8), mas mostrará quando a informação é consultada via id(1) ou uma ferramenta similar. Quando o pw(8) é usado para adicionar um usuário a um grupo, ele apenas manipula o `/etc/group` e não tenta ler dados adicionais do `/etc/passwd`.

Exemplo 3.10. Adicionando um novo membro a um grupo usando o pw(8)

    # pw groupmod teamtwo -m db
    # pw groupshow teamtwo
    teamtwo:*:1100:jru,db

Neste exemplo, o argumento para `-m` é uma lista delimitada por vírgulas de usuários que devem ser adicionados ao grupo. Ao contrário do exemplo anterior, esses usuários são adicionados ao grupo e não substituem usuários existentes no grupo.

Exemplo 3.11. Usando o id(1) para determinar a associação ao grupo

    % id jru
    uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)

Neste exemplo, `jru` é um membro dos grupos `jru` e `teamtwo`.

Para obter mais informações sobre este comando e o formato do `/etc/group`, consulte pw(8) e group(5).

Anterior | Acima | Próxima
3.2. Consoles e Terminais Virtuais | Principal | 3.4. Permissões

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.