Arquivos desaparecendo no servidor linux

13

Eu tenho quatro arquivos específicos que parecem desaparecer do diretório pessoal de um usuário. Até onde sabemos, não há cronjobs ou outras tarefas automatizadas que os removessem. Eu configurei o auditd neles, mas os logs não estão realmente mostrando nada de interessante. Eu posso ver nosso utilitário de backup acessando-os todas as noites até o ponto em que eles não estão mais lá, mas nada mais. Existe algo que faria com que esses arquivos fossem removidos para contornar o auditd?

Os arquivos em questão são estes:

/home/username/.bashrc
/home/username/.bash_profile

bem como alguns arquivos no diretório .ssh desse usuário. Cópias desses arquivos inseridos em uma subpasta chamada "keepers" também são excluídas. Alterar as permissões nelas para 000 e tê-las pertencentes ao root não ajudou.

Atualmente, tenho a configuração inotifywait para criar, excluir, mover essa subpasta, espero que isso aconteça, embora não registre muito além de quando aconteceu, não o que a causou.

Chad P
fonte
1
Por favor, adicione seus nomes e caminhos à sua postagem, isso pode ajudar.
precisa saber é o seguinte
2
Também postar logs auditd pode ser útil.
Janne Pikkarainen
3
Além disso, você pode tentar criar os arquivos pertencentes como root e chmod 000 para ver se eles ainda são removidos (ou se isso faz com que outra coisa se queixe / com erro).
polinomial
5
Além chmod 0000, você poderia tentar chattr + i para tentar evitar até mesmo raiz de removê-la
mer
1
esteja ciente de que o chattr apenas ajuda nos sistemas de arquivos ext. mas um chattr deve ajudar. :-) Você também pode usar o SELINUX em vez do chattr para impedir que esses arquivos sejam modificados. mas IMHO a exclusão deve vir de um processo ou usuário.
JMW 12/09

Respostas:

20

Solução 1 : systemtap
Você pode usar systemtap para mostrar todos os PIDs que estão tentando usar unlink () no inode .bashrce nos .bash_profilearquivos.

Instale systemtap e os símbolos de depuração para o seu kernel.

Crie um arquivo com o nome unlink.stapcom o seguinte conteúdo:

probe syscall.unlink
{
    printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}

Em seguida, execute-o com sudo stap unlink.stap

Solução 2 : inotify
Você também pode usar inotify para ver quando o arquivo é excluído.

Solução 3 : ftrace
Outra solução é usar o ftrace :

trace-cmd record -e \*unlink\*

Aguarde a exclusão do arquivo, pressione CTRL + C para parar trace-cmd record ...e execute:

trace-cmd report

Solução 4 :
instalação do bpftrace bpftracee execute:

bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'
Mircea Vutcovici
fonte
5

além da resposta da micea, você pode conversar com os arquivos como root e ver se alguma coisa registra um erro ao tentar removê-los.

Sirex
fonte
4

Você tem certeza absoluta de que o próprio usuário não os está excluindo (acidentalmente)?

Eu tive alguns usuários sem noção (Windows) com o mesmo problema. Acontece que eles excluíam esses arquivos toda vez que visitavam seu diretório doméstico com um cliente ftp. Eles notaram os arquivos .xxxx (o cliente ftp não os ocultou) e removeram a "desordem".

Nunca me ocorreu que eles fizeram isso sozinhos até que um deles se queixou dos arquivos que apareceram espontaneamente, que ele havia excluído vários dias antes.

Tonny
fonte
2
Acredite, eu adoraria que fosse assim tão fácil.
Chad P
Isso foi engraçado :)
snap
3
É engraçado agora ... Não tanto quando estava acontecendo e eu não conseguia entender o que estava acontecendo. @ Cha P: Por favor, deixe-nos saber o que você encontra. Acho este bastante curioso.
Tonny
3

Usamos scripts bash logout (~ / .bash_logout) para limpar certos arquivos após o logout - você pode verificar se possui essa configuração, talvez com um globo de gordura.

RAM
fonte
2

Parece mais um intruso, que está fazendo um find / home / user-name filename -exec rm -f {} \; depois de todo o seu sneaking :). Apenas adivinhe, porque você mencionou que os arquivos de backup também estão sendo excluídos.

SparX
fonte
1

Para evitar a perda dos arquivos e seu conteúdo, você pode configurar o libtrash via LD_PRELOAD . Usando libtrash, você pode fazer várias coisas, mas aquelas que podem ser interessantes para você são

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Um bom artigo sobre libtrash pode ser encontrado aqui

Outra coisa que você mencionou: você copiou os arquivos para o root e eles ainda foram removidos. Isso ocorre porque / home / nome de usuário pertence ao nome de usuário; e se dir diz mod 755; qualquer arquivo ou diretório nesse diretório pertencente a não importa quem possa ser removido pelo usuário; mesmo que seja arquivo ou diretório raiz. É basicamente devido ao fato de que remover o arquivo no diretório significa alterar o conteúdo do diretório e o usuário possui 7 (em 755) desse diretório para que ele possa fazer o que quiser.

Existem maneiras de bloquear isso, como outras pessoas já sugeriram via chattr em sistemas de arquivos ext para definir arquivos como imutáveis ​​(+ i). Em seguida, seria necessário desarmar o sinalizador imutável antes de fazer alterações no arquivo / diretório que possui o sinalizador + i. Sinalizador imutável / chattr só pode ser usado pela raiz.

Hrvoje Špoljar
fonte