Todos os segredos estão no /etc...
Continuando nossa jornada pelo /etc, veremos como o sistema adiciona e reconhece sua conta no momento em que você faz o login
Nas edições anteriores fizemos uma ligeira introdução sobre o /etc, árvore de diretórios que contém todos os arquivos de configuração global
de sistemas Unix. Além da árvore
padrão, normalizada pelo Filesystem Hierarchy Standard (FHS), comparamos os /etc de diversas distribuições. Além disso, ficamos por dentro de dois serviços considerados
essenciais em qualquer sistema
Unix: a configuração de montagem
do sistema de arquivos e o gerenciador de tarefas agendadas do sistema, o cron.
Nesta edição, falaremos sobre os mecanismos de criação, manipulação
e autenticação de usuários no Linux. Novamente, não vamos colocar
exemplos completos dos arquivos de inicialização neste artigo, para forçar
o leitor a verificá-los em seu próprio sistema.
A prática é importante. Exortamos
o leitor a executar todos os exercícios sugeridos para ter uma noção bem melhor do que acontece por trás dos bastidores, que nesta altura do campeonato devem já ser bem familiares. Como disse o filósofo italiano Giambattista Vico (1668-1744), verum
ipsum factum, ou seja, o conhecimento vem pela prática. Então, mãos à obra
e boa sorte!
Criando um usuário
Qualquer programa utilizado para criar um usuário faz apenas duas coisas, seja o Linuxconf seja o script
useradd: insere os dados do usuário nos arquivos de configuração de usuários e cria a árvore de diretórios /home para ele, com as permissões de acesso específicas.
À medida que descrevemos os
arquivos, iremos criando um usuário hipotético chamado cocada. No final do artigo, o cocada poderá logar-se
no sistema sem que tenhamos usado
qualquer programa para criá-lo. Não
esqueça que todos os comandos terão de ser emitidos como root, então,
todo cuidado é pouco!
passwd, shadow
Estes dois arquivos guardam as informações de login e senha de todos os usuários. Quando o usuário entra com seu login, o sistema verifica no arquivo passwd se o login existe e se a senha confere. A mesma linha determina os valores numéricos do ID e do grupo do usuário, o nome completo do usuário, o seu diretório /home e qual o programa que será executado. Caso esse último campo esteja em branco, será usado o /bin/sh como programa padrão, que na maioria das vezes costuma ser o bash. Os campos são separados por dois pontos ( : ).
Por exemplo, minha entrada no arquivo passwd é:
henrique:x:638:638:Henrique Cesar Ulbrich:/home/henrique:/bin/bash
Vamos decodificar essa linha. O nome da minha conta no Linux é
henrique. O próximo campo indicaria a senha, mas em seu lugar está um x. Em alguns sistemas, pode ser um ou mais asteriscos. Esse x ou asteriscos indicam que a senha não está neste arquivo, mas criptografada em um
outro chamado shadow. Esse artifício existe por questões de segurança;
todos os usuários devem ter permissão de leitura para o arquivo passwd, pois aí estão as configurações de login de cada um. Com isso, todos podiam ver as senhas dos outros usuários, e não era difícil que algum usuário mal-intencionado tentasse quebrar a senha dos outros. Com a implementação do arquivo shadow (que só é visível para
o superusuário) esse problema não existe mais.
Os próximos dois campos são o
ID do usuário (UID) e do grupo
primário ao qual o usuário pertence (GID). Em alguns sistemas, cada
usuário tem seu próprio grupo, em outros, todos os usuários pertencem ao mesmo grupo users (normalmente GID users = 100). O próximo campo
é de informações. Em sistemas Linux modernos, esse campo normalmente
é preenchido com o nome completo do usuário, mas em outros sistemas Unix proprietários ele já foi usado
para outros fins. É um campo opcional, entretanto, e não faz mal deixá-lo
em branco.
Por fim, o penúltimo campo indica onde é o /home do usuário e o último indica qual o programa a ser executado quando o usuário é autenticado. Nesse caso o /bin/bash está explicitado, mas se o campo estivesse em branco, o /bin/sh seria executado. No meu sistema, /bin/sh é um symlink para
/bin/bash, mas o shell padrão pode variar de sistema para sistema.
Vamos criar nosso usuário cocada agora? Bem, abra o arquivo passwd com o seu editor favorito. Para não desagradar às facções xiitas e não fomentar a guerra santa, não uso nem Emacs nem vi, prefiro um pico ;-)
Crie, no final do arquivo, a seguinte linha:
cocada::999:999:Usuário criado manualmente:/home/cocada:/bin/bash
Note que o campo destinado à senha está vazio. Esse campo será preenchido com um x quando rodarmos o comando passwd para atribuir uma senha ao usuário cocada. Usamos UID e GID com valor 999 porque muito provavelmente não há um usuário e um grupo com esses IDs no sistema, mas verifique (no próprio arquivo
passwd) se o número já foi usado. Caso os números não estejam disponíveis, escolha qualquer outro acima de 500 que esteja livre.
Temos de criar uma entrada para o cocada no arquivo shadow também. Para isso, vá até o final e acrescente a linha
cocada::::::::
São oito sinais de dois pontos.
Os campos estão em branco e serão preenchidos quando rodarmos o
comando passwd.
group
O arquivo group contém as definições de grupos do sistema. Como visto na linha referente ao meu usuário no arquivo passwd, pertenço a um grupo de número 638. Procurando esse GID no arquivo group, encontrei:
henrique:x:638:
Portanto, há um grupo chamado henrique, com um group ID (GID) igual a 638. Mais abaixo, vejo outro grupo com meu nome:
revista::799:henrique,minami,rigues
Essa é a definição do grupo revista. O primeiro campo determina o nome do grupo. O segundo campo determina se o grupo precisa ser acessado através de uma senha. Note que no caso do grupo henrique (que é exclusivo) a senha é necessária, já o grupo revista (que é público) não tem essa necessidade. O próximo campo relaciona o GID ao nome do grupo. E, por último, temos um campo que define os membros do grupo revista. Se houver um usuário cujo nome seja o mesmo do grupo, automaticamente ele será membro desse grupo. Por isso, na definição do grupo
henrique o campo lista de usuários estava vazio.
De posse dessas informações, vamos criar o grupo cocada, também. Não esqueça que lá no arquivo passwd esse grupo foi definido com GID 999.
cocada::999:
Estamos quase lá!
etc/skel
O skel é um diretório utilizado como esqueleto (daí o nome) para o
/home de novos usuários. Os programas de criação automática de usuários (como o useradd) criam uma cópia
do skel no /home/novo_usuário.
Entre no skel e liste seu conteúdo (quadro 1 acima).
Eis a lista dos arquivos que serão
copiados (como estão) para o diretório /home do novo usuário. Note que, dependendo da distribuição Linux utilizada, pode haver diferenças nos nomes e conteúdos dos arquivos, mas o procedimento é o mesmo. Então, mãos à obra, vamos construir a casa do cocada!
# cd /home
# mkdir cocada
# cp /etc/skel/.* cocada/
# chown cocada.cocada cocada -R
# cd cocada
A opção -R torna o comando chown recursivo, mudando as atribuições de todos os arquivos dentro do diretório. Neste ponto, abra o arquivo .bash_profile (ou .profile em alguns sistemas) com seu editor preferido, e na linha
USERNAME=" "
insira o nome do usuário. Ficará assim:
USERNAME="cocada"
Salve o arquivo, e nosso usuário cocada está pronto! Só falta definir uma senha para ele. No prompt (ainda como root) digite:
# passwd cocada
e a senha criptografada para ele será criada no arquivo shadow. Infelizmente, não há meio de criptografar uma senha "na mão", é preciso usar o programinha.
Voilá! Nosso usuário está criado. Para testar, logue-se como ele e veja se funciona.
Na próxima edição, falaremos sobre a inicialização do Linux, e quais arquivos do /etc afetam ou são afetados por ela. Até lá!
Quadro 1 Conteúdo do Skel
# cd /etc/skel
# ls -al
-rw-rr- 1 root root 508 Nov 13 12:57 .alias
-rw-rr- 1 root root 24 Oct 13 10:21 .bash_logout
-rw-rr- 1 root root 230 Oct 13 10:21 .bash_profile
-rw-rr- 1 root root 124 Oct 13 10:21 .bashrc
-rw-rr- 1 root root 154 Nov 13 12:57 .cshrc
-rw-rr- 1 root root 3471 Oct 6 15:51 .screenrc
-rw-rr- 1 root root 1437 Oct 13 10:21 .Xdefaults
|
Para saber mais
How to build a minimal Linux system from source code, Greg OKeefe (gcokeefe@postoffice.utas.edu.ar) www.netspace.net.au/~gok/power2bash
Linux From Scratch, Gerard Beekmans - www.linuxfromscratch.org
Guia Foca GNU/Linux, Gleydson Mazioli da Silva - http://www.metainfo.org/focalinux
The Linux Manual, Hugo Cisneiros - tlm.conectiva.com.br (versão 3.4) e www.imortais.cjb.net (versão 3.9)
Running Linux, Matt Welsh e Lar Kaufman OReilly - www.oreilly.com
Man pages dos seguintes comandos e arquivos: passwd(5), passwd(8), shadow, group, useradd.