Uma conta de usuário é mais do que apenas um identificador. Explore como configurar e modificar todos os dados vinculados a uma conta de usuário do Linux através da linha de comando.
O Significado por Trás do Nome
Se você interage com um sistema Linux ou semelhante ao Unix, possui uma conta de usuário. O nome dessa conta é seu nome de usuário, usado para login. Ele também funciona, em geral, como o nome do grupo de login e do diretório pessoal, compartilhando o mesmo identificador.
Contudo, cada conta de usuário pode armazenar outras informações. Dados como nome completo, número de sala e telefone comercial podem ser anexados a ela. De fato, qualquer tipo de informação pode ser associada a uma conta de usuário.
Isso se mostra mais útil para administradores de sistemas que gerenciam máquinas com diversas contas. Mas, mesmo em um computador pessoal, entender como isso funciona nos bastidores é interessante.
O Campo GECOS: Uma História
No início, os desenvolvedores do Unix não possuíam impressoras próprias. Eles enviavam seus trabalhos de impressão para um mainframe da General Electric, que rodava o Sistema Operacional General Electric Comprehensive (GECOS). Para isso, usuários do Unix precisavam armazenar e utilizar credenciais de suas contas no sistema GECOS.
O campo GECOS foi criado para guardar essas credenciais. Embora essa necessidade específica tenha ficado no passado, o campo GECOS foi reaproveitado para armazenar outras informações relacionadas aos usuários das contas. Ele pode ter uma nova função, mas mantém o nome original.
Esse campo é armazenado no arquivo `/etc/passwd`, junto com outros detalhes da conta de usuário:
- O nome da conta.
- O ID do usuário.
- O ID do grupo.
- O caminho para o diretório pessoal da conta.
- O shell que é executado quando o usuário faz login.
É daqui que comandos como `finger` e `pinky` obtêm as informações que mostram.
O Comando `chfn`
O comando `chfn` (alterar informações do “finger”) permite que você configure e modifique os dados armazenados no campo GECOS. As informações são guardadas como uma lista separada por vírgulas.
O comando `chfn` já vem instalado em distribuições como Ubuntu 18.04.1 e Manjaro 18.1.0. No Fedora 31, é necessário instalá-lo com:
sudo dnf install util-linux-user
Vamos ver o que o comando `finger` revela sobre o usuário “dave”, utilizando a opção `-l` para um formato longo:
finger dave -l
Inicialmente, o comando mostra:
Ele exibe o nome da conta, o diretório pessoal e o shell padrão, informações referentes à conta em si, não necessariamente à pessoa que a utiliza. Podemos usar `chfn` para armazenar informações sobre o usuário real.
chfn dave
Ao usar `chfn` dessa forma, inicia-se um breve processo interativo. O programa solicita um valor para cada informação que o campo GECOS pode conter. O valor atual é mostrado entre colchetes `[]`. Para manter o valor atual, basta pressionar “Enter”.
As informações inseridas foram:
- Número da sala: 512
- Telefone comercial: 555-4567
- Telefone residencial: 555-5432
Vamos verificar se o comando `finger` agora mostra as informações:
finger dave -l
Sim, mas note que ele não pediu para mudar o nome completo. Isso acontece apenas com o `sudo`. Não é preciso repetir toda a sessão `chfn` por ter esquecido do `sudo`. Podemos modificar os valores individualmente.
Modificando Valores de Dados Específicos
Podemos definir o nome completo do usuário usando a opção `-f` (nome completo) com `sudo`:
sudo chfn -f "Dave McKay" dave
Verificando novamente com `finger`:
O nome completo foi adicionado.
Existem opções para modificar o número da sala, telefone residencial e comercial. Para alterar o número da sala (escritório), utilize a opção `-r` (número da sala):
sudo chfn -r 633 dave
Em algumas distribuições, você pode precisar usar `-o` (número do escritório) em vez de `-r`. Consulte a página do manual para detalhes, usando:
man chfn
Para alterar o número do telefone comercial, use a opção `-w` (telefone comercial):
sudo chfn -w 555-1122 dave
Para alterar o número do telefone residencial, utilize a opção `-h` (telefone residencial):
sudo chfn -h 555-6576 dave
Vamos usar `finger` novamente para confirmar as mudanças:
finger dave -l
Todas as modificações foram aplicadas com sucesso.
Usando `chfn` em Outras Contas
Para alterar informações de outros usuários, utilize `sudo`. É a única diferença. Vamos ver os dados da conta “mary”:
finger mary -l
Informações padrão. Adicionando novos dados:
sudo chfn mary
Ao usar `sudo`, o valor do nome completo também será solicitado.
O que é o último item, chamado “Outro?”
Ele não é padrão em todas as versões do `chfn` e só é visível com `sudo`. Por isso, não o vimos antes sem o `sudo`:
chfn dave
O valor “Outro” pode conter qualquer informação desejada e não tem uso específico definido.
As versões de `chfn` com suporte ao campo “Outro” também oferecem a opção `-o` (outro) para modificar diretamente esse valor. É devido ao conflito entre `-o` para “número do escritório” e “outro” que alguns sistemas utilizam `-r` para “número da sala”.
Podemos visualizar os dados da conta “mary” no arquivo `/etc/passwd` com o comando `less`:
less /etc/passwd
Em sistemas compatíveis (verifique a página do manual do `chfn`), o campo “outro” pode ser alterado diretamente com a opção `-o` (outro):
sudo chfn -o "HTG Freelancer" dave
Verificando os dados da conta “dave” com `less`:
less /etc/passwd
Isso leva a uma questão: Se a versão do `chfn` não suporta o campo “Outro”, como alterá-lo? Podemos fazer isso com o comando `usermod`.
O Comando `usermod`
O comando `usermod` permite modificar detalhes de uma conta de usuário, como adicionar ou remover a conta de grupos e alterar seu shell padrão. Ele também pode ser utilizado para manipular o campo GECOS.
Vamos observar a linha no arquivo `/etc/passwd` referente à conta “mary”, usando `grep` para isolá-la. Isso funciona porque os nomes de usuário são únicos.
grep mary /etc/passwd
Os campos no arquivo `/etc/passwd` são separados por dois pontos “:”. Da esquerda para a direita, os campos são:
- Nome de usuário.
- Um “x” indicando que a senha está criptografada em `/etc/shadow`.
- ID do usuário.
- ID do grupo.
- O campo GECOS.
- O caminho para o diretório pessoal.
- O shell que é executado ao fazer login.
Uma vírgula “,” separa os valores dentro do campo GECOS. Os valores dentro do campo GECOS são:
- Nome completo.
- Número da sala (ou escritório).
- Telefone comercial.
- Telefone residencial.
- Outras informações.
O comando `usermod` define todo o campo GECOS com o novo valor. Se você fornecer apenas o nome completo, ele será a única informação no campo GECOS. Portanto, você deve fornecer todos os dados existentes que deseja manter.
Exemplo: Mary foi promovida e mudou para o 4º andar. Ela recebe um novo número de escritório e telefone comercial. Vamos adicionar o seu nome do meio e alterar o valor “Outro”. Embora o número de telefone residencial continue o mesmo, ele deve ser informado na string para `usermod`.
Utilizamos a opção `-c` (comentário) e executamos o comando com `sudo`:
sudo usermod -c "Mary Carol Quinn,405,5559654,555-7704,Linux Advocate" mary
Usando `grep` para verificar o conteúdo do arquivo `/etc/passwd` para “mary”, vemos que os novos valores foram adicionados.
grep mary /etc/passwd
A Mudança é Constante
Dados incorretos são inúteis. Quando as informações sobre as pessoas mudam (mudanças de escritório, nome, função), seus metadados podem ser atualizados para refletir a realidade.