J'expérimentais un peu et j'ai remarqué quelque chose d'étrange :définir le bit setuid sur une copie de bash située dans /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 quand j'ai lancé le whoami
commande de bash-test
, mon nom d'utilisateur n'a pas été signalé comme étant root
, suggérant que bash-test
ne fonctionnait pas en tant que root. Cependant, si je mets le bit setuid sur whoami
, j'ai été signalé comme étant root dans n'importe quel shell, comme prévu.
J'ai essayé de définir le bit setuid sur /usr/bin/bash
ainsi et observé le même comportement.
Pourquoi bash ne s'exécute-t-il pas en tant que root lorsque je lui attribue le bit setuid ? Selinux pourrait-il avoir quelque chose à voir avec cela ?
Réponse acceptée :
L'explication est un peu ennuyeuse :bash lui-même en est la cause. strace
est notre ami (doit être SUID root lui-même pour que cela fonctionne):
getuid() = 1000
getgid() = 1001
geteuid() = 0
getegid() = 1001
setuid(1000) = 0
setgid(1001) = 0
bash détecte qu'il a été lancé SUID root (UID!=EUID) et utilise son pouvoir root pour rejeter ce pouvoir, réinitialisant EUID à UID. Et plus tard même FSUID, juste pour être sûr… :
getuid() = 1000
setfsuid(1000) = 1000
getgid() = 1001
setfsgid(1001) = 1001
Au final :aucune chance. Vous devez démarrer bash avec la racine UID (c'est-à-dire sudo).
Modifier 1
La page de manuel indique ceci :
Si le shell est démarré avec l'ID utilisateur (groupe) effectif différent de l'ID utilisateur (groupe) réel et que l'option -p n'est pas fournie, aucun fichier de démarrage n'est lu, les fonctions shell ne sont pas héritées de l'environnement, le SHELLOPTS , BASHOPTS, CDPATH et GLOBIGNORE, si elles apparaissent dans l'environnement, sont ignorées et l'ID utilisateur effectif est défini sur l'ID utilisateur réel. Si l'option -p est fournie à l'appel, le comportement au démarrage est le même, mais l'ID utilisateur effectif n'est pas réinitialisé.
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.