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)


1. Solução de problemas de exaustão de inode

  • 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
    marca
  • 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
    marca

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
[root@localhost test]# for ((i=1;i<=7680;i++));do touch /test/file$i;done 
touch: 无法创建"/test/file7670": 设备上没有空间
touch: 无法创建"/test/file7671": 设备上没有空间
touch: 无法创建"/test/file7672": 设备上没有空间
touch: 无法创建"/test/file7673": 设备上没有空间
touch: 无法创建"/test/file7674": 设备上没有空间
touch: 无法创建"/test/file7675": 设备上没有空间
touch: 无法创建"/test/file7676": 设备上没有空间
touch: 无法创建"/test/file7677": 设备上没有空间
touch: 无法创建"/test/file7678": 设备上没有空间
touch: 无法创建"/test/file7679": 设备上没有空间
touch: 无法创建"/test/file7680": 设备上没有空间        ##这里开始提示设备上没有空间了

  • 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
[root@localhost test]# df -i /dev/sdb1
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1       7680    7680       0     100% /test
[root@localhost test]# touch xcf.txt
touch: 无法创建"xcf.txt": 设备上没有空间
[root@localhost test]# df -Th /test/
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdb1      ext4   29M  916K   26M    4% /test

3. Corrija a falha

  • 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 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs
...略
  • Depois de instalar o pacote de dependência, você pode copiar o pacote ou baixá-lo diretamente (basta copiar e colar)
[root@localhost test]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
--2020-12-03 15:32:50--  http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
正在解析主机 nchc.dl.sourceforge.net (nchc.dl.sourceforge.net)... 140.110.96.69, 2001:e10:ffff:1f02::17
正在连接 nchc.dl.sourceforge.net (nchc.dl.sourceforge.net)|140.110.96.69|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:108472 (106K) [application/octet-stream]
正在保存至: “extundelete-0.2.4.tar.bz2”

100%[==================>] 108,472     40.4KB/s 用时 2.6s   

2020-12-03 15:32:54 (40.4 KB/s) - 已保存 “extundelete-0.2.4.tar.bz2” [108472/108472])

  • Descompacte, configure, compile, instale
[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
    marca
  • 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
[root@localhost ~]# mkfs.xfs /dev/sdb2
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb2 /data/
##可以df-Th检查一下
##注:记得之前说过的,若是这里格式化没有出来sdb2,要重启系统或者刷新一下
  • Entre no diretório / data /, copie um arquivo nele, então crie um diretório nele e crie um arquivo no diretório
[root@localhost ~]# cd /data/
[root@localhost data]# cp /etc/passwd ./
[root@localhost data]# ls
passwd
[root@localhost data]# mkdir xcf
[root@localhost data]# touch xcf/xcf.txt
[root@localhost data]# ls
passwd  xcf
[root@localhost data]# ls -R
.:
passwd  xcf

./xcf:
xcf.txt        ##创建成功(子目录和他的文件)
  • Use "xfsdump" para fazer backup de toda a partição (/ dev / sdb2) para o diretório (/ opt / dump_sdb2)
[root@localhost data]# rpm -q xfsdump        ##首先查询一下“xfsdump”软件包有没有安装,一般都是安装了,没有则安装一下
xfsdump-3.1.4-1.el7.x86_64
[root@localhost data]# xfsdump -f /opt/dump_sdb2 /dev/sdb2
##输入此命令后,会提示输入我的标签,而标签就是这个文件名,我们输入“dump_sdb2”按回车
##之后又会提示让我们输入设备,输入“sdb2”就行了
[root@localhost data]# cd /opt/
[root@localhost opt]# ls
dump_sdb2  rh        ##备份成功
  • 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
      marca
  • 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
    marca
    ... 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.
  • Vamos, alunos que gostam de aprender!

Acho que você gosta

Origin blog.csdn.net/weixin_51486343/article/details/110564983
Recomendado
Clasificación