Question

Je suis en cours d'exécution ce petit script python sur Linux et Solaris en tant qu'utilisateur privilégié non :

#!/usr/bin/python
import os
print 'uid,euid =',os.getuid(),os.geteuid()

Avant d'exécuter, le bit setuid est défini sur le script (pas interpréteur Python):

chown root:myusergrp getuid.py
chmod 4750 getuid.py

Sur Solaris, le uid efficace est à cause du bit setuid:

uid,euid = 10002 0

Mais pas sur Linux:

uid,euid = 10002 10002

Notez que la version python est de 2,6 pour les deux Solaris et Linux

Est-il possibe d'avoir Python Linux travailler comme Python Solaris?

Était-ce utile?

La solution

La plupart des distributions Unix normalement ne vous permettent pas d'utiliser setuid sur un fichier qui utilise un #! interprète. Solaris se trouve être celui qui permet en raison de son utilisation d'une mise en œuvre plus sûre que la plupart des autres distributions.

Voir cette FAQ pour plus d'arrière-plan pourquoi le mécanisme est si dangereux: Comment puis-je obtenir des scripts shell setuid au travail?

Voir ce lien pour plus de discussion et comment compiler un exécutable setuid qui exécutera votre script: setuid sur les scripts shell

La partie pertinente:

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}

Autres conseils

Je viens de mettre deux et deux ensemble aujourd'hui et est venu avec une solution alternative: cython --embed .

Suivez les exemples au lien ci-dessus et vous obtiendrez de votre exécutables binaires Python que vous serez en mesure de chown et chmod u+s, complétant le cercle sans programme d'emballage.

Bien sûr, méfiez-vous des risques (de ce ou toute autre utilisation de setuid) -bugs dans votre script peut entraîner des privilèges élevés sur le système.

Vous pourrait utiliser sudo pour obtenir ce que vous voulez. Il fonctionne comme des trucs différents utilisateurs:

 sudo -u otheruser command

Les autorisations sont définies par l'utilisateur root en utilisant visudo. Les trucs de setuid / SetGuid ne semble pas appliquer aux scripts ou le shell sous Linux, le code compilé uniquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top