6
votes

Rediriger la sortie en tant qu'utilisateur différent

J'ai besoin de sudo comme utilisé différent afin d'exécuter une certaine commande. J'essaie d'utiliser la strace avec elle et de rediriger la sortie de cela dans un fichier pour une analyse ultérieure. La partie délicate est que, comme l'utilisateur sudo'ed, je n'ai pas d'autorisations pour écrire à l'emplacement, je souhaite enregistrer mon fichier dans. (Et sans sudo, je n'ai pas la permission d'exécuter cette commande pour commencer) .

Alors, comment puis-je exécuter ma commande comme utilisateur A et rediriger sa sortie comme utilisateur B?


0 commentaires

4 Réponses :


6
votes

Vous pouvez utiliser tee code> pour cela. Le programme lit stdin code> et écrit l'entrée sur un ou plusieurs fichiers ainsi que STDOUT:

sudo command | sudo tee output.txt > /dev/null
sudo -u A command | sudo -u B tee output.txt > /dev/null


1 commentaires

Peut-être pas pertinent pour la réponse, mais j'ai juste besoin de l'exécuter: echo "le contenu du texte" | SUDO -UN Developer Tee Sortie.txt



10
votes

Essayez avec:

sudo sh -c "commande> sortie.txt"

De cette façon, vous devriez pouvoir exécuter n'importe quelle commande et écrire partout.

Si vous avez vraiment besoin, pour une raison quelconque, je ne comprends pas, exécutez la commande en tant qu'utilisateur A et d'écrire en tant qu'utilisateur B, vous pouvez procéder comme suit:

sudo -u une commande | sudo -u b tee / quelque part> / dev / null

où A et B sont l'utilisateur que vous voulez. La pièce > / dev / null n'est requise que si vous ne voulez pas que la sortie de commande soit redirigée sur stdout aussi.


4 commentaires

Que faites-vous avec ces appels superflus à Sh? Le tout fonctionne parfaitement si vous combinez simplement sudo et tee ...


Faux. sudo -u personne ne ls | T-shirt de racine sudo -u> / test et je reçois bash: / test: autorisation refusée . En fait, je ne peux pas expliquer pourquoi, mais sur mon système, je dois appeler sh (ou bash). Si quelqu'un a une explication, c'est le bienvenu.


C'est parce que vous utilisez tee faux :). S'il vous plaît lire le manuel. Vous fournissez le fichier à écrire comme argument /. Dans votre exemple, la tuyauterie est effectuée par votre propre utilisateur (comme > est interprété à partir de la coquille de l'appelant) lors de l'utilisation correcte de TEE L'appelant de cette pièce est pertinent (qui serait root dans ce cas ...)


Oh merci. Vous avez raison. Mise à jour de ma réponse et vote pour le vôtre, cela vaut la peine d'être uppote. :)



0
votes

Une autre option qui évite de la tuyauterie, puis de / dev / zéro est xxx


0 commentaires

0
votes

Peut-être que j'ai mal compris la question initiale.

Si vous souhaitez capturer la sortie entière de sudo strace foo , le moyen le plus simple est d'exécuter script d'abord.

Si vous souhaitez capturer le starr de sudo strace foo Vous pouvez essayer sudo strace foo 2>> (TEE logfile) . < / p>

Si vous voulez seulement capturer la sortie de strace et non de foo , vous pouvez essayer sudo strace -o / dev / fd / foo 3 >> (TEE LOGFILE) .

Si vous ne pouvez pas utiliser 3>> , je pense que vous pouvez toujours le faire avec la redirection FD.


0 commentaires