7.6. Création des fichiers et des liens symboliques essentiels

Historiquement, Linux gardait une liste des systèmes de fichiers montés dans le fichier /etc/mtab. Les noyaux modernes gèrent cette liste en interne et la proposent à l'utilisateur via le système de fichiers /proc. Afin de satisfaire les outils qui s'attendent à la présence de /etc/mtab, créez le lien symbolique suivant :

ln -sv /proc/self/mounts /etc/mtab

Créez un fichier /etc/hosts de base qui sera mentionné dans certaines suites de tests, et par l'un des fichiers de configuration de Perl :

cat > /etc/hosts << EOF
127.0.0.1  localhost $(hostname)
::1        localhost
EOF

Afin que l'utilisateur root puisse s'identifier et que le nom « root » soit reconnu, il doit y avoir des entrées cohérentes dans les fichiers /etc/passwd et /etc/group.

Créez le fichier /etc/passwd en exécutant la commande suivante :

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/false
daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/usr/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/usr/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/usr/bin/false
systemd-network:x:76:76:systemd Network Management:/:/usr/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/usr/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/usr/bin/false
systemd-coredump:x:79:79:systemd Core Dumper:/:/usr/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
systemd-oom:x:81:81:systemd Out Of Memory Daemon:/:/usr/bin/false
nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false
EOF

Le mot de passe réel pour root sera paramétré plus tard.

Créez le fichier /etc/group en exécutant la commande suivante :

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
kvm:x:61:
systemd-journal-gateway:x:73:
systemd-journal-remote:x:74:
systemd-journal-upload:x:75:
systemd-network:x:76:
systemd-resolve:x:77:
systemd-timesync:x:78:
systemd-coredump:x:79:
uuidd:x:80:
systemd-oom:x:81:
wheel:x:97:
users:x:999:
nogroup:x:65534:
EOF

Les groupes créés ne font partie d'aucun standard, ce sont des groupes décidés d'un part en fonction des besoins de la configuration de Udev dans le chapitre 9, et d'autre part par la convention usuelle d'un certain nombre de distributions Linux existantes. En outre, certaines suites de tests s'appuient sur des groupes et des utilisateurs spécifiques. La base Linux standard (Linux Standard Base ou LSB, disponible sur https://refspecs.linuxfoundation.org/lsb.shtml) ne recommande uniquement en plus de la présence d'un groupe root accompagné d'un ID de groupe (GID) de 0, qu'un groupe bin soit accompagné d'un GID de 1. Le GID 5 est souvent utilisé pour le groupe tty et le numéro 5 est aussi utilisé dans systemd pour le système de fichiers devpts. Tous les autres noms de groupe et GID peuvent être librement choisis par l'administrateur du système puisque les programmes bien écrits ne dépendent pas des numéros GID, mais utilisent plutôt le nom du groupe.

L'ID 65534 est utilisé par le noyau pour NFS et les espaces de noms séparés pour les utilisateurs et les groupes non projetés (ils existent sur le serveur NFS ou dans l'espace de nom parent, mais « n'existent pas » sur la machine locale ou dans l'espace de nom séparé). Nous assignons l'utilisateur nobody et le groupe nogroup pour éviter d'avoir un ID sans nom. Mais d'autres distributions traitent cet ID différemment, donc les programmes portables ne devraient pas dépendre de cette assignation.

Certains tests dans Chapitre 8 ont besoin d'un utilisateur normal. Nous ajoutons cet utilisateur ici et nous supprimons ce compte à la fin de ce chapitre.

echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
echo "tester:x:101:" >> /etc/group
install -o tester -d /home/tester

Pour supprimer l'invite « I have no name! », démarrez un nouvel interpréteur de commandes. Puisque les fichiers /etc/passwd et /etc/group ont été créés, la résolution du nom d'utilisateur et du nom de groupe fonctionnera à présent :

exec /usr/bin/bash --login

Les programmes login, agetty et init, entre autres, utilisent un certain nombre de fichiers journaux pour enregistrer des informations qui permettent de savoir qui s'est connecté sur le système et quand. Cependant, ces programmes n'écriront pas vers ces fichiers journaux s'ils n'existent pas déjà. Initialisez les fichiers journaux et donnez-leur les droits nécessaires :

touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664  /var/log/lastlog
chmod -v 600  /var/log/btmp

Le fichier /var/log/wtmp enregistre toutes les connexions et les déconnexions. Le fichier /var/log/lastlog enregistre le moment où chaque utilisateur s'est connecté pour la dernière fois. Le fichier /var/log/faillog enregistre les échecs de connexion. Le fichier /var/log/btmp enregistre les mauvaises tentatives de connexion.

[Note]

Note

Les fichiers wtmp, btmp et lastlog utilisent des entiers sur 32 bits pour l'horodatage et ils seront complètement cassés après l'année 2038. De nombreux paquets ont arrêté de les utiliser et d'autres paquets vous arrêter de les utiliser. Il vaut mieux les considérer comme obsolètes.