Il existe plusieurs approches, certaines sécurisées pour la plupart, d’autres pas du tout.
La voie précaire
Laissez toute utilisation s'exécuter mount
, par exemple, à travers sudo. Vous pourriez aussi bien leur donner la racine; c'est la même chose. L'utilisateur peut monter un système de fichiers avec une copie racine suid de - une bash
exécution qui donne instantanément la racine (probablement sans aucune journalisation, au-delà du fait qu'elle a mount
été exécutée).
Alternativement, un utilisateur peut monter son propre système de fichiers sur /etc
, contenant sa propre copie de /etc/shadow
ou /etc/sudoers
, puis obtenir la racine avec su
ou sudo
. Ou éventuellement bind-mount ( mount --bind
) sur l'un de ces deux fichiers. Ou un nouveau fichier dans /etc/sudoers.d
.
Des attaques similaires pourraient être menées sur de /etc/pam.d
nombreux autres endroits.
Rappelez-vous que les systèmes de fichiers n'ont même pas besoin d'être sur un périphérique, -o loop
montera un fichier qui appartient (et donc est modifiable) à l'utilisateur.
Le moyen le plus sûr: udisks ou similaire
Les divers environnements de bureau ont en fait déjà élaboré des solutions pour permettre aux utilisateurs de monter des supports amovibles. Ils fonctionnent en montant dans un sous-répertoire de /media
only et en désactivant la prise en charge de set-user / group-id via les options du noyau. Les options incluent ici udisks
, udisks2
, pmount
, usbmount
,
Si vous le devez, vous pouvez écrire votre propre script pour faire quelque chose de similaire et l'invoquer via sudo - mais vous devez être très prudent lors de l'écriture de ce script pour ne pas laisser d'exploits root. Si vous ne voulez pas que vos utilisateurs aient à se souvenir de sudo, vous pouvez faire quelque chose comme ceci dans un script:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Le moyen du jour d'être sécurisé: les espaces de noms d'utilisateurs
Les espaces de noms Linux sont une forme très légère de virtualisation (des conteneurs, pour être plus spécifique). En particulier, avec les espaces de noms d'utilisateurs, tout utilisateur du système peut créer son propre environnement dans lequel il est root. Cela leur permettrait de monter des systèmes de fichiers, sauf que ceux-ci ont été explicitement bloqués, à l'exception de quelques systèmes de fichiers virtuels. Finalement, les systèmes de fichiers FUSE seront probablement autorisés, mais les correctifs les plus récents que j'ai trouvés ne couvrent pas les périphériques en mode bloc, mais uniquement des choses comme sshfs.
En outre, de nombreux noyaux de distribution ont (pour des raisons de sécurité) par défaut, empêché les utilisateurs non privilégiés d'utiliser les espaces de noms d'utilisateurs; Par exemple, Debian a une valeur kernel.unprivileged_userns_clone
par défaut de 0. Les autres distributions ont des paramètres similaires, bien que souvent avec des noms légèrement différents.
La meilleure documentation que je connaisse sur les espaces de noms d'utilisateurs est un article de LWN intitulé
Espaces de noms en opération, partie 5: Espaces de noms d'utilisateurs .
Pour l'instant, j'irais avec udisks2.
gvfs-mount
-d /dev/sdX