sexta-feira, 24 de dezembro de 2010

Como Listar os Usuários e Grupos Existentes no Linux?

Os usuários existentes em uma instalação do sistema Linux podem ser listados facilmente se conseguimos listar o arquivo de dados onde eles são catalogados pelo sistema, ao lado de várias outras informações pessoais importantes, como a sua senha (criptografada, naturalmente), seu nome, grupo primário, etc. Este fantástico arquivo é o /etc/passwd. Ver o seu conteúdo pode ser feito pelo comando abaixo (não precisa ser root):

cat /etc/passwd

Em geral, isto lista uma série de informações. Os grupos, analogamente, encontram-se no arquivo /etc/group, associados a algumas informações pertinentes, e podem ser listados da seguinte maneira (não precisa ser root):

cat /etc/group

Dependendo de como o sistema esteja configurado, as senhas dos usuários podem ficar em local específico, no arquivo /etc/shadow, que só pode ser lido ou modificado pelo root:

cat /etc/shadow


  • Entendendo o /etc/passwd

Como este arquivo é usado durante o login, ele é acessível a todos os usuário (para leitura), mas só pode ser modificado pelo administrador do sistema. Cada linha representa um usuário e contém seus dados específicos. Cada campo é separado do outro pelo caracter ":" (dois pontos). Observe a seqüência de dados presentes em cada linha, conforme mostra o trecho do arquivo abaixo:

gdm:x:105:112:Gnome Display Manager:/var/lib/gdm:/bin/false
paje:x:1001:1001:O Paje,,,:/home/gabriel:/bin/bash
1 :2: 3 : 4 : 5 :6 :7

1- nome do usuário: contém o nome da conta do usuário, que pode ter entre 1 e 32 caracteres. Em nosso caso, um usuário se chama "gdm" e o outro "paje";

2- É o local da senha. Se, ao invés disso, houver o caracter "x", então o arquivo indica que as senhas estão encriptadas no arquivo /etc/shadow, que só pode ser lido pelo root.

3- UID (User ID). Número identificador do usuário. Nunca existirão dois usuários com o mesmo número. O UID segue as seguintes regras: 0=root; 1-99=contas pré-definidas (ex: bin, sys, mail, games, irc); 100-999=reservados pelo sistema para contas administrativas e de gerenciamento interno; a partir de 1000=usuários convencionais. No caso acima, "gdm" é um usuário administrativo, mas "paje" é um usuário normal.

4- GID (Group ID). Número identificado do grupo primário do usuário. Um usuário pode estar associado a vários grupos, mas tem apenas um grupo denominado "primário". Quando o usuário cria um arquivo novo, por exemplo, este arquivo fica registrado como pertencente a este usuário seu criador e ao grupo ao qual ele está associado como grupo primário no momento de criação do arquivo.

5- Uma série de informações separadas por vírgulas (que nem sempre são cadastradas!), como o nome real do usuário, telefone, número da sala, etc.

6- O caminho completo (absoluto) do diretório do usuário.

7- O shell que será executado cada vez que este usuário fizer login. Em geral é /bin/bash (para usuários comuns), mas pode ser outro shell ou mesmo /bin/false, caso o usuário não seja autorizado a fazer login.

Não foi tão difĩcil entender estes campos, foi??


  • Várias Maneiras de Listar Usuários

Verificando se um usuário existe mesmo, e sabendo suas informações:

grep gdm /etc/passwd
gdm:x:105:112:Gnome Display Manager:/var/lib/gdm:/bin/false

Verificando todos os usuários convencionais (que, supostamente, possuem um diretório no /home):

grep /home/ /etc/passwd

Mostrando uma listagem simples, contendo somente o nome dos usuários, sem as demais informações da linha:

grep /home/ /etc/passwd | cut -d: -f1

O comando "cut" usado no filtro "|" recorta o resultado do comando grep. Os parâmetros significam: "-d:"=delimitador (indica que será fornecida uma informação para delimitar o resultado), "-f1"=indica que deverá ser mostrado apenas o primeiro campo (field 1).

