Ruby onRailsからsudoとしてファイルを読み取る

Aug 19 2020

驚いたことに、私はこれをしようとしている人を見つけられませんでした、それが私がこの質問をしている理由です。

物事は私がいくつかのデータを保存しているファイルを持っているということです。Railsプロジェクトに、このファイルで定義されているいくつかのオブジェクトを「エクスポート」できるオプションが必要です。

このファイルはrootに属しているので、File.read( "myfile.json")で読み取ろうとすると、次のエラーで失敗します。

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

rootとして読み取る方法はありますか?おそらく解決策は、rubyからのコマンドとして「sudocat myfile.json」を実行し、その結果を変数に挿入することですか?

私の目標は、このファイルの内容を、ユーザーがダウンロードする別のファイル内に配置して、後でこのファイルをアップロードして、以前のすべてのオブジェクトを保持できるようにすることです。これをやろうとしている人が増えないのは奇妙だったので、私が何か愚かなことを求めているのかどうかはわかりません。これに関する情報はグーグルで見つかりませんでした。File.openでsudoとしてファイルを開くことができない可能性があります。

回答

1 ViníciusAlonso Aug 19 2020 at 20:23

それをすばやく解決する簡単な方法は、ファイルの所有者を変更することです。

sudo chown $USER myfile.json

1 Ebordon Aug 19 2020 at 20:27

ファイルにアクセスしたい場合は、アプリケーションにsudoアクセスを許可することはお勧めできません。潜在的に危険です。

代わりに、ファイルの所有者/グループを変更することにより、ファイルのアクセス許可を変更できます。

ここでは、ユーザーにアプリケーションを実行させる方法を見つけることができます。

このコマンドはファイルの所有者を変更します

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

別のオプションは、現在の所有者とrailsユーザーでグループを作成し、そのグループを所有者として設定することです。

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