Le Livre d'Argent

Les gens, quelle solution vous auriez pour permettre à un utilisateur non root de lancer un script avec un autre utilisateur ? 🤔

@aeris @mmu_man Réécrire le script dans un langage compilable (Python se compile très bien avec cython, si jamais) et mettre un SUID sur le fichier.

Ou se battre avec la configuration de sudo pour que cet utilisateur en particulier puisse lancer cet exécutable en particulier en tant que cet autre utilisateur en particulier sans mot de passe, sans doute.

@elzen setuid sur un processus, en l'occurence un script compilé, donne des privilèges élevés a ce script, qui potentiellement peut faire tout ce que root peut faire… C'est contraire a ce qui est souhaité…

sudoer_file permet de restreindre les commandes autorisées pour un utilisateur donné. Au lieu d'être complètement sudoer, on peut juste lancer des commandes (et arguments) bien définis. Y compris sans MdP si on veut vraiment mais selon ce que fait la commande autorisée…

@aeris @mmu_man

@elzen Y a rien à se battre. De mémoire c'est une ligne de conf et ça juste marche… c'est bien plus simple que réécrire un quelconque script 🤔

Mais il reste le problème de mot de passe de l'user de destination a fournir vs non-interactivité… Et là ça se complique. Si le pass user est dans un password-store, par exemple, il faut toujours fournir la passphrase de la clé à la connxion ou à un agent/cache. Ou une clé passwordless (évidemment surtout pas 🤮). Jvois pas de solution…

@aeris @mmu_man

@devnull @aeris @mmu_man Le bit suid sur un exécutable fait que quand il est lancé, il s'exécute avec les droits du propriétaire du fichier. Quand celui-ci est un compte utilisateur et pas le compte root, le programme ne peut pas faire « tout ce que le root peut faire », mais seulement ce que peut faire le propriétaire du fichier. Ce qui correspond précisément à ce qui est demandé ici.

Par ailleurs, ce serait dangereux pour un programme extérieur auquel tu donnes le droit sans savoir ce qu'il fait au juste ; si c'est un script que tu as toi-même écrit et compilé, tu sais ce que le programme fait et donc si ça présente un danger ou pas. Niveau sécurité, c'est très exactement la même chose que pour les droits de sudoer : ça dépend de ce que fait le script.

À un moment, quand il y a des trucs intégrés spécialisés et que la personne qui pose la question est susceptible de savoir ce qu'elle fait, c'est quand même mieux de les mentionner que de ne parler que des usines à gaz comme sudo.
replies
1
announces
0
likes
0

@elzen Si le but est de contourner les limitations d'un user non-root en lançant le process avec un user ayant des droits plus élevés… Le process aura des droits plus éléves.

Sinon, je vois pas pourquoi le setuid et nécessaire… 🤔

@aeris @mmu_man

@devnull @aeris @mmu_man Le but qui nous a été exposé est de permettre à un utilisateur (non-root) de lancer un script en tant qu'un autre utilisateur (vraisemblablement non-root aussi, mais ça ne change rien sur ce point) : c'est **précisément** le rôle d'un bit suid.

Tu prépares l'exécutable, tu lui donnes le bon propriétaire (l'utilisateur cible) et tu lui mets le bit suid, et quand un utilisateur qui a le droit de l'exécuter le fait, il l'exécute comme s'il était le propriétaire du fichier. Ça fait donc très exactement ce qui nous a été demandé, ça n'est ni plus, ni moins risqué que n'importe quelle autre opération de changement d'utilisateur, et comme ça n'utilise que le système de gestion de droits de base, ça marche quelle que soit la configuration précise de la machine.

À un moment, c'est bien d'arrêter les réflexes pavloviens et d'ouvrir une page de man, quoi -_-

@elzen@fadrienn.irlnc.org @devnull@mamot.fr @mmu_man@m.g3l.org setuid ne peut malheureusement être posé que sur des binaires. Les scripts ne le supportent pas. Et du coup trop souvent, c’est pas utilisable sans un wrapper binaire 😭

@aeris @devnull @mmu_man Ouaip, et un binaire qui lance le script pour le coup c'est plus risqué que de compiler directement le programme que tu veux, fatalement ^^" D'où le fait que je parlais au début de si besoin réécrire le script pour le compiler.

Pour ce genre de cas, je passe généralement par du Python, ça reste un langage de script relativement souple, mais dès qu'il y a besoin d'un suid il suffit d'un coup de cython pour avoir un binaire.