Fichiers temporaires
La plupart des applications, services et utilisateurs utilisent des fichiers et des répertoires temporaires dans /tmp.
Les daemons (et parfois les utilisateurs) utilisent le répertoire /run.
Ces répertoires /tmp et /run existent uniquement en mémoire et quand le système redémarre un nettoyage automatique est effectué.
L’outil systemd-tmpfiles permet de gérer les répertoires et les fichiers temporaires. Il exécute au démarrage la commande systemd-tmpfiles avec les l’options --create ou --remove et lit la configuration des fichiers /usr/lib/tmpfiles.d/*.conf, /run/tmpfiles.d/*.conf et /etc/tmpfiles.d/*.conf pour savoir s’il faut créer, supprimer ou sécuriser les fichiers et dossiers temporaires.
Exemples :
[root@SERVER01 ~]# ls -l /usr/lib/tmpfiles.d/*.conf |
Suppression auto des fichiers temporaires avec un minuteur systemd
L’unité minuteur systemd appelle systemd-tmpfiles-clean.timer pour lancer à intervalles réguliers l’unité systemd-tmpfiles-clean.service qui exécute la commande systemd-tmpfiles --clean.
Pour résumer :
unité.timer> call >unité.servive> call >unité cmd -options
La commande systemctl permet d’afficher le fichier de configuration de l’unité systemd-tmpfiles-clean.timer :
[root@SERVER01 ~]# systemctl edit systemd-tmpfiles-clean.timer |
La section [Timer] indique comment démarrer le service avec le même nom que le minuteur :
OnBootSec=10min: l’unitésystemd-tmpfiles-clean.servicese déclenche 10 min après le démarrage du systèmeOnUnitActiveSec=12h: tout déclenchement ultérieur de l’unitésystemd-tmpfiles-clean.servicese produit 12h après sa dernière activation
La commande systemctl daemon-reload permet à systemd de charger la nouvelle configuration :
# systemctl daemon-reload |
Nettoyage manuel des fichiers temporaires
Le format des fichiers de configuration pour systemd-tmpfiles est détaillé dans la page de manuel tmpfiles.d(5).
La syntaxe de base se compose de sept colonnes : Type, Path, Mode, UID, GID, Age, et Argument
type: action que les fichierssystemd-tmpdoivent entreprendred: créer un répertoire s’il n’existe pas encoreZ: restaurer de façon récursive les contextes SELinux, autorisations et propriété des fichiers
Exemples
Pour créer un répertoire /run/systemd/seats appartenant à root et au groupe root en rwxr-xr-r. Ce répertoire ne sera pas automatiquement purgé :
d /run/systemd/seats 0755 root root |
Pour créer un répertoire /home/user :
D /home/user 0700 john john 1 |
Pour créer un lien symbolique /run/fstablink pointant vers /etc/fstab. Ne jamais purgez automatiquement cette ligne :
L /run/fstablink – root root – /etc/fstab |
Ordre de priorité des fichiers de configuration
Les fichiers de configuration du service systemd-tmpfiles-clean peuvent être stockés dans 3 répertoires :
- Priorité 0 :
/etc/tmpfiles.d/*.conf:- configurer des emplacements temporaires personnalisés et pour remplacer les valeurs par défaut définies par les fournisseurs
- Priorité -1 :
/run/tmpfiles.d/*.conf:- fichiers volatils que les daemons utilisent généralement pour gérer leurs propres fichiers temporaires d’exécution
- Priorité -2 :
/usr/lib/tmpfiles.d/*.conf:- paquetages RPM pertinents fournissent les fichiers dans le répertoire
Si un fichier se trouve dans les 3 répertoires, l’ordre de priorité pour appliquer la configuration sera :
/etc/tmpfiles.d/*.conf > /run/tmpfiles.d/*.conf > /usr/lib/tmpfiles.d/*.conf |
/!\ Résumé des commandes
Commandes :
systemd-tmpfiles --create |
Fichiers :
/usr/lib/systemd/system/systemd-tmpfiles-clean.timer |
Cas Pratique
Configuration du service systemd-tmpfiles pour qu’il purge le répertoire /tmp de tous les fichiers inutilisés au cours des cinq derniers jours.
Copie de /usr/lib/tmpfiles.d/tmp.conf dans /etc/tmpfiles.d/:
[root@SERVER01 ~]# cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d/tmp.conf |
Fichier /etc/tmpfiles.d/tmp.conf d’origine :
[root@SERVER01 ~]# cat /usr/lib/tmpfiles.d/tmp.conf |
Modification du fichier /etc/tmpfiles.d/tmp.conf précédemment copié (juste 1 ligne est nécessaire) :
q /tmp 1777 root root 5d |
Vérification de la configuration de /etc/tmpfiles.d/tmp.conf avec la commande systemd-tmpfiles --clean (si aucun retour, la configuration est OK) :
[root@SERVER01 ~]# systemd-tmpfiles --clean /etc/tmpfiles.d/tmp.conf |
Création d’un nouveau fichier purge30s.conf qui supprimera dans le répertoire /run/purge30s tous les fichiers qui restent inutilisés pendant 30 secondes :
[root@SERVER01 ~]# vim /etc/tmpfiles.d/purge30s.conf |
Création de /etc/tmpfiles.d/purge30s.conf avec la commande systemd-tmpfiles --create (si aucun retour, la configuration est OK) :
[root@SERVER01 ~]# systemd-tmpfiles --create /etc/tmpfiles.d/purge30s.conf |
Le répertoire /run/purge30s a bien été crée :
[root@SERVER01 ~]# ls -l /run/ |
Création de plusieurs fichiers dans /run/purge30s/ :
[root@SERVER01 ~]# touch /run/purge30s/test{1..5} |
Attendre 30s et lancer la commande systemd-tmpfiles --clean /etc/tmpfiles.d/purge30s.conf pour nettoyer les fichiers inutilisés de + de 30s :
[root@SERVER01 ~]# systemd-tmpfiles --clean /etc/tmpfiles.d/purge30s.conf |
Vérification :
[root@SERVER01 ~]# ls -l /run/purge30s/ |
Documentation
MAN systemd-tmpfiles(5)
MAN tmpfiles.d(8)
MAN stat(2)
MAN stat(5)
MAN systemd.timer(1)
https://www.interserver.net/tips/kb/managing-temporary-files-systemd-tmpfiles/