Bit Setuid sur un script python: Linux vs Solaris
Je suis en cours d'exécution ce petit script python sur linux et Solaris comme un pas de privilège de l'utilisateur :
#!/usr/bin/python
import os
print 'uid,euid =',os.getuid(),os.geteuid()
Avant l'exécution, le bit setuid est réglé sur le script (pas sur de l'interpréteur python) :
chown root:myusergrp getuid.py
chmod 4750 getuid.py
Sur Solaris, l'uid effectif est définie en raison de la bit setuid :
uid,euid = 10002 0
Mais pas sur Linux :
uid,euid = 10002 10002
Note la version de python est de 2,6 pour les deux Solaris et Linux
Est-il possibe d'avoir Python Linux travailler comme Python Solaris ?
source d'informationauteur Eric
Vous devez vous connecter pour publier un commentaire.
La plupart des distributions Unix, normalement, ne vous permettra pas d'utiliser le bit setuid sur un fichier qui utilise un #! interprète. Solaris se trouve être celle qui permet à elle en raison de son utilisation de plus d'assurer la mise en œuvre de la plupart des autres distributions.
Voir cette entrée de la FAQ pour plus d'information au sujet de pourquoi le mécanisme est si dangereux: Comment puis-je obtenir setuid des scripts shell pour le travail?
Voir ce lien pour plus de discussion et comment compiler un setuid exécutable qui va exécuter le script: le bit setuid sur les scripts shell
La partie pertinente:
Je viens de mettre deux et deux ensemble, aujourd'hui et est venu avec une solution alternative:
cython --embed
.Suivre les exemples sur le lien ci-dessus et vous obtiendrez des binaires exécutables de votre Python que vous serez en mesure de
chown
etchmod u+s
remplissant le cercle sans un programme de wrapper.Bien sûr, attention aux risques (de cette ou de toute autre
setuid
)—des bugs dans votre script peut entraîner une élévation de privilèges sur le système.Vous pouvez éventuellement utiliser sudo pour atteindre ce que vous voulez. Il exécute des trucs que les différents utilisateurs:
Les Permissions sont définies par l'utilisateur root à l'aide de visudo. Le bit setuid/setguid choses ne semblent pas s'appliquer à des scripts ou le shell de linux, le code compilé.