File che scompaiono sul server Linux


13

Ho 4 file specifici che sembrano continuare a scomparire dalla home directory di un utente. Per quanto ne sappiamo, non ci sono cronjob o altre attività automatiche che li rimuoveranno. Ho installato auditd su di essi, ma i registri non mostrano davvero nulla di interessante. Riesco a vedere la nostra utility di backup accedervi ogni notte fino al punto in cui non ci sono più, ma nient'altro. C'è qualcosa che potrebbe causare la rimozione di quei file che potrebbero aggirare auditd?

I file in questione sono questi:

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

così come un paio di file nella directory .ssh di quell'utente. Copie di questi file collocate in una sottocartella chiamata "keepers" vengono anch'esse eliminate. Cambiare le autorizzazioni su di loro su 000 e averle di proprietà di root non ha aiutato.

Al momento ho inotifywait setup per accedere a creare, eliminare, spostare su quella sottocartella, quindi spero che ciò accenda qualcosa, anche se non registra molto a parte quando è successo, non ciò che lo ha causato.


1
Aggiungi i loro nomi e percorsi al tuo post, potrebbe essere d'aiuto.
Shadok,

2
Anche la pubblicazione di log di auditd potrebbe essere utile.
Janne Pikkarainen,

3
Inoltre, potresti provare a creare i file di proprietà di root e chmod 000 per vedere se vengono ancora rimossi (o se ciò causa qualcos'altro che si lamenta / causa errori).
polinomio,

5
Oltre a chmod 0000, puoi provare a chattr + i per impedire a root anche di rimuoverlo
mer

1
tieni presente che chattr aiuta solo su filesystem ext. ma un chattr dovrebbe aiutare. :-) Puoi anche usare SELINUX invece di chattr per impedire che quei file vengano modificati. ma IMHO la cancellazione deve provenire da un processo o da un utente.
JMW,

Risposte:


20

Soluzione 1 : systemtap
È possibile utilizzare systemtap per mostrare tutti i PID che stanno tentando di utilizzare unlink () sull'inode di .bashrce dei .bash_profilefile.

Installa systemtap e i simboli di debug per il tuo kernel.

Crea un file con nome unlink.stapcon il seguente contenuto:

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

Quindi eseguirlo con sudo stap unlink.stap

Soluzione 2 : inotify
È inoltre possibile utilizzare inotify per vedere quando il file viene eliminato.

Soluzione 3 : ftrace
Un'altra soluzione è utilizzare ftrace :

trace-cmd record -e \*unlink\*

Attendere l'eliminazione del file, premere CTRL + C per interrompere trace-cmd record ..., quindi eseguire:

trace-cmd report

Soluzione 4 : bpftrace
Installa bpftrace, quindi esegui:

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

5

oltre alla risposta di micea, puoi chattrare + i file come root e vedere se qualcosa registra un errore quando provi a rimuoverli.


4

Sei assolutamente sicuro che l'utente stesso non li stia eliminando (accidentalmente)?

Ho avuto alcuni utenti clueless (Windows) con lo stesso problema. Si è scoperto che hanno eliminato quei file stessi ogni volta che hanno visitato la loro home-dir con un client ftp. Hanno notato i file .xxxx (il client ftp non li ha nascosti) e hanno rimosso il "disordine".

Non mi è mai venuto in mente di averlo fatto da soli fino a quando uno di loro non si è lamentato dei file riapparsi spontaneamente che aveva cancellato diversi giorni prima.


2
Credetemi, mi piacerebbe che fosse così facile.
Chad P,

È stato divertente :)
scatto il

3
Adesso è divertente ... Non tanto quando stava succedendo e non riuscivo a capire cosa stesse succedendo. @Chad P: Per favore facci sapere cosa trovi. Lo trovo piuttosto curioso.
Tonny,

3

Usiamo gli script di logout bash (~ / .bash_logout) per ripulire alcuni file al logout - potresti verificare se hai quell'impostazione, magari con un globo grasso.


2

Altro sembra un intruso, che sta facendo un find / home / user -name nomefile -exec rm -f {} \; dopo tutto il suo furtivo :). Sto solo indovinando, perché hai detto che anche i file di backup vengono eliminati.


1

Per evitare di perdere i file e il loro contenuto, puoi impostare libtrash tramite LD_PRELOAD. Usando libtrash puoi fare un numero di cose, ma quelle che potrebbero essere interessanti per te lo sono

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Un buon articolo su libtrash può essere trovato qui

Altra cosa che dici, che hai assegnato i file a root e che sono stati rimossi. È perché / home / username è di proprietà di username; e se dir ha detto mod 755; quindi qualsiasi file o directory in quella directory di proprietà di non importa chi può essere rimosso dall'utente; anche se si tratta di file root o dir. Fondamentalmente è dovuto al fatto che rimuovere il file in dir significa cambiare il contenuto della directory e l'utente ne ha 7 (in 755) di quella directory in modo che possa fare quello che vuole.

Ci sono modi per bloccarlo come altre persone hanno già suggerito tramite chattr su file system ext di impostare i file come immutabili (+ i). Quindi bisognerebbe disinserire il flag immutabile prima di apportare modifiche al file / dir che ha il flag + i. Flag / chattr immutabili possono essere utilizzati solo da root.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.