Sistemas operacionais apropriados para servidores sempre possuíram o suporte à criação de usuários
e grupos
. Cada usuário de um sistema Linux possui uma série de prerrogativas (de segurança) a ele associadas que irão determinar as operações que o mesmo pode realizar no sistema. Por meio de configurações simples podemos determinar se um usuário:
No Linux existem várias formas de se criar e administrar usuários. Em servidores com grande número de usuários e serviços é recomendável utilizar algum mecanismo de autenticação e administração mais elaborado, como por exemplo o LDAP
. O mecanismo mais simples (e padrão) é oferecido diretamente pelo próprio sistema, através de uma série de comandos que manipulam os arquivos /etc/passwd
, /etc/group
, /etc/shadow
e, menos comumente, /etc/gshadow
.
O arquivo /etc/passwd
contém a lista de usuários existentes em um sistema. As informações sobre cada usuário ficam em uma linha do arquivo, que possui o seguinte formato:
... aluno:x:1000:1000:Usuário aluno do sistema,,,:/home/aluno:/bin/bash (1) (2) (3) (4) (5) (6) (7) ... (1) = Login do usuário; (2) = Senha criptogradada. Um x indica que a senha está no arquivo /etc/shadow; (3) = UID - Identificação numérica e individual do usuário para o sistema; (4) = GID - Identificação numérica do grupo principal do usuário; (5) = Informações pessoais do usuário; (6) = Diretório home do usuário; (7) = Shell do usuário (programa que será executado quando ele(a) abrir um terminal).
O arquivo /etc/group
contém a lista de grupos existentes em um sistema, possuindo o seguinte formato:
... users:x:100:aluno,fulano (1) (2)(3) (4) ... (1) = Nome do grupo; (2) = Senha criptogradada. Um x indica que a senha está no arquivo /etc/gshadow; (3) = GID - Identificação numérica e individual do grupo para o sistema; (4) = Lista de usuários do grupo, separados por vírgula.
O arquivo /etc/shadow
contém as senhas criptografadas, e outras informações de segurança, possuindo o seguinte formato:
... aluno:$6$eQ6PLJvM$lk2NAT4ZgebXczKA/IZTXG5rYMObC1Ej52Uc.5jVUXhnkgD.:14981:0:99999:7::: (1) (2) (3) (4) (5) (6)(7)(8)(9) ... (1) = Login do usuário; (2) = Senha Criptografada (! e * significam que a conta está bloqueada, ou não permite login via terminal); (3) = Data da última mudança de senha (desde 01/01/1970); (4) = Número mínimo de dias entre mudanças de senhas; (5) = Número máximo de dias entre mudanças de senhas; (6) = Número de dias antes da senha expirar em que se deve solicitar a troca da senha; (7) = Número de dias que o usuário ainda pode fazer login após a senha expirar; (8) = Data de expiração da conta (em dias desde 01/01/1970); (9) = Reservado para uso futuro.
O arquivo /etc/gshadow
é bem menos utilizado que os anteriores. Ele permite a definição de senhas para grupos. Através dela um usuário pode solicitar a entrada em um novo grupo. Seu formato é mostrado a seguir:
... admin:!::aluno,fulano (1) (2)(3) (4) ... (1) = Nome do grupo; (2) = Senha criptogradada. (! ou * significam que a entrada de novos membros está bloqueada e só pode ser realizada por um administrador); (3) = Lista de administradores (podem mudar a senha ou lista de membros de um grupo); (4) = Lista de usuários do grupo, separados por vírgula.
Boa parte do funcionamento dos comandos que serão apresentados a seguir é controlada pelas configurações encontradas nos arquivos /etc/adduser.conf
e /etc/login.defs
. O valor do UID e GID de um usuário é particularmente importante:
UID=0
. Por convenção o sistema sempre cria um usuário administrador de login root
, durante a instalação. Normalmente administradores também terão GID=0
;UID
entre 100
e 999
;UID
maior que 999
.
Os principais comandos de administração de usuários utilizando o mecanismo passwd
são descritos a seguir.
Sintaxe : adduser [opções] <usuário>
Opções (principais):
–disabled-login:
Cria o usuário mas não atribui senha, não será possível realizar login.
–gid <gid>:
Informa o grupo principal do novo usuário.
–uid <uid>:
Informa o User ID do novo usuário.
–home <home>:
Informa o diretório home do novo usuário.
–shell <shell>:
Informa o shell do novo usuário.
Se utilizado com dois argumentos (sem opção), adduser irá adicionar um usuário existente a um grupo existente.
Exemplo:
root@debian:~# adduser --gid 100 fulano Adicionando o usuário `fulano' ... Adicionando novo usuário `fulano' (1001) ao grupo `users' ... Criando diretório pessoal `/home/fulano' ... Copiando arquivos de `/etc/skel' ... Digite a nova senha UNIX: Redigite a nova senha UNIX: passwd: senha atualizada com sucesso. Modificando as informações de usuário para fulano Informe o novo valor ou pressione ENTER para aceitar o padrão Nome Completo []: Fulano de Tal Número da Sala []: 46 Fone de Trabalho []: 3232-3232 Fone Doméstico []: 3434-3434 Outro []: Esta informação está correta?[S/n] S root@debian:~#
Inclusão de um usuário em um grupo:
root@debian:~# adduser fulano admin Adicionando o usuário `fulano' ao grupo `admin' ... Adicionando usuário fulano ao grupo admin Concluído. root@debian:~#
Sintaxe : addgroup [opções] <grupo>
Opções (principais):
–gid <gid>:
Informa o Group ID do novo grupo.
Se utilizado com dois argumentos (sem opção), addgroup irá adicionar um usuário existente a um grupo existente.
Exemplos:
Criando grupo:
root@debian:~# addgroup alunos Adicionando grupo 'alunos' (GID 1001) ... Concluído. root@debian:~#
Adicionando usuário a um grupo:
root@debian:~# addgroup fulano alunos Adicionando usuário 'fulano' ao grupo 'alunos' ... Adicionando usuário fulano ao grupo alunos Concluído.root@debian:~#
Sintaxe : passwd [opções] [usuário]
Opções (principais):
-e:
Expira a senha de um usuário (forçando que ele mude de senha no próximo login).
-l:
Bloqueia a senha de um usuário, impedindo o login.
-u:
Desbloqueia a senha de um usuário, permitindo o login.
-x <dias>:
Determina o número máximo de dias entre mudanças de senhas.
Exemplos:
root@debian:~# passwd fulano Digite a nova senha UNIX: Redigite a nova senha UNIX: passwd: senha atualizada com sucesso. root@debian:~#
root@debian:~# passwd -x15 fulano passwd: informações de expiração de contas modificadas. root@debian:~#
root@debian:~# passwd -l fulano passwd: informações de expiração de contas modificadas. root@debian:~#
Sintaxe : chfn <usuário>
Exemplo:
root@debian:~# chfn fulano
Sintaxe : chsh <usuário>
Exemplo:
root@debian:~# chsh fulano
Sintaxe : usermod [opções] <usuário>
Opções (principais):
-d <home_dir>:
Altera o diretório home do usuário para home_dir
.
-g <gid>:
Altera o grupo principal do usuário para gid
.
-l <new-login>:
Altera o login do usuário para new-login
.
-m :
Move os arquivos para o novo diretório home. É utilizada em conjunto com -d
.
-u <uid>:
Altera o User ID do usuário para uid
.
Exemplos:
root@debian:~# usermod -m -d /home/fulanohome fulano root@debian:~#
Sintaxe : userdel [opções] <usuário>
Opções (principais):
-r:
Remove o diretório home do usuário.
Exemplos:
root@debian:~# userdel -r fulano root@debian:~#
Sintaxe : groupdel <grupo>
Exemplos:
root@debian:~# groupdel alunos root@debian:~#
Sintaxe : id [usuário]
Exemplos:
root@debian:~# id fulano uid=1001(fulano) gid=1001(fulano) grupos=1001(fulano),100(users)