GNU/Linux >> Tutoriels Linux >  >> Linux

Setuid Bit semble n'avoir aucun effet sur Bash ?

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.


Linux
  1. J'ai ajouté un utilisateur à un groupe, mais les autorisations de groupe sur les fichiers n'ont toujours aucun effet ?

  2. Linux – Suid n'a aucun effet sur les répertoires avec Linux ?

  3. Linux - Ionice n'a aucun effet sur les écritures non synchronisées (c'est-à-dire les écritures normales) ?

  4. Dans `while Ifs=Read..`, Pourquoi Ifs n'a-t-il aucun effet ?

  5. Comment faire en sorte que la saisie anticipée s'applique à la recherche dans l'historique de Bash (ctrl-r) ?

Bash Shebang

Comment obtenir l'astérisque '*' dans Zsh pour avoir le même comportement que Bash ?

Impossible d'exécuter des scripts bash même en tant que root ?

Exécutez la commande bash sur le pipeline jenkins

Est-il possible d'avoir un historique bash sensible au répertoire

Bash a-t-il une commande de couleur, comme on le voit dans MS-Windows CMD ?