Criação, monitoramento e segurança de contas

Para adicionar uma conta de usuário ao sistema é simples, basta um comando adduser [usuário] e alguns poucos segundos para responder as questões do programa. Quando criamos contas para outros usuários temos 2 alternativas: deixarmos a senha em branco ou escolher uma senha que será passada ao usuário para que ele possa fazer a troca mais tarde. A primeira alternativa é muito perigosa, pois uma pessoa com acesso a /etc/passwd poderá facilmente descobrir sua lista de usuários (principalmente em uma grande empresa quando conhecemos as políticas de criação de novas contas). Um funcionário notaria a presença do novato e poderia aproveitar esta oportunidade para tentar incriminar este usando a conta recém criada ou tentar outras coisas para obter benefício próprio através do descuido de outros.

O segundo método de senha inicial é um pouco mais seguro e de preferência a senha deve ser escolhida pelo usuário para que pessoas que conhecem o estilo de senhas iniciais escolhidas pelo administrador não possam deduzir a nova senha criada. É comum vermos senhas como "novo1234", "123456", "abcdef", "a1b3c3", o "nome do usuário" como senhas iniciais, pois é fácil de lembrar. Senhas deste tipo são as primeiras a ser tentadas por crackers e programas específicos para este fim. Mas se o o usuário esquecer de trocar sua senha provisória?

O programa chage e passwd possui recursos que permitem definir limites mínimos e máximo do tempo para troca de senha de acesso, número máximo de dias após expirar o tempo de troca da senha em que a conta será permanentemente desabilitada (até que o administrador a reative) e o período mínimo entre troca de senhas. Alguns exemplos:

passwd -x 10 -w 3 teste

A senha do usuário teste expirará após 10 dias (-x 10) e ele será avisado com 3 dias de antecedência (-w 3) para trocar sua senha. Após o período máximo o usuário será obrigado a trocar a senha.

Quando o usuário efetuar o login receberá a seguinte mensagem: Warning: your password will expire in 3 days.

passwd -x 10 -w 3 -i 2 teste

A senha do usuário teste expirará após 10 dias (-x 10) e ele será avisado com 3 dias de antecedência (-w 3) para trocar sua senha, após a expiração da senha, o usuário tem 2 dias antes da conta ser desativada (-i 2). Se o período expirar e o usuário tentar um novo login será mostrada a mensagem:

Your account has expired: Please contact your system administrator

Para reativar a conta acima, remova totalmente o bloqueio da conta do usuário teste com passwd -x 0 teste, passwd -x 99999 -w 7 -i 0 teste ou especifique um período de dias maior em adição àqueles especificados para que ele possa trocar a senha.

Por exemplo, caso tenha passado 3 dias desde que a conta acima expirou e deseje dar mais 2 dias para o usuário trocar a conta: passwd -x 17 -i 0 teste A conta será reativada por mais 2 dias dando a oportunidade do usuário trocar a senha. Preste atenção neste exemplo para entender bem a situação e prazos.

passwd -x 90 -n 60 -w 15 -i 0 teste

A senha do usuário teste expirará após 90 dias (-x 90), ele será avisado para trocar sua senha com 15 dias antes do prazo final (-w 15) e a conta será imediatamente desativada caso o prazo máximo para troca da senha expire (-i 0). O usuário também não poderá trocar sua senha durante os primeiros 60 dias desde a última troca de senha (-n 60).

Em sistemas onde precisa adicionar restrições a muitos usuários na criação da conta, é recomendável seguir os métodos descritos em “Definindo valores padrões de restrição”.

OBS1: Em sistemas com senhas ocultas ativadas (veja “Shadow Passwords”) as restrições acima serão especificadas no arquivo /etc/shadow, isto garante que só o usuário root tenha acesso aos detalhes fornecidos neste arquivo.

OBS2: A -d do passwd serve para remover a senha do usuário especificado ou seja somente será necessário fornecer o nome de usuário para ter acesso ao sistema.

OBS3: Leve em consideração que o uso do recursos de senhas de grupo é um risco de segurança, pois a mesma senha será compartilhada entre diversas pessoas.

OBS4: O programa useradd combina as funções do adduser e passwd para garantir que a conta seja criada com as restrições apropriadas. O único inconveniente é que o useradd quebra o Debian Policy e precisa de todos todos os parâmetros para a criação correta da conta (como o diretório home, senha criptografada, e UID numérico). Seu uso é indicado em shell scripts que cuidam automaticamente da tarefa de adicionar usuários ao sistema.

Definindo valores padrões de restrição

Isto é muito útil quando precisa criar diversos usuários com as mesmas restrições de contas, isto tornará o gerenciamento do sistema muito mais prático (tudo em Unix é feito para ser mais prático, só devemos saber onde mexer). O arquivo /etc/defaults/useradd contém valores padrões que serão usados pelo useradd e adduser para definir valores de restrições de contas. Estes valores são gerados usando a opção -D em combinação com as seguintes opções do useradd:

  • -b [home] - Especificar o diretório home de usuário. O padrão é /home.

  • -e [data] - Data padrão de expiração de contas, especificada no formato AnoMesDia. Por exemplo, 20010920.

  • -f [dias] - Número máximo de dias que a conta permanece válida após a data de expiração até ser desativada.

  • -g [gid/grupo] - ID do grupo ou nome do grupo que o usuário pertencerá inicialmente.

  • -s [shell] - Shell do usuário. O padrão é /bin/bash.

OBS: Note que nem todas as opções acima terão efeito com o adduser (principalmente as opções -f, -g e -s que são especificadas no seu arquivo de configuração /etc/adduser.conf).

Senhas fáceis de adivinhar e a escolha de boas senhas