É claro que este comando todo pode ser armazenado em um shell script ou em uma aliases. Adicionalmente, gostaria de encorajá-lo a modificar o comando acima e personalizá-lo conforme deseje!! Sinta-se à vontade!!


  • Entendendo o /etc/group

Analogamente ao /etc/passwd, o /etc/group contém uma linha para cada grupo, onde as informações específicas do grupo são separadas pelo caracter ":" (dois pontos). Exemplo de trecho do arquivo:

video:x:44:paje,fulano,beltrano
1 :2: 3 :4

1- Nome do grupo;

2- Senha do grupo. Analogamente ao /etc/passwd, a senha é substituída pelo caracter "x" para ser armazenada em local seguro. Em muitos sistemas, a administração de grupos é feita exclusiva e diretamente pelo root, sem necessidades de senhas para os grupos.

3- GID (Group ID);

4- Lista de usuários que estão associados a este grupo, separados por vírgulas. Esta lista pode estar vazia, indicando que não há usuários associados ao grupo.


Bom, pessoal, espero que este artigo tenha ajudado... lembrem-se de que, aconteça o que acontecer, o mais importante é que COMENTEM!!

16 comentários:

Silvio Carreiro disse...

Excelente! Muito bom! Explêndido!Parabéns e muito obrigado.

O Pajé disse...

Beleza, Silvio!! Obrigado!!

Uma outra dica:
Você pode construir ferramentas realmente poderosas se associar os comandos varridos neste tutorial com o comando "xargs". Há aqui no Pajé um tutorial mostrando detalhadamente como o "xargs" funciona:

Aplicando Comandos a vários Arquivos Recursivamente. Boa sorte!!!

Anônimo disse...

Excelente !!!!

O Pajé disse...

Obrigado pelo feedback, amigo!! Espero que o pajeonline continue sendo proveitoso!!

Mauricio Corvello disse...
Este comentário foi removido pelo autor.
Mauricio Corvello disse...

Beleza...
Ótimo, mas e o script?!
Preciso fazer algo semelhando mas, qndo adicionar o usuario no sistema quero criar automaticamente a public_html.

att.

O Pajé disse...

Olá Mauricio,

Exatamente de qual script vc está falando?? Criar o public_html é apenas criar esta pasta no diretório do usuário e pode ser feito com um comando como:

mkdir /home/usuario/public_html

Claro, para que o Apache leia este diretório, ele precisa ser instruído para tal.

Aproveite e leia este artigo do Pajé:

Configurando o Apache para Ler Páginas Pessoais dos Usuários

Xavier disse...

Excelente, me ajudou muito!!!
Obrigado mesmo! Continue sempre postanto!

O Pajé disse...

Obrigado, Xavier!!! Fico feliz de ter podido te ajudar!! Volte sempre ao Pajé!!

elvis sousa disse...

muito bom ! parabéns

O Pajé disse...

Obrigado, Elvis! Espero que o pajeonline continue ajudando a você e a todos os que nos visitam!

Cristiano Luís disse...

Excelente

Cristiano Luís disse...

Muito obrigado.

O Pajé disse...

Muito grato, Cristiano! Volte sempre ao pajeonline!
Abraços!

Anônimo disse...

Bom dia!

Eu gostaria de criar um arquivo na minha \home e copiar para dentro deste arquivo todos os usuários como GID ou UID maior que 1000, alguém sabe como devo fazer?

O Pajé disse...

Isso precisa ser feito via shell script. Você deve ler o arquivo com os usuários linha a linha e verificar o GID/UID de cada um. Se for maior que 1000, daí o script copia a linha toda para o arquivo novo. Para fazer coisas assim, escolha a tecnologia que lhe for mais conveniente. Algumas pessoas gostam de fazer em shell mesmo, rodando um script. Outras pessoas, fazem em Python. Não existe um comando único para este procedimento, mas, com os conhecimentos de uma linguagem de programação, é possível fazer isso tranquilamente. Se for fazem em shell script, dê uma olhada nos tutoriais da linguagem, especialmente o operador "for" e o comando "cut".
Boa sorte!