Professional Documents
Culture Documents
Introdução
Uma das coisas que torna seguro o sistema operacional GNU/Linux (na verdade, qualquer sistema baseado no Unix), é a sua
exigência de que cada coisa tenha dono e permissões de uso. Assim, para que seja possível restringir ou permitir o acesso e o uso
de determinados recursos a uma ou mais pessoas, é necessário que cada uma tenha um usuário devidamente criado no sistema
operacional. Mas, como criar usuários no Linux? Como alterar as características desses usuários? Como bloquear ou mesmo
eliminar um usuário do sistema? É isso que você verá nas próximas linhas.
Antes de criar e controlar contas no GNU/Linux, é conveniente entender como o sistema operacional lida com isso. Em geral, cada
conta criada fica armazenada em um arquivo de nome passwd localizado dentro do diretório /etc/ (ou seja, seu caminho completo
é /etc/passwd). Esse arquivo contém várias informações sobre cada usuário:
- o seu nome de login (ou seja, o nome que é necessário digitar para entrar no sistema);
- senha (neste caso, a informação da senha pode estar criptografada ou em outro arquivo);
- UID (User IDentification), ou seja, número de identificação do usuário;
- GID (Group IDentification), isto é, número de identificação do grupo do usuário;
- informações adicionais sobre o usuário (nome completo, dados de contato, etc);
- diretório "home", ou seja, o diretório principal de cada usuário;
- shell do usuário, uma espécie de programa que interpretará os comandos que o usuário digitar.
Para que você possa entender melhor cada um desses itens, vamos analisá-los usando como base a linha abaixo extraída de um
arquivo /etc/passwd, que mostra a posição que cada uma das informações acima ocupa:
tintin:x:1001:500:TinTin,Belgica,846-846:/home/tintin:/bin/bash
Note que cada parâmetro do usuário é separado por : (dois pontos). Vamos estudar cada um:
tintin: é neste ponto que fica localizado o nome de login do usuário, neste caso, tintin. Esse nome não pode ser igual a outro já
existente no sistema e, geralmente é limitado a 32 caracteres. Todavia, dependendo da configuração aplicada, o nome pode ser
"case sensitive", ou seja, diferencia letras maiúsculas de minúsculas. Assim, 'wester' será diferente de 'wEster', por exemplo;
x: essa posição indica a senha do usuário. A letra x informa que a senha está armazenada e protegida dentro do arquivo
/etc/shadow. Se houver um asterisco (*) no lugar, significa que a conta está desativada. Todavia, se não houver nada, significa que
não há senha para esse usuário. Em alguns casos, embora isso não seja recomendável, a senha pode estar inserida diretamente ali,
mas criptografada;
1001: esse campo indica o número UID (User IDentification) do usuário, mas você pode estar se perguntando o que é isso. Como
o próprio nome informa, é número que serve para identificar o usuário. Em geral, o sistema pode suportar UIDs que vão de 0 a
4.294.967.296, embora alguns sistemas limitem esse número a valores inferiores. Normalmente, o UID 0 é atribuído pelo próprio
GNU/Linux ao usuário root. O sistema também pode criar automaticamente usuários para a execução de determinadas rotinas e
atribuir a eles UIDs baixos, como 1, 2, 3 e assim por diante. Note que, em nosso exemplo, o UID do usuário é 1001. Para usuários
"humanos" do sistema, realmente é uma boa prática criar UIDs mais altas, para fins de organização;
500: esse é o campo que indica o GID (Group IDentification) do usuário, isto é, o número de identificação do grupo do qual ele
faz parte. Assim como no UID, geralmente o usuário 0 é indicado para o grupo do usuário root. Note, no entanto, que um mesmo
usuário pode fazer parte de mais de um grupo (geralmente, o GNU/Linux permite a participação do usuário em até 32 grupos).
Mas qual a vantagem de se ter mais de um grupo? Simples: suponha, por exemplo, que você queira que somente os funcionários
do departamento contábil de sua empresa acessem os arquivos disponíveis na pasta /contabilidade/. Para isso, você cria um grupo
e uma definição que faz com que apenas os usuários desse grupo tenham direito ao acesso. Feito isso, basta adicionar ao grupo
cada usuário do departamento contábil. Assim, somente eles acessarão o diretório. Via de regra, o sistema operacional cria um
grupo para cada conta de usuário criada;
TinTin,Belgica,846-846: esse campo é muito interessante, pois permite a inclusão de informações adicionais sobre o usuário.
Também chamado de GECOS (General Electric Comprehensive Operating System) em alusão a uma funcionalidade existente em
um sistema operacional Unix que tinha esse nome, esse campo serve para, por exemplo, cadastrar o nome completo do usuário,
seu endereço, seu telefone ou o seu ramal, etc. Cada informação é separada da outra por uma vírgula, por exemplo: Emerson
Alecrim,Rua X,1234-4321. Na prática, você pode inserir as informações que achar melhor, não apenas os dados informados
anteriormente;
/home/tintin: cada usuário criado no sistema tem direito a uma pasta "home", ou seja, uma pasta sua, para uso exclusivo. É neste
campo que você indica onde estará essa pasta. Em geral, essas pastas ficam dentro do diretório /home/, mas você pode definir o
diretório que quiser (ou mesmo não indicar nenhum);
/bin/bash: esse é o campo que informa qual o shell (interpretador de comandos) de login que o usuário utilizará. O GNU/Linux
trabalha com vários, entre eles, o bash, o sh e o csh. Caso nenhum shell seja informado, o sistema utilizará o bash como padrão.
Gerenciando grupos
Lidar com grupos no GNU/Linux é tarefa muito semelhante ao trabalho com usuários. Veja os principais comandos disponíveis:
addgroup grupo: funciona de maneira igual ao comando adduser (inclusive algumas opções são as mesmas), no entanto,
obviamente, cria grupos ao invés de usuários;
groupdel grupo: serve para eliminar grupos do sistema;
newgrp - grupo: com este comando é possível mudar o grupo efetivo do usuário, isto é, o grupo pertencente a ele, por um outro
grupo do qual ele faz parte. Essa operação somente é executada caso o grupo tenha senha;
groups usuário: mostra os grupos dos quais um usuário faz parte. Se quiser, por exemplo, saber os grupos do usuário gandalf,
basta digitar em um terminal:
groups gandalf
As informações dos grupos são armazenadas no arquivo /etc/groups. Esse arquivo também indica quais usuários pertencem aos
grupos existentes. Cada grupo contém uma linha com essas informações. Vamos analisar a seguinte linha de um arquivo
/etc/groups para entender melhor como isso funciona:
infowester:x:1002:wester,toad,marvin
Assim como nos arquivos /etc/passwd e /etc/shadow, os campos da linha são separados por : (dois pontos). No exemplo acima, o
primeiro campo indica o nome do grupo (infowester). O segundo campo informa a senha (sim, é possível definir senhas para
grupos, embora raramente isso seja feito). Neste caso, usa-se x para indicar a ausência de senha. O terceiro campo informa o GID
do grupo (1002) e, por fim, o quarto campo informa quais são os usuários pertencentes a esse grupo. Note que, neste exemplo, os
usuários wester, toad e marvin fazem parte do grupo infowester. A lista de usuários deve ser separada por vírgulas, sem espaço
entre os nomes.
No que se refere a este assunto, é possível que encontre grupos em seu sistema que você não lembra de ter criado. Suponha, por
exemplo, que você digitou o comando groups lestat para saber quais os grupos dos quais participa o usuário lestat, e o resultado
foi o seguinte:
lestat : lestat adm cdrom floppy audio video scanner lpadmin powerdev
Note que o usuário lestat participa de vários grupos, sendo um deles o seu grupo principal, que leva o seu nome. Mas, de onde
surgiram os demais? O GNU/Linux possui alguns grupos considerados "padrão", isto é, grupos que servem para permitir que o
usuário execute determinadas tarefas. A quantidade e as finalidades dos grupos podem variar de acordo com a distribuição
GNU/Linux utilizada e a sua configuração. Eis alguns grupos bastante comuns:
cdrom: grupo para utilização de unidades de CD/DVD;
audio: grupo para acesso aos recursos de áudio do computador;
video: grupo para acesso aos recursos de vídeo do computador;
floppy: grupo para utilização da unidade de disquete;
adm: grupo para acesso de recursos administrativos.
Por exemplo:
last -n 10
last -x: mostra os dados de desligamento do sistema, assim como informações do nível de execução;
last -R: faz com que o comando não exiba os hostnames (note que a letra R fica em caixa alta);
last -a: faz com que os hostnames sejam exibidos apenas na última coluna.
Finalizando
Hoje em dia, é possível criar e administrar usuários no GNU/Linux através de interfaces gráficas, tal como mostra a imagem
abaixo, uma janela de administração de usuários da distribuição Ubuntu, exibida através do ambiente gráfico Gnome. No entanto,
é importante saber como fazer essa tarefa por comandos para os casos onde somente o modo texto - isto é, um terminal de
comandos - está disponível (situação que ocorre principalmente em servidores). Além disso, tal aprendizado ajuda na compreensão
de como o GNU/Linux e outros sistemas baseados no Unix fazem o controle de grupos e usuários.
O usuário Root
Introdução
O Linux (na verdade, qualquer sistema operacional baseado em Unix) possui um tipo de usuário que tem acesso irrestrito
aos arquivos e processos do sistema: trata-se do usuário root ou super usuário. Este artigo, voltado a iniciantes, mostrará qual a
utilidade dessa conta e os cuidados que a cercam. Para isso, são abordados os seguintes assuntos: processos e arquivos, UID e
GID, e comandos su e sudo.
Processos e arquivos
Para uma melhor compreensão sobre o usuário root, é necessário entender que cada arquivo e cada processo (programa em
execução) do sistema tem um dono, ou seja, um proprietário que determina quem pode e como usar o arquivo/processo em
questão. Obviamente, o proprietário tem acesso irrestrito aos seus "pertences", exceto quando ele mesmo bloqueia um
arquivo/processo contra si (sim, isso é possível).
Se você é usuário de um sistema Linux, pode impedir os demais usuários de utilizar seus arquivos. Da mesma forma, há arquivos
que podem ser bloqueados a você.
No caso de arquivos e processos ligados ao funcionamento do sistema, seu proprietário natural é o usuário root. Isso significa que
só ele (e outros usuários que sejam definidos como "super usuários") é que pode alterá-los. O root também pode atuar sobre
qualquer arquivo ou processo de outros usuários já que, no sistema, "ele é um deus".
Uma das formas de saber a quem pertence um determinado arquivo é digitando o seguinte comando em um terminal do
sistema:
ls -l arquivo
Exemplo:
ls -l /iw/infowester.txt
Resultado: -rwx--- 1 wester eng 1880 Feb 3 12:01 /iw/infowester.txt
O resultado informa que o arquivo em questão pertence ao usuário wester e ao grupo eng.
Um arquivo ou um processo sempre tem um dono, mas é possível fazer com que um ou mais grupos de usuários tenha os mesmos
privilégios sobre ele. Assim, no exemplo anterior, o usuário wester pode dar acesso irrestrito ao grupo eng para o arquivo
infowester.txt.
UID e GID
O Linux gerencia os usuários e os grupos através de números conhecidos como UID (User ID) e GID (Group ID). Como é
possível perceber, UID são números de usuários e GID são números de grupos. Os nomes dos usuários e dos grupos servem
apenas para facilitar o uso humano do computador.
Um fato ainda não citado, é que cada usuário precisa pertencer a um ou mais grupos. Como cada arquivo ou processo pertence a
um usuário, logo, esse arquivo/processo pertence ao grupo de seu proprietário. Assim sendo, cada arquivo/processo está associado
a um UID e a um GID.
Os números UID e GID variam de 0 a 65536. Dependendo do sistema, o valor limite pode ser maior. No caso do usuário root,
esses valores são sempre 0 (zero). Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é necessário que
seu GID seja 0. Isso informa ao sistema que o usuário em questão é super usuário.
Observação: na verdade, existe um UID real e um UID efetivo. O mesmo ocorre com o GID. Os números reais geralmente são
iguais aos efetivos. Os UIDs e GIDs reais são usados, basicamente, para fins de contabilidade, enquanto que os efetivos são os
usados para execução.
O usuário root
Como não poderia deixar de ser, o Linux "vê" o usuário root como algo especial, já que ele (na verdade, qualquer usuário que
tenha UID igual a 0) pode alterar a configuração do sistema, configurar interfaces de rede, manipular usuários e grupos, alterar a
prioridades de processos, entre outros.
Por ser tão poderoso, o usuário root é perigoso. Por isso, ele só deve ser usado em situações que não podem ser trabalhadas por
usuários que não possuem privilégios de super usuário. Imagine, por exemplo, que você está trabalhando com o usuário root. Ao
atender uma solicitação de emergência, você saiu da frente do computador sem bloqueá-lo. Alguém mal-intencionado percebe isso
e vai até seu computador, apaga diretórios importantes ao sistema e "sai de mansinho". Se você estivesse utilizando um usuário
comum, isto é, um usuário sem permissões para mexer nesses diretórios, aquele sujeito não teria conseguido apagá-los. Ainda há a
possibilidade de você cometer algum erro e pôr tudo a perder...
O usuário root é tão importante que até sua senha deve ser bem elaborada. É recomendável que ela tenha ao menos 8 caracteres e
que misture letras e números. Além disso, é recomendável mudar essa senha a determinados intervalos de tempo (como a cada 3
meses) ou quando alguém que acessava a conta root não utilizará mais o computador (quando a pessoa sai da empresa, por
exemplo). Você pode obter mais orientações sobre criação de senhas aqui.
Comando su
Você pode estar usando o sistema através de seu usuário, quando percebe que terá que fazer uma alteração de configuração
permitida apenas ao root. Uma maneira rápida e segura de fazer isso é pelo comando su (substitute user).
Digite su no terminal e o sistema pedirá que você informe a senha root. Em seguida, você poderá fazer a modificação necessária.
Ao concluir, basta digitar exit ou fechar o terminal e os privilégios de root estarão desabilitados novamente.
Observação: também é possível usar o comando su para acessar outra conta. Para isso, digite:
su usuário
Por exemplo:
su wester
Esse recurso é útil quando, por exemplo, é necessário testar uma configuração feita para um usuário ou para um grupo.
Ao fazer uso do su, seu usuário passa a ter poderes de usuário root naquele momento. No entanto, suas configurações de usuário
são mantidas, ou seja, as configurações definidas para o usuário root não são carregadas. Para fazer que com o usuário atual
adquira toda a configuração do usuário root, deve-se digitar o comando su seguido de -:
su -
Comando sudo
O comando sudo é um recurso mais poderoso que o su. Isso porque, nele, é possível definir quem pode utilizá-lo e quais comandos
podem ser executados por esses usuários. Alem disso, o sudo pode ser configurado para exigir a senha novamente quando o
usuário deixa de utilizar o sistema por um determinado tempo, por exemplo, por 10 minutos. A configuração do sudo geralmente é
feita através do arquivo /etc/sudoers.
O uso do sudo é interessante porque o usuário não precisa saber a senha do root, apenas terá que ter permissão para usar
determinados comandos pelo sudo. Além disso, o sudo permite registrar em um arquivo de log todas as atividades efetuadas, algo
que é bem limitado no su.
Para mais informações sobre o sudo, visite o site www.courtesan.com.
Finalizando
O controle sobre o que os usuários podem ou não fazer é uma das características que tornam sistemas baseados em Unix mais
seguros. Como foi possível notar, o usuário root (super usuário ou ainda, administrador) é o único que pode ter acesso ilimitado
aos recursos do sistema. Como tal, seu uso deve ser feito apenas em situações que o exigem. Para tarefas cotidianas, deve-se
utilizar um usuário comum. Para minimizar o uso do usuário root, pode-se utilizar os comandos su e sudo.