A senha lhe identifica como o verdadeiro dono de uma conta em um sistema para garantir acesso a seus recursos. A senha de um sistema é tão importante quanto uma senha de sua conta bancária, caso caia em mãos erradas as conseqüências poderão ser catastróficas, todo cuidado é pouco na hora de escolher uma senha.

Senhas fáceis de adivinhar são o primeiro motivo de sucesso de crackers no acesso a sistemas de computadores (veja “Dedução” e “Engenharia Social”), o administrador pode forçar o usuário a fazer trocas periódicas de senhas através dos recursos citados em “Criação, monitoramento e segurança de contas”, mas quem vai garantir que ele esteja escolhendo boas senhas para que ninguém as descubra com facilidade? Abaixo uma lista de senhas ruins (que deverá evitar a todo custo usa-las) e boas:

Senhas Ruins

  • O uso da palavra senha como senha! Isto parece idiota mais existe...

  • Senhas com o mesmo nome do login (joao/joao).

  • Compostas por letras ou números em seqüencia crescente ou decrescente (abcdef, 123456, 654321, etc, etc). Este tipo de senha pode ser adivinhada por dedução e são uma das primeiras combinações que crackers usam para acertar senhas.

  • palavras relacionadas com o gosto pessoal. Por exemplo "volks", "aston", "ferrari" se a pessoa é amante de carros.

  • Nome da esposa, filhos, familiares, animal de estimação, time de futebol, ídolo da TV/filmes ou qualquer coisa relacionada a familiares ou indiretamente ao usuário.

  • Idade, data de aniversário, data de casamento, número de identidade, título de eleitor, placa de carro ou qualquer coisa que seja característica do usuário.

  • Palavras existentes, algo que existe em alguma literatura. Um ataque de dicionário / brute force poderá quebrar facilmente sua senha, ou o tempo de dedução será fortemente reduzido.

  • Senhas com menos de 12 caracteres

  • Senhas apenas em minúsculas ou MAIÚSCULAS.

Senhas Boas

  • Uma boa senha nunca deverá ser lida mas fácil de lembrar. Por exemplo pense em uma frase importante para você "meu sistema operacional preferido é o Linux" e pegue a primeira letra de cada palavra: "msopeol". PRONTO esta escolhida uma boa senha que é fácil de se lembrar e difícil de ser quebrada por ataques de dicionário, e além disso, fácil de digitar!

  • Uma boa senha deve conter números e letras. A senha acima poderia ser modificada para "msopeol1"

  • Conter letras maiúsculas, minúsculas, números, pontuação e caracteres especiais: "msopeoL1@!.".

  • Conter no mínimo 12 caracteres sempre que possível. Com o aumento do poder de processamento das máquinas e sistemas de cálculo criptográficos (usados principalmente em mineração de BitCoins, este é o tamanho mínimo de senha recomendável. Isto aumenta bastante o número de combinações necessárias para se quebrar uma senha em um ataque brute force (veja “Brute Force”). Mesmo que a senha escolhida não chegue a 8 caracteres mínimos, você poderá combina-la com números.

  • Não reutilize a senha entre sites; caso a segurança de um site for comprometida, e sua senha vazar, outras contas serão igualmente comprometidas.

Com as dicas acima, a possibilidade de alguém conseguir quebrar uma senha criptografada em seu sistema usando os ataques descritos em “Tipos de ataques mais comuns para se conseguir uma senha.” é praticamente nula! Além do impacto de uma senha vazada em um site (quando usado em sistemas na internet), não impactar outros sites que utiliza a mesma conta. Para os paranóicos de plantão, o utilitário makepasswd pode criar uma senha com caracteres completamente aleatórios:

makepasswd --chars 12
4y0sBdwMd3#f

Este comando retorna uma string com 12 caracteres (--) "4y0sBdwMd3#f". Se você entendeu boa parte deste guia tenho certeza que 1 ou 2 dias de treino e se acostuma com uma senha como esta ;-)

OBS: NUNCA NUNCA dê pistas sobre sua senha! Para você isto pode ser um desafio lançado a outras pessoas quase impossível de ser resolvido, mas não se esqueça que muita gente é especializada neste tipo de dedução.

Atualização de senhas de múltiplas contas

O programa chpasswd é usado para tal operação. Deve ser especificado um arquivo que contém os campos usuário:senha por linha. Caso as senhas estejam encriptadas deverá ser especificada a opção -e ao programa.

chpasswd -e /localadmin/contas/contas.db

O comando acima atualiza a senha de todos os usuários especificados no arquivo contas.db de uma só vez.

A senha do usuário root

Esta seção foi retirada do Manual de Instalação da Debian.

A conta root é também chamada de super usuário, este é um login que não possui restrições de segurança. A conta root somente deve ser usada para fazer a administração do sistema, e usada o menor tempo possível.

Qualquer senha que criar deverá conter de 6 a 8 caracteres, e também poderá conter letras maiúsculas e minúsculas, e também caracteres de pontuação. Tenha um cuidado especial quando escolher sua senha root, porque ela é a conta mais poderosa. Evite palavras de dicionário ou o uso de qualquer outros dados pessoais que podem ser adivinhados.

Se qualquer um lhe pedir senha root, seja extremamente cuidadoso. Você normalmente nunca deve distribuir sua conta root, a não ser que esteja administrando um computador com mais de um administrador do sistema.

Utilize uma conta de usuário normal ao invés da conta root para operar seu sistema. Porque não usar a conta root? Bem, uma razão para evitar usar privilégios root é por causa da facilidade de se cometer danos irreparáveis como root. Outra razão é que você pode ser enganado e rodar um programa Cavalo de Tróia -- que é um programa que obtém poderes do super usuário para comprometer a segurança do seu sistema sem que você saiba.