GNU/Linux >> Linux Esercitazione >  >> Debian

Come attivare comandi su modifiche a file/directory con Incron su Debian

Questa guida mostra come installare e utilizzare incron su un sistema Debian 9 (Stretch). Incron è simile a cron, ma invece di eseguire comandi in base al tempo, può attivare comandi quando si verificano eventi di file o directory (ad es. una modifica del file, modifiche dei permessi, ecc.).

1 Prerequisiti

  • Autorizzazioni di amministratore di sistema (accesso root). Tutti i comandi in questo tutorial devono essere eseguiti come utente root sulla shell.
  • Utilizzerò l'editor "nano" per modificare i file. Puoi sostituire nano con un editor a tua scelta o installare nano con "apt-get install nano" se non è installato sul tuo server.

2 Installazione di Incron

Incron è disponibile nel repository Debian, quindi installiamo incron con il seguente comando apt:

apt-get install incron

Il processo di installazione dovrebbe essere simile a quello in questo screenshot.

3 Utilizzo di Incron

L'utilizzo di Incron è molto simile all'utilizzo di cron. Hai il comando incrontab che ti consente di elencare (-l), modificare (-e) e rimuovere (-r) le voci incrontab.

Per saperne di più, vedere:

man incrontab

Lì trovi anche la seguente sezione:

Se /etc/incron.allow esiste solo gli utenti elencati qui possono usare incron. Altrimenti se /etc/incron.deny esiste solo gli utenti NON elencati qui possono usare incron. Se nessuno di questi file esiste, tutti possono usare incron. (Nota importante:questo comportamento non è sicuro e sarà probabilmente modificato per essere compatibile con lo stile utilizzato da ISC Cron.) La posizione di questi file può essere modificata nella configurazione.

Ciò significa che se vogliamo usare incrontab come root, dobbiamo eliminare /etc/incron.allow (che non è sicuro perché ogni utente del sistema può usare incrontab)...

rm -f /etc/incron.allow

... o aggiungi root a quel file (consigliato). Apri il file /etc/incron.allow con nano:

nano /etc/incron.allow

E aggiungi la riga seguente. Quindi salva il file.

root

Prima di farlo, riceverai messaggi di errore come questo quando proverai a utilizzare incrontab:

server1:~# incrontab -l
user 'root' is not allowed to use incron

Dopo funziona:

server1:~# incrontab -l
no table for root

Possiamo usare il comando:

incrontab -e

Per creare lavori incron. Prima di farlo, diamo un'occhiata alla pagina man di incron:

man 5 incrontab

La pagina man spiega il formato dei crontab. Fondamentalmente, il formato è il seguente...

<path> <mask> <command>

...dove può essere una directory (che significa che la directory e/o i file direttamente in quella directory (non i file nelle sottodirectory di quella directory!) sono guardati) o un file.

può essere uno dei seguenti:

