“Opération non autorisée” sur l'utilisation de l'os.setuid( ) [python]
Je suis en train de construire une plate-forme pour lancer des scripts. Ces scripts sont placés dans le dossier home de chaque utilisateur. Chaque lancement doit être fait avec chaque id d'utilisateur donc, je suis en train de faire, pour chaque utilisateur, ceci:
user_id = pwd.getpwnam( user )[ 3 ]
user_home = pwd.getpwnam( user )[ 5 ]
os.chdir( user_home )
os.setuid( user_id )
subprocess.Popen( shlex.split( "user_script.py" ) )
Mais, quand python essaye de faire os.setuid( user_id )
il soulever cette exception:
Traceback (most recent call last):
File "launcher.py", line XX, in <module>
OSError: [Errno 1] Operation not permitted
Par la manière, l'utilisateur qui lance ce script est à la racine de groupe (sur GNU/linux) et il a tous les privilèges root.
Si j'essaie de lancer le même code avec des super-utilisateur je reçois un autre message d'erreur:
OSError: [Errno 13] Permission denied
Si quelqu'un peut m'aider à comprendre ce qui se passe s'il vous plaît...
Cela peut être utile: stackoverflow.com/questions/4692720
OriginalL'auteur carlesh | 2011-09-23
Vous devez vous connecter pour publier un commentaire.
Seul root peut faire un setuid, étant à la racine-groupe n'est pas assez.
os.setuid
, mais dans le cas que j'ai essayé d'utiliser leroot
de l'utilisateur du système. Je dois ajouter ce code est un "démon-processus" et, je pense, c'est ça le problème. Je l'ai résolu en faisant unos.fork
et de faire leos.setuid
et lasubprocess.Popen
de l'enfant.OriginalL'auteur ott--
Seulement superutilisateur peut modifier uid chaque fois qu'il se sent comme il suffit d'ajouter l'utilisateur à la racine de groupe n'est pas assez.
setuid(2)
par exemple mentionne:Sur Linux, il y a aussi:
Je ne sais même pas si Python exécute directement, mais ce n'est pas exactement ce que vous voulez de toute façon.
Donc la réponse courte est: Démarrer le processus initial en tant que root.
Si vous êtes inquiet au sujet de la sécurité, de démarrer deux processus, l'un en tant que root, l'un comme utilisateur non privilégié, et la non-privilégiés de communiquer avec le processus racine avec un socket. C'est une configuration plus avancée que...
setuid
lui permet de devenir root, donc c'est effectivement la même chose.OriginalL'auteur Martin Tournoij
OSError: [Errno 1] Operation not permitted
indique l'utilisateur qui lance le script dispose pas des privilèges suffisants. Être dans le groupe racine n'est pas assez, il faut leCAP_SETUID
capacité.OSError: [Errno 13] Permission denied
est probablement une autre erreur. Vous devriez jeter un oeil à son stacktrace.OriginalL'auteur phihag
La ligne
me confond dans de multiples façons.
shlex.split()
semble être redondant, car il n'y a rien à split.Popen()
's paramètre dans une liste.user_script.py
n'a pas les permissions d'exécution, même racine ne peut pas le faire.shlex.split
est redondante. C'est un exemple de la situation: Dans le cas réel je ne peux pas savoir si le "processus d'appel" aura ou non des arguments donc, à mon avis,shlex.split
est nécessaire. Merci pour votre réponse et votre patience.OriginalL'auteur glglgl
vous pouvez également utiliser setuid autorisation . C'est donner ,
Maintenant, même par un utilisateur normal si vous exécutez le programme, il va changer que cette utilisation particulière. Vous n'aurez pas de problèmes d'autorisation .
OriginalL'auteur Naggappan Ramukannan