Si je crée un exécutable sur mon propre ordinateur en tant que root, que je fixe l'UID de (chmod u+sx) executable.sh et que je copie ensuite ce fichier sur le serveur NFS, je ne pourrai toujours pas l'exécuter en tant que root puisqu'il sera remappé à l'utilisateur nfsnobody.
On dirait que vous supposez que "root_squash" s'applique aux informations rapportées par le serveur, mais pas aux identités des clients. Mais c'est en fait le contraire : "root_squash" s'applique sólo aux informations d'identification de l'utilisateur (c'est-à-dire qui effectue les opérations), et non à la propriété du fichier.
En d'autres termes, cela signifie que vous ne pouvez pas prétendre à être root lorsqu'il opère sur des fichiers partagés par NFS (et ne peut donc pas faire de chown, etc.), mais il n'empêche pas existant qui apparaissent comme s'ils appartenaient à root.
Cela signifie que l'activation de "root_squash" arrêtera votre plan beaucoup plus tôt : il vous empêchera de en copiant ce fichier au serveur NFS. Si vous effectuez l'opération de copie en tant que root local, le fichier copié apparaîtra comme s'il appartenait à "nfsnobody", car le serveur NFS ignorera votre déclaration "Je suis uid 0". Si vous essayez de le "chown" vers root:root, le serveur NFS ne vous laissera pas faire parce que seul root peut chown les fichiers, et votre connexion n'a que des permissions "nfsnobody".
D'autre part, "root_squash" va no empêcher votre machine locale d'exécuter des fichiers qui sont en fait la propriété de root. Cela se produit dans la direction opposée : lorsque vous exécutez un programme à partir d'un partage NFS, il est toujours lu et exécuté sur votre machine cliente - et non sur le serveur - donc contrairement au cas précédent, maintenant c'est le serveur NFS qui est responsable de l'exécution du programme. client qui croit aux informations que le serveur fournit sur la propriété ou les permissions d'un fichier, et "root_squash" ne les modifie pas.
(Ainsi, si /mnt/theserver/bin/su existe déjà et que le serveur NFS indique qu'il est setuid-root, votre machine cliente NFS l'exécutera comme s'il était setuid-root, sans tenir compte de root_squash. Pour éviter cela, le client NFS devrait monter le partage avec l'option "nosuid").
Néanmoins, imaginez que je puisse me connecter avec SSH au même serveur en tant qu'utilisateur normal avec des privilèges moyens, pas de root ou autre. Si j'exécute le même fichier executable.sh, il ne sera pas remappé, n'est-ce pas ? Il serait exécuté en tant qu'utilisateur root, je suppose.
Si vous étiez effectivement en mesure de créer un tel exécutable, alors oui (mais en gardant à l'esprit ce que Ninov a dit dans les commentaires : setuid ne fonctionne que sur les exécutables binaires et est complètement ignoré pour les scripts).
Mais vous ne pourrez pas atteindre ce stade, car "root_squash" vous empêcherait de créer un fichier appartenant à la racine en premier lieu.
Une autre petite question : lors de l'utilisation de SMB, existe-t-il quelque chose comme l'écrasement de root, puisque je peux simplement copier un fichier de mon propre ordinateur vers un partage smb (le fichier a été créé par root) avec l'UID défini (chmod u+sx) et l'exécuter là ?
root_squash n'est pas pertinent car SMB n'a pas d'authentification basée sur l'UID en premier lieu. Les connexions SMB sont purement orientées compte (c'est-à-dire que les clients doivent fournir des informations d'identification explicites et ne peuvent pas simplement prétendre être "UID 123"), il n'y a donc pas d'accès racine implicite qui pourrait ou devrait être écrasé.
Donc, soit le partage SMB est monté en utilisant un seul compte pour tout le monde (ce qui fait que c'est comme si tous les utilisateurs locaux sont réduits à ce compte distant), ou le partage est monté en mode multi-utilisateurs où chaque utilisateur local doit fournir ses propres informations d'identification.
Mais comme mentionné au début, "root_squash" n'affecte pas l'apparence des fichiers ; si quelque chose appartient déjà à root, il apparaîtra toujours comme appartenant à root. C'est le " nosuid
L'option " setuid " empêche les clients d'exécuter accidentellement un binaire setuid, et c'est une option globale de la couche VFS qui fonctionne avec les montages SMB ainsi qu'avec tout autre type de système de fichiers.