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.service
se déclenche 10 min après le démarrage du systèmeOnUnitActiveSec=12h
: tout déclenchement ultérieur de l’unitésystemd-tmpfiles-clean.service
se 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-tmp
doivent 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/