J'expérimentais un peu et j'ai remarqué quelque chose d'étrange: placer le bit setuid sur une copie de bash située à /usr/bin/bash-test
semblait n'avoir aucun effet. Lorsque j'ai exécuté une instance de bash-test
, mon répertoire personnel n'était pas défini sur /root
et lorsque j'ai exécuté la whoami
commande à partir de bash-test
, mon nom d'utilisateur n'était pas signalé comme étant root
, ce qui suggère qu'il bash-test
ne s'exécutait pas en tant que root. Cependant, si j'ai activé le bit setuid whoami
, j'ai été signalé comme étant root dans n'importe quel shell, comme prévu.
J'ai également essayé d'activer le bit setuid et j'ai /usr/bin/bash
observé le même comportement.
Pourquoi bash ne s'exécute-t-il pas en tant que root lorsque j'y mets le bit setuid? Selinux pourrait-il avoir quelque chose à voir avec cela?
Réponses:
L'explication est assez ennuyeuse: bash lui-même en est la raison.
strace
est notre ami (doit être la racine SUID elle-même pour que cela fonctionne):bash détecte qu'il a démarré la racine SUID (UID! = EUID) et utilise sa puissance racine pour rejeter cette puissance, réinitialisant EUID à UID. Et plus tard, même FSUID, juste pour être sûr ...:
Au final: aucune chance. Vous devez démarrer bash avec la racine UID (c'est-à-dire sudo).
Modifier 1
La page de manuel dit ceci:
Mais cela ne fonctionne pas pour moi.
-p
n'est même pas mentionné parmi les options de démarrage. J'ai aussi essayé--posix
; n'a pas fonctionné non plus.la source
Dans tous les cas, un programme racine SUID ne s'exécute pas avec l'environnement root (
$HOME
, configuration pour le shell, peu importe), il s'exécute avec les pouvoirs root (c'est-à-dire qu'il peut supprimer n'importe quel fichier, modifier toutes les autorisations, etc.).la source