Levar você a uma compreensão mais profunda do sistema de arquivos Linux (superdetalhado!) (Solução de problemas de exaustão de número de Inode, recuperação de arquivos excluídos acidentalmente e análise de arquivos de log)
Já vimos que cada arquivo e inode se correspondem, ou seja, cada arquivo terá um número de inode, mas desta forma pode acontecer que o inode se esgote, mas o disco rígido não esteja cheio.
Assim que isso acontecer, não podemos mais criar novos arquivos no disco rígido.Para torná-lo mais intuitivo para todos entenderem, a seguir é um caso para simular a falha do número de arquivos no sistema de arquivos do Linux.
1. Preparação
Crie um novo disco rígido, crie a partição / dev / sdb1, tamanho da partição + 30M (não muito grande, aqui é apenas um experimento de simulação, caso contrário, haverá muitos números de inode)
Formato, formato ext4 (xfs também funciona)
[root@localhost ~]# mkfs.ext4 /dev/sdb1
Pode ser uma situação: depois que a partição é criada e formatada e o arquivo do disco é encontrado ausente, o que devo fazer? Neste momento, é recomendável reiniciar o sistema ou executar o comando "partprobe" para fazer o sistema operacional detectar a nova tabela de partição para evitar a formatação da partição Danificar os dados existentes no disco rígido
Crie um novo diretório e monte-o
Use o comando df com a opção "-i" para confirmar o uso do i-node no sistema de arquivos, pode-se ver que existem 7680 inodes
2. Simular falha de exaustão de i-node
Escreva um script para simular o esgotamento de todos os i-nodes disponíveis em / dev / sdb1 (7680)
Para aprender mais sobre o programa de script posteriormente, apenas entenda-o aqui
Neste momento, verifique os inodes disponíveis da partição novamente, e descubra que ela está cheia, e então crie um novo arquivo não pode ter sucesso, mas através do comando df para visualizar a partição, apenas "4%", há muito espaço livre; a partir disso, você pode obter: Disco O número de arquivos criados é limitado pelo tamanho do disco e o número de números de inode
Entendemos a origem da falha, então o problema pode ser resolvido melhor, você pode "ls -a" para ver todos os arquivos (incluindo arquivos ocultos)
Em seguida, descubra os pequenos arquivos que ocupam um grande número de i-nodes na partição e transfira ou exclua-os.
Para sistemas de arquivos compartilhados por muitos usuários, é recomendado definir cotas de disco para usuários relacionados (incluindo o número de arquivos e espaço em disco)
2. Recupere arquivos excluídos por engano
Quando muitos de nossos usuários comuns excluem um arquivo, eles na verdade não conhecem o nó inode e os dados do bloco, eles apenas encontram o arquivo (nome) e o excluem.
Na verdade, o Linux controla a exclusão de arquivos por meio do número de links. Somente quando não houver nenhum link em um arquivo, o arquivo será completamente excluído.
Para o sistema de arquivos EXT no sistema Linux, você pode usar a ferramenta de recuperação extundelete para recuperar arquivos. É uma ferramenta de recuperação de dados Linux de código aberto que suporta sistemas de arquivos ext3 e ext4 (ext4 só pode ser recuperado na versão CentOS6)
1. Preparação (compilar e instalar extundelete)
Você pode continuar com a partição recém-criada agora, mas primeiro desmonte-a, reformate-a para "ext3" e monte-a
[root@localhost test]# cd
[root@localhost ~]# umount /test/
[root@localhost ~]# mkfs.ext3 /dev/sdb1
...略
[root@localhost ~]# mount /dev/sdb1 /test/
Antes de compilar e instalar extundelete, você precisa instalar dois pacotes de dependência (primeiro preste atenção se você montou um espelho)
[root@localhost test]# ls
extundelete-0.2.4.tar.bz2 lost+found
[root@localhost test]# tar jxvf extundelete-0.2.4.tar.bz2 ##解压
...略
[root@localhost test]# ls
extundelete-0.2.4 extundelete-0.2.4.tar.bz2 lost+found
[root@localhost test]# cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]# ls
acinclude.m4 config.h.in depcomp Makefile.am README
aclocal.m4 configure install-sh Makefile.in src
autogen.sh configure.ac LICENSE missing
[root@localhost extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete ##进行配置,指定软件安装(工作)目录
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make && make install ##编译完成后进行安装
...略
[root@localhost extundelete-0.2.4]# cd /usr/local/extundelet
[root@localhost extundelet]# ls
bin
[root@localhost extundelet]# cd bin/
[root@localhost bin]# ls
extundelete
[root@localhost bin]# ln -s /usr/local/extundelet/bin/extundelete /usr/bin/ ##创建软链接,把前者文件放入/usr/bin目录中,让系统能识别extundelete的所有命令
2. Simular exclusão
Volte para o diretório / test / e crie um novo arquivo no diretório ("echo" significa saída, que é equivalente a criar quatro arquivos com o conteúdo de a)
[root@localhost bin]# cd /test/
[root@localhost test]# echo a>a
[root@localhost test]# echo a>b
[root@localhost test]# echo a>c
[root@localhost test]# echo a>d
[root@localhost test]# cat a
a
[root@localhost test]# cat b
a
[root@localhost test]# cat c
a
[root@localhost test]# cat d
a
[root@localhost test]# ls
a c extundelete-0.2.4 lost+found
b d extundelete-0.2.4.tar.bz2
Verifique quais arquivos existem no sistema de arquivos / dev / sdb1, o i-node começa em 2 e 2 significa que o arquivo é o primeiro diretório do sistema
[root@localhost test]# extundelete /dev/sdb1 --inode 2
...略
Would you like to continue? (y/n)
y ##你想继续吗,输入y继续
...略
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
extundelete-0.2.4.tar.bz2 12
extundelete-0.2.4 1921
a 13
b 14
c 15
d 16
##只列出关键内容,这里可以看到a、b、c、d的inode号都有了
Depois de excluir os arquivos a e b, "ls" descobrirá que não há arquivos aeb, e quando inserirmos o comando "extundelete / dev / sdb1 --inode 2", descobriremos que os arquivos aeb estão no estado Excluído.
[root@localhost test]# rm -rf a b
[root@localhost test]# ls
c extundelete-0.2.4 lost+found
d extundelete-0.2.4.tar.bz2
[root@localhost test]# extundelete /dev/sdb1 --inode 2
...略
3. Realize operações de recuperação
Primeiro volte para o diretório inicial, desmonte / test /, e então use para restaurar todo o conteúdo no sistema de arquivos / dev / sdb1. Após executar este comando, um novo diretório aparecerá no diretório atual, que salva os arquivos restaurados
Existem muitos usos de extundelete, os alunos interessados podem verificar usos mais detalhados através da ajuda
Após o arquivo ser excluído por engano, se o número do inode for substituído (o diretório está cheio ou formatado), ele não pode ser recuperado e restaurado.
Três, backup e recuperação de arquivos do tipo xfs
1. Visão Geral
Nota: É outro tipo, não excluir e restaurar diretamente, mas fazer backup e restaurar
CentOS7 usa arquivos do tipo xfs por padrão, e arquivos do tipo xfs podem ser copiados e restaurados com as ferramentas xfsdump e xfsrestore
Existem dois níveis de backup para xfsdump: 0 significa backup completo: 1-9 significa backup incremental
Backup incremental: após a conclusão do backup, se houver novo conteúdo no disco, ele fará o backup apenas do novo conteúdo, em vez de realizar um backup completo novamente
O nível de backup padrão de xfsdump é 0.
2. Formato de comando
xfsdump -f 指定备份存放位置 要备份的路径或设备文件
3. Opções comuns
-f: especifica o diretório do arquivo de backup
-L: Especifique o rótulo da sessão (se não for especificado, seremos solicitados a inseri-lo diretamente)
-M: Especifique o rótulo do dispositivo
-s: faz backup de um único arquivo (não pode ser seguido diretamente pelo caminho)
4. Restrições de uso
Apenas o sistema de arquivos montado pode ser copiado
Deve usar autoridade de root para operar
Apenas o sistema de arquivos XFS pode ser copiado
Os dados após o backup só podem ser analisados por xfsrestore
5. Etapas de operação
Crie uma nova partição / dev / sdb2 com um tamanho de + 10G (opcional), formate-a como xfs e monte-a no diretório / data / recém-criado
Simule a perda de dados e restaure arquivos usando o comando "xfsrestore"
[root@localhost opt]# cd -
/data
[root@localhost data]# ls
passwd xcf
[root@localhost data]# rm -rf *
[root@localhost data]# ls
[root@localhost data]# xfsrestore -f /opt/dump_sdb2 ./
...略
[root@localhost data]# ls
passwd xcf ##检查一下是否成功恢复
[root@localhost data]# cd xcf/
[root@localhost xcf]# ls
xcf.txt ##OK~
Quarto, analise os arquivos de log
1. Função de registro
O arquivo de log é um arquivo usado para registrar várias informações operacionais no sistema Linux, o que equivale a um "diário"
Diferentes arquivos de log registram diferentes tipos de informações, como hora de login do usuário, erro de programa, etc.
Ao ler o log, é útil diagnosticar e resolver as falhas do sistema (documentado)
Além disso, quando o host é atacado por hackers, o arquivo de log também pode ajudar a encontrar rastros deixados pelo hacker (como quebra de força bruta em várias tentativas de login)
2. Classificação dos logs
No sistema Linux, os dados de registro incluem principalmente os três tipos a seguir:
Registros do kernel e do sistema:
Gerenciamento unificado pelo serviço do sistema rsyslog, de acordo com as configurações em seu arquivo de configuração principal /etc/rsyslog.conf para determinar onde registrar as mensagens do kernel e várias mensagens do programa do sistema
Vários programas no sistema irão entregar seus arquivos de log para o gerenciamento de log rsyslog, então esses formatos são basicamente os mesmos
Registro do usuário:
Registre informações de login e logout do usuário do sistema
Incluindo nome de usuário, terminal de login, hora de login, host de origem, processo em uso, etc.
Registro do programa:
Usado para registrar várias informações de eventos durante a execução deste programa
Arquivos de log gerenciados de forma independente por vários aplicativos, o formato de registro não é uniforme
Os arquivos de log do próprio sistema operacional Linux e da maioria dos programas de servidor são colocados no diretório / var / log por padrão
3. Arquivos de log comuns
Para os arquivos de log no sistema Linux, é necessário entender seus respectivos usos, para que o problema seja encontrado de forma mais rápida e precisa quando necessário, e várias falhas possam ser resolvidas a tempo. Aqui estão alguns arquivos de log comuns
Arquivo de log
Introdução
Kernel e log de mensagens públicas: / var / 1og / messages
Grave mensagens do kernel do Linux e informações de registro público de vários aplicativos, incluindo inicialização, erros de IO, erros de rede, falhas de programa, etc.
Registro de tarefa agendada: / var / log / cron
Registre as informações do evento geradas pela tarefa agendada do crond
Registro de inicialização do sistema: / var / 1og / dmesg
Grave várias informações de eventos do sistema Linux durante o processo de inicialização
# Log do sistema de e-mail: / var / log / maillog
Registrar atividade de e-mail entrando ou enviando o sistema
Log de login do usuário: / var / 1og / secure
Grave informações de eventos de segurança relacionadas à autenticação do usuário
/ var / log / lastlog
Registre os eventos de login recentes de cada usuário; formato binário
/ var / log / wtmp
Registre cada login, logout e eventos de inicialização e desligamento do sistema; formato binário (você não pode lê-lo de qualquer maneira)
/ var / run / btmp
Falha no registro e tentativas de login incorretas e eventos de verificação; formato binário
Digite o diretório, "vim target" para ver o log
4. Análise do arquivo de log
Depois de se familiarizar com os principais arquivos de log do sistema, vamos apresentar os métodos de análise para arquivos de log
O objetivo de analisar o arquivo de log é navegar no log para encontrar informações importantes, depurar o servidor e determinar a causa da falha, etc.
Para a maioria dos arquivos de log em formato de texto (como kernel e logs de sistema, a maioria dos logs de programa), você pode visualizar o conteúdo do log usando ferramentas de processamento de texto, como tail, more, less, cat, etc.
Para alguns arquivos de log em formato binário (como logs de usuário), você precisa usar comandos de consulta de característica
5. Kernel e logs do sistema
Gerenciamento unificado pelo serviço de sistema rsyslog
Pacote: rsyslog-7.4.7-16.el7.x86_ 64
Arquivo de configuração: /etc/rsyslog.conf
Programa principal: / sbin / rsyslogd
Digite "vim /etc/rsyslog.conf" para entrar e ver o arquivo de configuração
"* .info" significa que todas as informações de nível de informação e acima são gravadas no arquivo de log correspondente
"Mail.none" significa que as informações sobre algo não são gravadas no arquivo de log
Nível de prioridade das mensagens de log do kernel do sistema Linux (quanto menor o nível de número, maior a prioridade e mais importante a mensagem):
Prioridade
Descrição
0
EMERG (emergência): uma situação que fará com que o sistema host fique indisponível
1
ALERTA: problemas que devem ser resolvidos imediatamente
2
CRIT (grave): uma situação mais grave
3
ERR (erro): Ocorreu um erro durante a operação
4
AVISO: eventos importantes que podem afetar as funções do sistema e precisam lembrar os usuários
5
AVISO (Nota): não afetará o funcionamento normal, mas precisa prestar atenção ao evento
6
INFO: informações gerais
7
DEBUG (depuração): informações de depuração do programa ou sistema, etc.
Geralmente, em uso real, ele pode registrar até o nível ERR (3, erro). É impossível registrar todas as informações no registro. Para eficiência, registre apenas o importante (ou seja, o registro comum ou o registro de erros e muito mais É o log de erros, veja o que aconteceu com a falha)
6. Formato geral de registros de log
O kernel e a maioria das mensagens do sistema são gravadas no arquivo de log público / var / log / messages, enquanto outras mensagens do programa são gravadas em seus próprios arquivos de log independentes. Além disso, as mensagens de log também podem ser gravadas em um dispositivo de armazenamento específico ou Envie diretamente para o usuário especificado
Veja o conteúdo do arquivo / var / log / messages como segue
... Omitido
Cada linha representa uma mensagem de registro e cada mensagem inclui quatro campos
Etiqueta de tempo: a data e hora em que a mensagem foi enviada
Nome do host: o nome do computador que gerou a mensagem
Nome do subsistema: o nome do aplicativo que emitiu a mensagem
Mensagem: o conteúdo específico da mensagem
Em alguns casos, você pode definir rsyslog para enviar as informações de registro à impressora para impressão enquanto grava o arquivo de registro no arquivo, de forma que, independentemente de como o invasor da rede modifique o registro, o rastreamento da invasão não possa ser apagado.
O rsyslog é um alvo proeminente que é frequentemente atacado. Se for destruído, será difícil para os administradores encontrarem intrusões e rastros de intrusões. Portanto, preste atenção especial ao monitoramento de seu daemon e arquivos de configuração.
7. Análise de log do usuário
Informações de login e logout do usuário salvas
/ varl / log / lastlog: eventos recentes de login do usuário
/ var / log / wtmp: eventos de login, logout e inicialização do sistema e desligamento do usuário
/ var / run / utmp: informações detalhadas de cada usuário atualmente conectado
/ var / log / secure: eventos de segurança relacionados à autenticação do usuário
Esses arquivos são arquivos de dados binários. Você não pode usar diretamente ferramentas de visualização de texto, como tail e less para navegar. Você precisa usar comandos de consulta do usuário, como users, who, w, last e lastb para obter informações de log.
O comando do usuário instrui simplesmente a saída do nome do usuário conectado no momento, e cada nome de usuário exibido corresponde a uma sessão de login; se um usuário tiver mais de uma sessão de login, seu nome de usuário será exibido o mesmo número de vezes.
O comando who é usado para relatar as informações de cada usuário atualmente conectado ao sistema; usando este comando, o administrador do sistema pode ver quais usuários ilegais existem no sistema atual para auditar e processá-los (a saída padrão de quem inclui o nome do usuário, Tipo de terminal, data de login e host remoto)
O comando w é usado para exibir informações sobre cada usuário no sistema atual e o processo que estão executando, e o conteúdo de saída será mais rico
O último comando é usado para consultar os registros dos usuários que se autenticaram com sucesso no sistema. O último status de login será exibido na parte superior; se um usuário não autorizado fez login, você pode saber que foi invadido.
O comando lastb é usado para consultar os registros do usuário de logins com falha. Você pode prestar atenção se alguém está violando sua senha com força bruta; você também pode obter informações relacionadas no log de segurança / var / log / secure (tail / var / log / secure)
8. Análise do registro do programa
Em sistemas Linux, alguns aplicativos não usam o serviço rsylog para gerenciar logs, mas, em vez disso, mantêm registros de log pelo próprio programa
programa de serviço de site httpd (serviço da Web): / var / log / httpd /
Registre por meio dos dois arquivos de log a seguir
access_ log // Registrar eventos de acesso do cliente
error_ log // Registrar eventos de erro
Serviço de proxy (equivalente a um mecanismo de servidor de cache para os usuários acessarem novamente, reduzindo a carga simultânea do servidor): / var / log / squid /
access.log 、 cache.log
Porque o formato do registro de log de diferentes programas é bastante diferente, e não há um formato uniforme estrito, então não o apresentarei em detalhes aqui.
O arquivo de log será gravado dinamicamente, e você está constantemente escrevendo enquanto o assiste. O log continuará a crescer, o que afetará nossa visualização. No momento, você precisa de algumas ferramentas profissionais de análise de log para visualizar (interessado Os alunos podem aprender mais sobre isso)
9. Estratégia de gerenciamento de log (resumo)
Em geral, como administrador de sistema profissional, você deve estar sempre vigilante, prestar atenção a todos os tipos de situações suspeitas, verificar vários arquivos de log do sistema regularmente e fazer backups e arquivos em tempo hábil.
Ao verificar esses registros, uma vez que locais não razoáveis forem encontrados, faça um registro imediatamente
Prolongue o tempo de economia de registro (conveniente para ver por você mesmo e também conveniente para os outros?), Por meio de operações como backup
Controle de direitos de acesso ao registro (como algumas informações confidenciais, como números de conta, senhas e senhas, etc.)
Gerenciamento centralizado de logs
Envie o arquivo de log do servidor para o servidor de arquivo de log unificado (para que possamos encontrá-lo)
Isso facilita a coleta, classificação e análise unificada de informações de registro
Previna efetivamente a perda acidental, adulteração maliciosa ou exclusão de informações de registro
Além disso, às vezes os logs não são totalmente confiáveis. Hackers antigos e altamente qualificados limparão a cena perfeitamente após a invasão.
Portanto, para resumir, precisamos ser capazes de aplicar os comandos do sistema acima com proficiência e flexibilidade, e conduzir análises e testes abrangentes e abrangentes, e lembrar de retirá-los do contexto.