Membaca file sebagai sudo dari Ruby on Rails

Aug 19 2020

Anehnya saya tidak menemukan siapa pun yang mencoba melakukan ini, itulah mengapa saya membuat pertanyaan ini.

Masalahnya saya punya file, di mana saya menyimpan beberapa data. Saya ingin memiliki opsi dalam proyek rel saya, di mana Anda dapat "mengekspor" beberapa objek yang ditentukan dalam file ini.

File ini milik root, jadi jika saya mencoba membacanya dengan File.read ("myfile.json") gagal dengan kesalahan ini:

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

Apakah ada cara agar saya dapat membacanya sebagai root? Mungkin solusinya adalah dengan menjalankan "sudo cat myfile.json" sebagai perintah dari ruby ​​dan menyuntikkan hasilnya ke dalam variabel?

Tujuan saya adalah untuk menempatkan konten file ini di dalam file lain yang akan diunduh pengguna, jadi nanti dia dapat mengunggah file ini dan memiliki semua objek dari sebelumnya. Aneh rasanya tidak melihat lebih banyak orang mencoba melakukan ini jadi saya tidak tahu apakah mungkin saya menanyakan sesuatu yang bodoh. Saya tidak menemukan informasi di google tentang ini, mungkin tidak mungkin untuk membuka file sebagai sudo dengan File.open.

Jawaban

1 ViníciusAlonso Aug 19 2020 at 20:23

Cara sederhana untuk menyelesaikannya dengan cepat adalah dengan mengubah pemilik file.

sudo chown $USER myfile.json

1 Ebordon Aug 19 2020 at 20:27

Jika Anda ingin mengakses file, menurut saya bukan ide yang baik untuk memberikan akses sudo pada aplikasi Anda. Ini berpotensi berbahaya.

Anda dapat mengubah izin pada file sebagai gantinya, dengan mengubah pemilik / grup untuk file tersebut.

Di sini Anda dapat menemukan cara membuat pengguna menjalankan aplikasi.

Perintah ini akan mengubah pemilik file

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

Opsi lainnya adalah membuat grup dengan pemilik saat ini dan pengguna rel dan menetapkan grup itu sebagai pemilik:

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