GNU/Linux >> Tutoriels Linux >  >> Debian

Déclencher des commandes sur les modifications de fichiers/répertoires avec Incron sur Debian Etch

Ce guide montre comment installer et utiliser incron sur un système Debian Etch. Incron est similaire à cron, mais au lieu d'exécuter des commandes en fonction du temps, il peut déclencher des commandes lorsque des événements de fichier ou de répertoire se produisent (par exemple, une modification de fichier, des changements d'autorisations, etc.).

Ce document est fourni sans garantie d'aucune sorte ! Je n'émets aucune garantie que cela fonctionnera pour vous !

1 Installation d'Incron

Incron est disponible dans le dépôt etch-backports, nous devons donc ajouter la ligne suivante à /etc/apt/sources.list :

vi /etc/apt/sources.list
[...]deb http://www.backports.org/debian etch-backports main contrib non-free[...] 

Importons la clé d'archive backports.org dans apt...

wget -O - http://backports.org/debian/archive.key | apt-clé ajouter -

... et courir

apt-obtenir la mise à jour

Le référentiel etch-backports est inactif par défaut, donc pour installer incron à partir de celui-ci, nous devons utiliser la commande suivante :

apt-get -t etch-backports install incron

2 Utiliser Incron

L'utilisation d'incron ressemble beaucoup à l'utilisation de cron. Vous avez la commande incrontab qui vous permet de lister (-l), de modifier (-e) et de supprimer (-r) les entrées incrontab. Pour en savoir plus, consultez

man incrontab

Vous y trouverez également la section suivante :

Si /etc/incron.allow existe, seuls les utilisateurs répertoriés ici peuvent utiliser incron. Sinon, si /etc/incron.deny existe, seuls les utilisateurs NON répertoriés ici peuvent utiliser incron. Si aucun de ces fichiers n'existe, tout le monde est autorisé à utiliser incron. (Remarque importante :ce comportement n'est pas sécurisé et sera probablement modifié pour être compatible avec le style utilisé par ISC Cron.) L'emplacement de ces fichiers peut être modifié dans la configuration.

