L'exécution d'un script python en tant que root
J'ai le script suivant:
#!/usr/bin/env python
import sys
import pyttsx
def main():
print 'running speech-text.py...'
engine = pyttsx.init()
str = "Hi..."
if len(sys.argv) > 1:
str = sys.argv[1]
engine.say(str)
engine.runAndWait()
if __name__ == '__main__':
main()
et je l'ai placé dans /usr/bin/speech-test.py
J'ai également donné exécutable autorisations et la propriété de la racine:
sudo chown root:root /usr/bin/speech-test.py
sudo chmod 4755 /usr/bin/speech-test.py
Cependant, ce script ne s'exécute correctement si je exécuter en tant qu' sudo speec-test.py
. Si j'essaie de le lancer en tant que juste speech-test.py
il se plaint de ne pas trouver un tas de ALSA lib fichiers.
Me manque quelque chose pour avoir mon script de s'exécuter avec les privilèges de root?
Le problème peut être avec
juste
Vous ne pouvez pas SUID scripts sous linux. Si vous en avez besoin, écrire un fichier binaire lanceur ou de l'utilisation nopasswd sudo. Rien exécutable qui commence avec une hashbang est un script.
TIL: stackoverflow.com/questions/18698976/... + faqs.org/faqs/unix-faq/faq/part4/section-7.html Merci @x3al
Si vous ne souhaitez pas utiliser nopasswd sudo ensuite, vous pouvez créer un fichier binaire exécutable à partir d'un script Python en utilisant quelque chose comme cx_Freeze.
env
dans hashbang, mais j'ai besoin de le tester. Vous l'appelez comme ./speech-test.py
, pas par python speech-test.py
? Parce que plus tard, exécuter python encore avec des droits d'utilisateur.juste
speech-test.py
no ./Vous ne pouvez pas SUID scripts sous linux. Si vous en avez besoin, écrire un fichier binaire lanceur ou de l'utilisation nopasswd sudo. Rien exécutable qui commence avec une hashbang est un script.
TIL: stackoverflow.com/questions/18698976/... + faqs.org/faqs/unix-faq/faq/part4/section-7.html Merci @x3al
Si vous ne souhaitez pas utiliser nopasswd sudo ensuite, vous pouvez créer un fichier binaire exécutable à partir d'un script Python en utilisant quelque chose comme cx_Freeze.
OriginalL'auteur moesef | 2014-03-22
Vous devez vous connecter pour publier un commentaire.
Si vous voulez exécuter le script que
root
, même sanssudo
? Pour cela, vous devez définir la bit setuid sur le script avecsudo chmod u+s program
. Cependant, la plupart des distributions Unix le permet que pour les fichiers binaires, et non pas pour les scripts, pour des raisons de sécurité. En général, il n'est vraiment pas une bonne idée de le faire.Si vous souhaitez exécuter ce script en tant que root, vous devrez exécuter en tant qu'
sudo
. Ou, vous devez créer un fichier binaire qui exécute votre script, de sorte que vous pouvez définir le bit setuid sur ce binaire wrapper. Cette une question relative à la explique plus.C'est aussi une bonne idée de vérifier l'uid effectif, et si il n'est pas root, puis arrêter de courir. Pour cela, il faut ajouter ceci à proximité du haut (merci @efirvida pour l'astuce!)
RÉPONSE ORIGINALE À CETTE QUESTION
Peut-être que votre utilisateur et de la racine utiliser une autre version de python, avec différents python chemin d'accès, et les différentes bibliothèques.
Essayez ceci:
Si les deux commandes ne donne pas le même résultat, alors vous devez soit modifier la configuration de l'utilisateur d'utiliser la même version de
python
(celui qui a le ALSA libs), ou coder en dur la version de python la première ligne du script.Aussi essayer d'ajouter un
print sys.path
ligne dans le script et exécutez avec votre nom d'utilisateur et avecsudo
et de les comparer. Sans doute, vous obtiendrez des résultats différents. Vous devrez peut-être ajuster laPYTHONPATH
variable de votre utilisateur.Il ne devrait pas être nécessaire de faire le propriétaire du script de la racine, et de le faire fonctionner avec
sudo
. Vous avez juste besoin de configurerpython
etPYTHONPATH
correctement.echo $PATH
est la même pour les deux mon user et root. Pourquoi aurais-je besoin d'ajuster PYTHONPATH pour mon utilisateur? Ne devrait-ce pas exécuté en tant que root et de l'utilisation de la racine PYTHONPATH?ok je pense que je comprends mieux ce que vous voulez. J'ai mis à jour ma réponse.
cool si Mal il suffit de créer un fichier binaire wrapper, je suppose. semble assez clair
binaire wrapper travaillé. merci!
Bonne astuce @efirvida, merci, ajouté à mon post
OriginalL'auteur janos
Je ne suis pas vraiment sûr si c'est une bonne méthode. Je l'ai essayé et il fonctionne très bien sur arch linux. Permettez-moi ce que vous en pensez.
Si vous écrivez un script à exécuter les .py comme système différent du groupe, que le groupe peut posséder un interpréteur python et que vous avez indiqué racine capacités.
ouvrir une nouvelle invite utilisateur régulier
Cette méthode est plus sûre que sudo si utilisé correctement, en raison de python, il est possible de ne faire que de vous laisser et de ne pas avoir le contrôle complet du système. L'inconvénient est d'avoir à faire une copie de l'interprète ou de ne pas autoriser les utilisateurs réguliers du groupe de l'utiliser. NE fonctionnent PAS toute votre code python comme ça, c'est une grande vulnérabilité si pas nécessaire. Le cap_net_admin+ep vous permettra de changer le kernel var ip_forward et pour l'exemple ci-dessus, vous devez cap_dac_override+ep. Vous pouvez également créer un newuser qui appartient à la rootpython groupe, de cette façon, vous ne pouvez pas simplement newgrp rootpython sans entrer dans le newuser du mot de passe.
OriginalL'auteur JimiMyFr13nd
Son privilège est le même que celui qui l'a dirigée. Donc, si vous avez exécuté comme vous-même, il n'aura pas su privilège. Vous devez le faire
sudo
.Ah oui j'ai oublié à ce sujet... Désolé
OriginalL'auteur Hot.PxL