2011-11-29 18 views
10

Sono in esecuzione questo piccolo script python sia su Linux e Solaris come utente non privilegiato:bit setuid su script python: Linux vs Solaris

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

Prima di eseguire, il bit setuid è impostato sulla sceneggiatura (non su interprete Python):

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

in Solaris, l'UID effettivo è impostato a causa del bit setuid:

uid,euid = 10002 0 

Ma non su Linux:

uid,euid = 10002 10002 

Nota la versione 2.6 di Python è sia per Solaris e Linux

E 'possibe avere Python Linux a lavorare come Python Solaris?

risposta

21

La maggior parte delle distribuzioni Unix normalmente non consentono di utilizzare setuid su un file che utilizza #! interprete. Solaris sembra essere uno che lo consente grazie all'impiego di un'implementazione più sicura rispetto alla maggior parte delle altre distribuzioni.

Vedere questa FAQ per più di fondo sul perché il meccanismo è così pericoloso: How can I get setuid shell scripts to work?

Vedere questo link per ulteriori discussioni e come compilare un eseguibile setuid che verrà eseguito lo script: setuid on shell scripts

La pertinente parte:

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

    return 0; 
} 
+0

Solaris è basato su SVR4, che come note di collegamento alle FAQ, utilizza metodi più sicuri rispetto ai precedenti Unix per gestire l'avvio di script setuid. – alanc

+0

Punto eccellente. Ho modificato la risposta per riflettere questo. –

+0

E se il tuo script python ha bisogno di essere avviato come utente non-root, e quindi suid durante l'esecuzione ad un certo punto? –

2

ho appena messo insieme due più due oggi e si avvicinò con una soluzione alternativa: cython --embed.

Segui gli esempi al link qui sopra e riceverai eseguibili binari dal tuo Python che sarai in grado di chown e chmod u+s, completando il cerchio senza un programma wrapper.

Ovviamente, fare attenzione ai rischi (di questo o di qualsiasi altro setuid uso) -bug nello script può comportare privilegi elevati sul sistema.

1

Potresti potenzialmente utilizzare sudo per ottenere ciò che desideri. Funziona come utenti diversi:

sudo -u otheruser command 

Le autorizzazioni sono impostate da root utilizzando visudo. Il materiale setuid/setguid non sembra applicarsi agli script o alla shell in linux, solo codice compilato.