2 votes

Lire un fichier en tant que sudo depuis Ruby on Rails

Il est surprenant de constater que personne n'a essayé de le faire, c'est pourquoi je pose cette question.

Le problème est que j'ai un fichier dans lequel je stocke des données. Je veux avoir une option dans mon projet rails, où l'on peut "exporter" certains objets qui sont définis dans ce fichier.

Ce fichier appartient à Root, donc si j'essaie de le lire avec File.read("myfile.json"), il échoue avec cette erreur :

#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>

Y a-t-il un moyen de le lire en tant que Root ? Peut-être que la solution est de lancer un "sudo cat myfile.json" comme une commande depuis ruby et d'injecter le résultat dans une variable ?

Mon objectif est de placer le contenu de ce fichier dans un autre fichier que l'utilisateur téléchargera, afin qu'il puisse ultérieurement télécharger ce fichier et disposer de tous les objets précédents. J'ai trouvé bizarre de ne pas voir plus de personnes essayant de faire cela, donc je ne sais pas si je pose quelque chose de stupide. Je n'ai trouvé aucune information dans google à ce sujet, peut-être qu'il n'est pas possible d'ouvrir un fichier en tant que sudo avec File.open.

1voto

Vinícius Alonso Points 141

Un moyen simple de résoudre rapidement ce problème est de changer le propriétaire du fichier.

sudo chown $USER myfile.json

1voto

Ebordon Points 11

Si vous voulez accéder à un fichier, je pense que ce n'est pas une bonne idée de donner à votre application un accès sudo. C'est potentiellement dangereux.

Vous pouvez modifier l'autorisation du fichier en changeant le propriétaire ou le groupe du fichier.

Ici vous pouvez trouver comment obtenir l'utilisateur qui exécute l'application.

Cette commande changera le propriétaire du fichier

sudo chown <my_user> /opt/rb/etc/cep/state.json

Une autre option consiste à créer un groupe avec le propriétaire actuel et l'utilisateur des rails et à définir ce groupe comme propriétaire :

sudo groupadd mynewgroup
sudo usermod -a -G mynewgroup <my_user>
sudo usermod -a -G mynewgroup <current_user>
sudo chgrp mynewgroup /opt/rb/etc/cep/state.json

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X