2017-02-01 3 views
-1

J'ai une commande mineure complexe en utilisant un tuyaudroits de commande complexe (conduite)

python3 wlan.py -p taken | awk '{$10 = sprintf("%.1f", $10/60); print $4 $6 $8 $10 ",min"}' | awk '{gsub(/,/," ");print}' >> /tmp/missed.log 

et je reçois une erreur d'autorisation si cette commande est exécutée à partir d'un programme, mais pas de la ligne de commande (sudo). Donc, évidemment, il y a un problème avec les droits du programme. J'ai fixé les droits de python et awk à 777 en vain. Mais la question principale est: quels sont les droits de la >> commande et comment puis-je les changer? Le message d'erreur est "write missed.log - permission denied".

+0

Pourquoi ne pas inclure les messages d'erreur? – Jdamian

+0

s'il vous plaît inclure un exemple de la façon dont vous exécutez le code et la sortie (erreur) !!!! –

+0

Vous dites que vous avez accordé des permissions à 'python et ···'. Qu'est-ce que ça veut dire? fichier binaire ou python 'python3'' wlan.py'? – Jdamian

Répondre

0

accès aux fichiers dans un environnement Unix est lié à qui vous êtes, pas quels programmes vous exécutez. * Lorsque vous exécutez sudo python3 ..., vous changez qui vous êtes un utilisateur plus privilégié pour la durée de la commande python3. Une fois que Python cesse de courir, vous êtes de retour à votre état normal. Imaginez que Clark Kent enlève ses lunettes et enfile sa cape. Une fois que les badguys ont été vaincus, Superman revient à un Joe ordinaire.

Votre message d'erreur indique que votre compte utilisateur normal ne dispose pas des autorisations nécessaires pour accéder à / et /tmp, et d'écrire /tmp/missed.log. Les autorisations sur wlan.py et /usr/bin/python3 ne sont pas le problème ici. Je peux penser à quatre options (le meilleur au pire):

  1. Mettez le fichier de sortie ailleurs que dans /tmp. Vous devriez toujours être capable d'écrire votre répertoire personnel, donc vous devriez pouvoir courir sans sudo, avec > ~/missed.log au lieu de > /tmp/missed.log. Lorsque vous exécutez votre pipeline "à partir d'un programme", comme vous l'avez dit, il suffit d'inclure le sudo comme si vous l'exécutiez à partir de la ligne de commande. De cette façon, vous obtenez des résultats cohérents. Ajoutez-vous au groupe propriétaire/tmp
  2. Ne stat -c '%G' /tmp. Cela vous dira quel groupe possède/tmp. Ensuite, si ce groupe n'est pas root, faites usermod -a -G <that group name> <your username>. Modifier les autorisations sur /tmp. C'est le gourdin: possible, mais non recommandé. sudo rm -f /tmp/missed.log et sudo chmod o+rwx /tmp devrait fonctionner, mais peut ouvrir d'autres vulnérabilités que vous ne voulez pas.

* En ignorant setuid, ce qui ne semble pas être le cas ici.