Чтение файла как sudo из Ruby on Rails

Aug 19 2020

Удивительно, но я не нашел никого, кто пытался бы это сделать, поэтому я задаю этот вопрос.

Дело в том, что у меня есть файл, в котором я храню некоторые данные. Я хочу иметь возможность в моем проекте rails, где вы можете «экспортировать» некоторые объекты, определенные в этом файле.

Этот файл принадлежит root, так что если я попытаюсь прочитать его с помощью File.read ("myfile.json"), он выйдет из строя с этой ошибкой:

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

Есть ли способ прочитать его как root? Может быть, решение состоит в том, чтобы запустить «sudo cat myfile.json» как команду из ruby ​​и ввести результат в переменную?

Моя цель - поместить содержимое этого файла в другой, который загрузит пользователь, чтобы позже он мог загрузить этот файл и получить все объекты из предыдущего. Было странно не видеть больше людей, пытающихся это сделать, поэтому я не знаю, может быть, я спрашиваю что-то глупое. Я не нашел информации об этом в Google, возможно, невозможно открыть файл как sudo с помощью File.open.

Ответы

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