【问题标题】:Reading a file as sudo from Ruby on Rails从 Ruby on Rails 以 sudo 形式读取文件
【发布时间】:2020-12-08 17:59:22
【问题描述】:

令人惊讶的是,我没有发现有人试图这样做,这就是我提出这个问题的原因。

事情是我有一个文件,我在其中存储一些数据。我想在我的 rails 项目中有一个选项,您可以在其中“导出”此文件中定义的一些对象。

这个文件属于根目录,所以如果我尝试使用 File.read("myfile.json") 读取它,它会失败并出现以下错误:

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

有没有办法让我以 root 身份阅读它?也许解决方案是从 ruby​​ 运行“sudo cat myfile.json”作为命令并将结果注入变量?

我的目标是将这个文件的内容放在另一个用户将下载的文件中,以便稍后他可以上传这个文件并拥有之前的所有对象。没有看到更多人尝试这样做很奇怪,所以我不知道我是否在问一些愚蠢的问题。我在 google 中没有找到有关此的信息,也许无法使用 File.open 以 sudo 的形式打开文件。

【问题讨论】:

    标签: ruby-on-rails ruby file io permissions


    【解决方案1】:

    快速解决此问题的一种简单方法是更改​​文件的所有者。

    sudo chown $USER myfile.json

    【讨论】:

    • 对不起,我忘了说,当然改变权限是不可能的,这个文件用在其他需要这个权限的地方。我得想办法获取内容
    • 我知道除了root 之外,您不希望任何人给它写信,但他必须是唯一可以阅读它的人吗?难道你不能只是chmod 644 这样你的进程就可以读取它吗?否则,请考虑使用cron 作业定期制作可读副本。
    【解决方案2】:

    如果你想访问一个文件,我认为给你的应用程序 sudo 访问权限不是一个好主意。有潜在的危险。

    您可以改为更改文件的权限,方法是更改​​文件的所有者/组。

    Here你可以找到如何让用户运行应用程序。

    此命令将更改文件的所有者

    sudo chown &lt;my_user&gt; /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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 2010-11-28
      • 2014-09-05
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多