7.6. Créer les fichiers et les liens symboliques essentiels

Historiquement, Linux gère la liste des systèmes de fichiers montés dans le fichier /etc/mtab. Les noyaux modernes gèrent cette liste en interne via le système de fichiers /proc. Pour contenter 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 utilisé dans certaines suites de tests, et par l'un des fichiers de configuration de Perl :

echo "127.0.0.1 localhost $(hostname)" > /etc/hosts

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 lançant la commande suivante :

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/bin/false
systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false
systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false
systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false
systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false
systemd-network:x:76:76:systemd Network Management:/:/bin/false
systemd-resolve:x:77:77:systemd Resolver:/:/bin/false
systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false
systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/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:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
kvm:x:61:
systemd-bus-proxy:x:72:
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:
wheel:x:97:
nogroup:x:99:
users:x:999:
EOF

Les groupes créés ne font partie d'aucun standard—ce sont des groupes décidés en partie en fonction des besoins de la configuration de Udev dans le chapitre 9, et en partie par la coutume utilisée par 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 http://refspecs.linuxfoundation.org/lsb.shtml) recommande seulement cela, ainsi que la présence d'un groupe root (GID 0) et d'un groupe bin (GID 1). 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.

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

echo "tester:x:$(ls -n $(tty) | cut -d" " -f3):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 nouveau shell. Comme nous avons créé les fichiers /etc/passwd et /etc/group, la résolution du nom d'utilisateur et de groupe fonctionnera à présent :

exec /bin/bash --login +h

Remarquez l'utilisation du paramètre +h. Il dit à bash de ne pas utiliser son hachage de chemin interne. Sans ce paramètre, bash se rappellerait des chemins vers les binaires qu'il a exécutés. Pour s'assurer que les binaires nouvellement compilés seront utilisés dès qu'ils seront installés, le paramètre +h sera utilisée durant tout le chapitre.

Les programmes login, agetty, et init (et d'autres) utilisent un nombre de journaux applicatifs pour enregistrer des informations comme qui s'est connecté sur le système et quand. Mais ces programmes n'écriront pas vers ces journaux s'ils n'existent pas. Initialisez les journaux et donnez-leur les bons droits :

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 de dernière connexion de chaque utilisateur. Le fichier /var/log/faillog enregistre les tentatives de connexion échouées. Le fichier /var/log/btmp enregistre les mauvaises tentatives de connexion.

[Note]

Note

Le fichier /run/utmp enregistre les utilisateurs qui sont actuellement connectés. Ce fichier est créé de manière dynamique dans les scripts de démarrage.