Lesen einer Datei als Sudo von Ruby on Rails
Überraschenderweise habe ich niemanden gefunden, der versucht hat, dies zu tun. Deshalb stelle ich diese Frage.
Ich habe eine Datei, in der ich einige Daten speichere. Ich möchte eine Option in meinem Rails-Projekt haben, mit der Sie einige Objekte "exportieren" können, die in dieser Datei definiert sind.
Diese Datei gehört zu root. Wenn ich also versuche, sie mit File.read ("myfile.json") zu lesen, schlägt dies mit folgendem Fehler fehl:
#<Errno::EACCES: Permission denied @ rb_sysopen - /opt/rb/etc/cep/state.json>
Gibt es eine Möglichkeit, wie ich es als root lesen kann? Vielleicht besteht die Lösung darin, eine "sudo cat myfile.json" als Befehl von ruby auszuführen und das Ergebnis in eine Variable einzufügen?
Mein Ziel ist es, den Inhalt dieser Datei in einer anderen zu platzieren, die der Benutzer herunterladen wird, damit er diese Datei später hochladen und alle Objekte von zuvor haben kann. Es war seltsam, nicht mehr Leute zu sehen, die das versuchen, also weiß ich nicht, ob ich vielleicht etwas Dummes frage. Ich habe in Google keine Informationen dazu gefunden, möglicherweise ist es nicht möglich, eine Datei als sudo mit File.open zu öffnen.
Antworten
Eine einfache Möglichkeit, das Problem schnell zu lösen, besteht darin, den Eigentümer der Datei zu ändern.
sudo chown $USER myfile.json
Wenn Sie auf eine Datei zugreifen möchten, ist es meiner Meinung nach keine gute Idee, Ihrer Anwendung Sudo-Zugriff zu gewähren. Es ist möglicherweise gefährlich.
Sie können stattdessen die Berechtigung für die Datei ändern, indem Sie den Eigentümer / die Gruppe für die Datei ändern.
Hier erfahren Sie, wie Sie den Benutzer dazu bringen, die Anwendung auszuführen.
Dieser Befehl ändert den Eigentümer der Datei
sudo chown <my_user> /opt/rb/etc/cep/state.json
Eine weitere Option besteht darin, eine Gruppe mit dem aktuellen Eigentümer und dem Rails-Benutzer zu erstellen und diese Gruppe als Eigentümer festzulegen:
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