Cela signifie que si nous voulons utiliser incrontab en tant que root, nous devons soit supprimer /etc/incron.allow (ce qui n'est pas sûr car alors chaque utilisateur du système peut utiliser incrontab)...

rm -f /etc/incron.allow

... ou ajoutez root à ce fichier (recommandé) :

vi /etc/incron.allow
racine

Avant de faire cela, vous obtiendrez des messages d'erreur comme celui-ci lorsque vous essayez d'utiliser incrontab :

server1 :~# incrontab -l
l'utilisateur 'root' n'est pas autorisé à utiliser incron
server1 :~#

Après ça marche :

server1 :~# incrontab -l
pas de table pour root
server1 :~#

Nous pouvons utiliser

incrontab -e

pour créer des emplois incron. Avant de faire cela, nous examinons

man 5 incrontab

car il explique le format des crontabs. Fondamentalement, le format est le suivant...

  

... où peut être un répertoire (ce qui signifie que le répertoire et/ou les fichiers directement dans ce répertoire (et non les fichiers dans les sous-répertoires de ce répertoire !) sont surveillés) ou un fichier.

peut être l'un des éléments suivants :

IN_ACCESS           Le fichier a été accédé (lu) (*)
IN_ATTRIB           Métadonnées modifiées (autorisations, horodatages, attributs étendus, etc.) (*)
IN_CLOSE_WRITE      Le fichier ouvert pour l'écriture a été fermé (*)
IN_CLOSE_NOWRITE    Le fichier non ouvert pour l'écriture a été fermé (*)
IN_CREATE           Fichier/répertoire cré dans le répertoire surveillé (*)
IN_DELETE           Fichier /répertoire supprimé du répertoire surveillé (*)
IN_DELETE file  Watch    /répertoire a lui-même supprimé
IN_MODIFY           Le fichier a été modifié (*)
IN_MOVE_SELF        Le fichier surveillé      Le fichier surveillé/le répertoire a lui-même été déplacé
IN_MOVED_FROM       Le fichier a déplacé du répertoire de fichiers surveillés (*) vers                                IN_MOVED répertoire surveillé (*)
IN_OPEN             Le fichier a été ouvert (*)

Lors de la surveillance d'un répertoire, les événements marqués d'un astérisque (*) ci-dessus peuvent se produire pour les fichiers du répertoire, auquel cas le champ de nom dans les
données d'événement renvoyées identifie le nom du fichier dans le répertoire.

Le symbole IN_ALL_EVENTS est défini comme un masque binaire de tous les événements ci-dessus. Deux symboles de commodité supplémentaires sont IN_MOVE, qui est une combinaison de IN_MOVED_FROM et IN_MOVED_TO, et IN_CLOSE qui combine IN_CLOSE_WRITE et IN_CLOSE_NOWRITE.

Les autres symboles suivants peuvent être spécifiés dans le masque :

IN_DONT_FOLLOW      Ne déréférence pas le nom de chemin s'il est un lien symbolique
IN_ONESHOT          Surveiller le nom de chemin pour un un seul événement 
IN_ONLYDIR          Seulement regarder le nom de chemin            Seulement s'il est un répertoire

De plus, il existe un symbole qui n'apparaît pas dans le jeu de symboles inotify. C'est IN_NO_LOOP. Ce symbole désactive la surveillance des événements jusqu'à ce que l'événement en cours soit complètement géré (jusqu'à ce que son processus enfant se termine).

est la commande qui doit être exécutée lorsque l'événement se produit. Les jokers suivants peuvent être utilisés dans la spécification de la commande :

$$   signe dollar
[email protected]   chemin du système de fichiers surveillé (voir ci-dessus)
$#   nom de fichier lié à l'événement
$%   drapeaux d'événement (textuellement)
$&indicateurs d'événement (numériques)

Si vous surveillez un répertoire, alors [email protected] contient le chemin du répertoire et $# le fichier qui a déclenché l'événement. Si vous regardez un fichier, alors [email protected] contient le chemin d'accès complet au fichier et $# est vide.

Si vous avez besoin des caractères génériques mais que vous n'êtes pas sûr de leur traduction, vous pouvez créer une tâche incron comme celle-ci :

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

Ensuite, vous créez ou modifiez un fichier dans le répertoire /tmp et jetez un œil à /var/log/syslog - ce journal indique quand une tâche incron a été déclenchée, si elle a réussi ou s'il y a eu des erreurs, et quelle était la commande réelle. il s'est exécuté (c'est-à-dire que les caractères génériques sont remplacés par leurs valeurs réelles).

tail /var/log/syslog
...
21 août 17:26:50 server1 incrond[7111] :(racine) CMD (echo "$ /tmp huhu IN_CREATE 256")

Dans cet exemple, j'ai créé le fichier /tmp/huhu; comme vous le voyez, [email protected] se traduit par /tmp, $# par huhu, $% par IN_CREATE et $&par 256.

Maintenant assez de théorie. Créons nos premières tâches incron. J'aimerais surveiller le fichier /etc/apache2/apache2.conf et le répertoire /etc/apache2/vhosts/, et chaque fois qu'il y a des changements, je veux qu'incron redémarre Apache. Voici comment nous procédons :

incrontab -e
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart/etc/apache2/vhosts/ IN_MODIFY /etc/init. d/apache2 redémarrer

C'est ça. À des fins de test, vous pouvez modifier votre configuration Apache et jeter un œil à /var/log/syslog, et vous devriez voir qu'incron redémarre Apache.

Pour lister toutes les tâches incron définies, vous pouvez exécuter

incrontab -l
server1 :~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d /apache2 redémarrage
serveur1 :~#

Pour supprimer toutes les tâches incron de l'utilisateur actuel, exécutez

incrontab -r
server1 :~# incrontab -r
suppression de la table pour l'utilisateur 'root'
la table pour l'utilisateur 'root' a été supprimée avec succès
server1 :~#

  • incron :http://inotify.aiken.cz/?section=incron&page=about&lang=en

Debian
  1. Comment chiffrer le répertoire avec EncFS sur Debian 9 Stretch Linux

  2. Comment exécuter des commandes sur les changements de fichier ou de répertoire avec Incron sur Ubuntu

  3. Serveur autonome Samba Debian 4.0 (Etch) avec backend tdbsam

  4. 10+ commandes Linux VI avec des exemples

  5. Comment analyser un serveur Debian à la recherche de rootkits avec Rkhunter

Surveillance de plusieurs systèmes avec munin (Debian Etch)

Installation de Lighttpd avec prise en charge de PHP5 et MySQL sur Debian Etch

Premiers pas avec les commandes ansibles ad hoc

Comment lire un fichier avec des espaces sous Linux

Deux commandes pour trouver facilement des fichiers et des répertoires dans Debian 11

Top 30 des commandes Linux