Revista Do Linux
EDIÇÃO DO MÊS
 CD do Mês

 Capa
 Entrevista
 Corporativo
 Distro
 Segurança
 Hardware
 Produto
 Primeiros Passos
 Sistema
 

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-r–r-– 1 root root 508 Nov 13 12:57 .alias -rw-r–r-– 1 root root 24 Oct 13 10:21 .bash_logout -rw-r–r-– 1 root root 230 Oct 13 10:21 .bash_profile -rw-r–r-– 1 root root 124 Oct 13 10:21 .bashrc -rw-r–r-– 1 root root 154 Nov 13 12:57 .cshrc -rw-r–r-– 1 root root 3471 Oct 6 15:51 .screenrc -rw-r–r-– 1 root root 1437 Oct 13 10:21 .Xdefaults

Para saber mais

How to build a minimal Linux system from source code, Greg O’Keefe (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 O’Reilly - www.oreilly.com

Man pages dos seguintes comandos e arquivos: passwd(5), passwd(8), shadow, group, useradd.


A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux