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 bashexé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/shadowou /etc/sudoers, puis obtenir la racine avec suou 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.dnombreux autres endroits.
Rappelez-vous que les systèmes de fichiers n'ont même pas besoin d'être sur un périphérique, -o loopmontera 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 /mediaonly 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_clonepar 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