IN_ACCESS           File was accessed (read) (*)
IN_ATTRIB           Metadata changed (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE      File opened for writing was closed (*)
IN_CLOSE_NOWRITE    File not opened for writing was closed (*)
IN_CREATE           File/directory created in watched directory (*)
IN_DELETE           File/directory deleted from watched directory (*)
IN_DELETE_SELF           Watched file/directory was itself deleted
IN_MODIFY           File was modified (*)
IN_MOVE_SELF        Watched file/directory was itself moved
IN_MOVED_FROM       File moved out of watched directory (*)
IN_MOVED_TO         File moved into watched directory (*)
IN_OPEN             File was opened (*)

Durante il monitoraggio di una directory, gli eventi contrassegnati da un asterisco (*) sopra possono verificarsi per i file nella directory, nel qual caso il campo del nome nei
dati dell'evento restituito identifica il nome del file all'interno della directory.

Il simbolo IN_ALL_EVENTS è definito come una maschera di bit di tutti gli eventi di cui sopra. Due ulteriori simboli di convenienza sono IN_MOVE, che è una combinazione di IN_MOVED_FROM e IN_MOVED_TO, e IN_CLOSE che combina IN_CLOSE_WRITE e IN_CLOSE_NOWRITE.

Nella maschera possono essere specificati i seguenti ulteriori simboli:

IN_DONT_FOLLOW      Don't dereference pathname if it is a symbolic link
IN_ONESHOT          Monitor pathname for only one event
IN_ONLYDIR          Only watch pathname if it is a directory

Inoltre, c'è un simbolo che non appare nel set di simboli inotify. È IN_NO_LOOP. Questo simbolo disabilita il monitoraggio degli eventi finché quello corrente non viene completamente gestito (fino alla chiusura del processo figlio).

è il comando da eseguire quando si verifica l'evento. I seguenti caratteri jolly possono essere utilizzati all'interno della specifica del comando:

$$   dollar sign
[email protected]   watched filesystem path (see above)
$#   event-related file name
$%   event flags (textually)
$&   event flags (numerically)

Se guardi una directory, [email protected] conserva il percorso della directory e $# il file che ha attivato l'evento. Se guardi un file, [email protected] conserva il percorso completo del file e $# è vuoto.

Se hai bisogno dei caratteri jolly ma non sei sicuro di cosa si traducano, puoi creare un lavoro incron come questo. Apri incron incrontab:

incrontab -e

e aggiungi la seguente riga:

/tmp/ IN_MODIFY echo "$$ [email protected] $# $% $&"

Quindi crei o modifichi un file nella directory /tmp e dai un'occhiata a /var/log/syslog:questo registro mostra quando è stato attivato un processo incron, se è riuscito o se ci sono stati errori e quale era il comando effettivo è stato eseguito (ovvero, i caratteri jolly vengono sostituiti con i loro valori reali).

tail /var/log/syslog
...
Jan 10 13:52:35 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:36 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]: (root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")

In questo esempio ho modificato il file /tmp/hello.txt; come vedi [email protetta] si traduce in /tmp, $# in hello.txt , $% su IN_CREATE e $&su 256. Ho usato un editor che ha creato un file .txt.swp temporaneo che risulta nelle righe aggiuntive in syslog.

Ora basta teoria. Creiamo i nostri primi lavori incron. Vorrei monitorare il file /etc/apache2/apache2.conf e la directory /etc/apache2/vhosts/, e ogni volta che ci sono modifiche, voglio che incron riavvii Apache. Ecco come lo facciamo:

incrontab -e
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restart

Questo è tutto. A scopo di test, puoi modificare la tua configurazione di Apache e dare un'occhiata a /var/log/syslog, e dovresti vedere che incron riavvia Apache.

NOTA :non eseguire alcuna azione all'interno di un processo incron in una directory monitorata per evitare loop. Esempio: Quando controlli la directory /tmp per le modifiche e ogni modifica attiva uno script che scrive un file di registro in /tmp, ciò causerà un ciclo e potrebbe portare il tuo sistema a un carico elevato o addirittura bloccarlo.

Per elencare tutti i lavori incron definiti, puoi eseguire:

incrontab -l
server1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /usr/sbin/service apache2 restart

Per eliminare tutti i lavori incron dell'utente corrente, eseguire:

incrontab -r
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removed

  • Debian http://www.debian.org
  • Software Incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en

Debian
  1. Come crittografare la directory con EncFS su Debian 9 Stretch Linux

  2. Come eseguire comandi su modifiche di file o directory con Incron su Ubuntu

  3. Come scansionare un server Debian per i rootkit con Rkhunter

  4. Come modificare i permessi di file e directory con File Manager

  5. Come posso convogliare i comandi insieme in un file di preconfigurazione Debian?

Come leggere un file con spazi in Linux

Come trovare file in Debian 10

Come manipolare file su Debian 11

Come modificare il file host su Debian

Come riparare gli errori del file system in Debian

Come avviare il file ISO di Debian dal disco rigido con GRUB2