Tutorial Informações preciosas Muitos comandos relacionados com logs e usuários podem ajudar a monitorar o sistema e manter o controle sobre questões de segurança. Neste artigo apresentamos várias ferramentas úteis para manter as coisas em ordem. por Bruce Byfield Podemos dizer que Unix e Linux foram projetados para suportar logins múltiplos, logs e comandos que fornecem informações sobre usuários. Estes recursos muitas vezes detectam os primeiros sinais de uma tentativa de invasão no sistema. Em um ambiente institucional, eles podem ser usados para verificar não só os recursos que estão sendo utilizados, mas também se os usuários estão fazendo o que supostamente deveriam estar fazendo. Se o usuário possui um pouco de experiência com administração de sistemas, provavelmente já deve ter usado o comando adduser. Este comando (figura 1) fornece um assistente simples para ajudar a criar uma nova conta de usuário no sistema. Por padrão, a maior parte do trabalho é automática para o administrador, como criar automaticamente um ID de usuário (UID). No entanto, podemos optar por especificar alguns detalhes manualmente, com opções como gid ID e shell SHELL. Ao invés disso, podemos usar o comando useradd, que é menos conveniente para a criação de um novo usuário adduser, mas pode ser usado para editar os detalhes de um usuário já existente. Ambos os comandos têm opções de exclusão como deluser e userdel, que são semelhantes em função, mas cujas opções são diferentes. Por exemplo, o comando userdel tem uma opção -f ou --force que falta ao deluser. E userdel usa -r ou --remove para excluir o diretório home do usuário e filas de email e de impressão ao invés do comando deluser --remove -home que faz a remoção automática de spools de uma conta. Mas estes são apenas alguns dos itens do kit de ferramentas básicas para administradores de sistemas. Pelo menos 10 outros programas para logs e comandos apresentam informações para facilitar a vida do administrador alguns deles se sobrepõem em termos de recursos, mas todos fornecem informações detalhadas. Figura 1 O assistente de linha de comando com o qual são adicionadas a maioria das contas de usuário. Informações do usuário nos logs O Linux armazena vastas quantidades de informação sobre cada aspecto do sistema, e os assuntos relacionados aos usuários não são exceção. Muitos logs são mantidos em arquivos de texto simples e podem ser exibidos com comandos como less ou cat. No entanto, muitos são também longos, portanto, quando identificamos problemas, geralmente é melhor usar o comando 53
Figura 2 O comando lastlog mostra a última vez que um usuário esteve conectado ao sistema. Figura 3 Falhas de login podem indicar uma tentativa de invasão do sistema. O comando faillog exibe essas falhas. Ele também pode desativar uma conta suspeita. tail p LOGFILE. Este comando exibe apenas a última dúzia de linhas do arquivo, aproximadamente, que são lentamente substituídas a medida em que são geradas novas mensagens pelo sistema. Outros logs são armazenados em bancos de dados, de modo que são melhor visualizados com suas ferramentas próprias de leitura de dados. Registro de usuários O arquivo /var/log/lastlog é um tipo de banco de dados que grava os logins anteriores dos usuários. O comando lastlog fornece uma lista completa de todos os usuários que estão atualmente no sistema, incluindo aqueles criados pelo sistema e usados por alguns daemons. Usuários excluídos não são exibidos. Para cada usuário, ele mostra a porta em que estão (ou estavam) logados e a data do último login ou então exibe a mensagem Never logged in ( Nunca logado ) pelo menos, não desde que a senha foi alterada pela última vez. No entanto, a lista resultante é longa, então o usuário provavelmente desejará modificá-la com less no final do comando. Melhor ainda, podemos usar o parâmetro -u ou --user, seguido por um nome de login para especificar cada usuário a ser incluído no resultado por nome ou UID, ou para especificar um número de usuários a partir de um intervalo de UIDs com início e fim separados por um hífen (figura 2). Os resultados também podem ser modificados com a opção -b DAYS ou before DAYS, que imprime os registros que são mais antigos do que o número de dias digitado. Alternativamente, podemos usar a opção t DAYS ou time DAYS para visualizar os registros que são mais recentes do que o número de dias especificado. Falha no log A base de dados /var/log/faillog registra o número de vezes que os usuários têm tentado, sem sucesso, fazer o login. O comando faillog faz dois usos do banco de dados de falhas de log. Primeiro, o comando faillog é usado pelo usuário root para verificar o número de vezes em que um usuário específico falhou no login. Esta estatística é um possível sinal de um sistema parcialmente quebrado ou de um usuário cuja conta precisa ser reativada, pois o sistema está configurado para desabilitar usuários que passam por um certo número de falhas de login sucessivas. Podemos usar a opção -a para exibir as informações para todos os usuários Figura 4 O arquivo auth.log registra todos os logins e logoffs. Figura 5 O arquivo user.log muitas vezes é um bom ponto de partida para a solução de problemas. 54 www.linuxmagazine.com.br
ou as opções u NAME ou u UID para especificar um usuário específico (figura 3). Os resultados mostram o número de tentativas de login, seguidas pelo valor máximo permitido no sistema e a data e hora da última tentativa frustrada. Se um usuário nunca passou por uma tentativa de login sem sucesso, a data exibida é a primeira que a CPU puder mostrar por exemplo: 12/31/69 16:00:00. O segundo uso do comando faillog se aplica para alterar a forma como o sistema responde a logins que falharam. As opções m NUMBER ou maximum NUMBER definem quantas falhas de login podem ocorrer antes que uma conta seja desativada; isto é muitas vezes definido como 0 na maioria das distribuições, o que significa que qualquer número de falhas de login pode ocorrer. Além disso, o número de falhas de login para uma conta específica pode ser redefinido para 0 com a opção -r ou reset. Registros O log com o nome auth.log registra autorizações isto é, inícios e términos de sessão em um sistema desde a última vez que este passou pelo boot (figura 4). Esta informação pode ser valiosa para verificar padrões de uso e detectar eventuais desvios da norma. Somente o usuário root pode visualizá-la. O registro user.log armazena os logins e logouts para todo o sistema, bem 7a Atalho Comando normal Informação -d --dead Listas de processos inoperantes -b --boot Tabela 1 Informação do comando who. Figura 6 O arquivo user.log muitas vezes é um bom ponto de partida para a solução de problemas. como quaisquer avisos que possam indicar problemas potenciais (figura 5). Em outras palavras, este log é muitas vezes um ponto conveniente para a solução de problemas gerais. Como o usuário poderia esperar, apenas o usuário root pode ler este log. Comandos relacionados ao usuário A maioria dos comandos tem dois tipos de opções: as do tipo Unix são aquelas precedidas por um hífen e são geralmente representadas por uma única letra, e as opções do GNU, que são precedidas por 7b Mostra a última vez que houve o boot do sistema -p --processes Imprime processos ativos -r --runlevel Exibe o runlevel atual -t --time Mostra a última vez que o relógio do sistema foi alterado dois hífens e são compostas normalmente por uma frase completa, que descreve o que elas fazem. É possível revelar a idade dos comandos relacionados ao usuário pelo fato de que muitos deles não possuem quaisquer opções GNU. Em outras palavras, quando administramos usuários, descemos até às bases do sistema operacional. Comandos adicionais Por conveniência, muitas distribuições e usuários tornam o usuário atual parte do terminal de comando 7c Figura 7 O comando who é uma ferramenta versátil, não só para recolher informações sobre os usuários, mas também para estatísticas gerais do sistema. 55
Figura 8 O comando id mostra um UID e GID real e efetivo da conta. Figura 9 O comando groups é uma visualização gráfica do arquivo /etc/groups. alguns para cada usuário, outros apenas para o terminal. No entanto, em sistemas sem esses terminais, lembrar em qual conta estamos conectados pode ser algo confuso, como quando utilizamos o comando su para alterar contas ao administrar ou configurar. Para tais sistemas, o comando whoami (figura 6), pode servir como uma bússola geral para o sistema. É usado sem opções e retorna somente o nome de login da conta atual. Já o comando who é um dos mais importantes para a coleta de informações sobre usuários e configurações gerais do sistema (figura 7). Não modificado por quaisquer opções, o comando who lista os usuários, exceto o root, que está conectado no momento, a data e hora em que os usuários fizeram o login. Os usuários podem ser listados várias vezes se possuírem um ou mais terminais virtuais abertos. No entanto, se adicionarmos a opção -q ou count, a mesma informação é exibida em um formato curto, que enfatiza o atual número de logins. Diferentes opções também fornecem informações básicas sobre o sistema (tabela 1). Quando fazemos login no Linux, estabelecemos um nome de usuário e grupo no sistema. No entanto, também podemos usar comandos como sudo e su para executar como um usuário diferente ou efetivo. Com o comando id, podemos encontrar rapidamente os nomes de usuário. O comando id inalterado (figura 8) fornece o verdadeiro UID (identificador único do processo) para a conta atual, além dos GIDs (identificador único dos grupos) para qualquer grupo ao qual pertença a conta. No entanto, se adicionarmos a opção -a, receberemos o UID efetivo. Da mesma forma, o parâmetro -g ou group exibe o verdadeiro GID, mas -G ou --groups (note a diferença de ortografia) imprime todos os IDs de grupo. Se o usuário não possuir vários logins, pode não notar qualquer diferença entre o usuário real e o virtual. Como se pode imaginar a partir do nome, o comando groups extrai informações selecionadas Figura 10 O comando finger fornece informações básicas sobre contas de usuário. a partir do arquivo /etc/group e as exibe (figura 9) de forma pura. Sem opções, o comando groups lista as informações para o usuário atual, mas, ao invés disso, um nome de usuário válido pode ser utilizado como opção. Outro comando útil, o finger, por alguma razão não é instalado por padrão em muitas distribuições. No entanto, quando se administra um sistema multiusuário, vale a pena instalá-lo. Sem o uso de quaisquer opções, ou com a opção -s (figura 10), o comando finger seguido por um nome de conta, lista o login, o nome, a interface, quanto tempo o usuário ficou ausente, quando fez o login no sistema, seu cargo, e o número de telefone cadastrado no momento da criação da conta. Se, como muitos usuários domésticos, deixarmos o nome, cargo e número do telefone em branco quando criamos usuários, estas colunas deverão, é claro, ficar vazias. Usar a opção -l retorna a mesma informação reformatada, em conjunto com o diretório home do usuário e Shell de login, bem como a última vez que foi recebido um e- -mail interno para este usuário. Para o trabalho de administração, esta opção é provavelmente a mais útil. Um dos comandos mais úteis para coletar informações sobre os usuários, o w, é também um dos mais simples. Ele mostra qual processo um usuário está executando no momento em que o comando é executado. Digitar o comando w e um nome de usuário produz uma tabela de 56 www.linuxmagazine.com.br
Figura 11 O que um usuário está executando e onde? Use o comando w para obter as respostas. informações para o usuário (figura 11). Da esquerda para a direita, a informação é a conta do usuário, seu terminal, seu host remoto (0, se não existir nenhum), o tempo de login, o período de tempo ocioso, o JCPU ou tempo utilizado por todos os processos ligados ao terminal, o PCPU ou o tempo utilizado pelo processo atual, bem como o nome do processo atual. Conclusão Todos esses logs e comandos podem ser muita coisa para aprender. Felizmente, grande parte das informações que eles oferecem é fácil de ler e entender. Em muitos casos também, o u- suário só precisa de uma ou duas dessas fontes de informação em um determinado contexto. Por exemplo, se suspeitar que uma senha de uma determinada conta foi comprometida, provavelmente tudo que precisará fazer é examinar o lastlog para verificar as tentativas de login no momento em que o usuário legítimo estava longe do teclado. Da mesma forma, um administrador corporativo pode querer usar o comando w para verificar se os processos sendo executados por um usuário durante o horário de expediente incluem, por exemplo, os games PySol e o Battle of Wesnoth. Em outras palavras, tudo é uma questão sobre como escolher a ferramenta certa para o trabalho em questão. Familiarize-se com estes logs e ferramentas de uma forma geral, e seja capaz de saber qual ferramenta deve ser utilizada em cada circunstância em particular. n Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em: cartas@linuxmagazine.com.br Este artigo no nosso site: http://lnm.com.br/article/8838 Tem novidade na Coleção Academy! Instalação e congifuração de servidores VoIP com Asterisk. Configuração de ramais, extensões, secretária eletrônica, monitoramento e espionagem de chamadas, planos de discagem, URA e muitos outros aspectos que abordam o uso de centrais telefônicas IP PBX. Disponível no site www.linuxmagazine.com.br 57