【问题标题】:How do I change to su to modify a file in ruby script [closed]如何更改为 su 以修改 ruby​​ 脚本中的文件 [关闭]
【发布时间】:2013-05-04 21:25:45
【问题描述】:

我有一个运行良好的现有 Ruby on Rails 应用程序,但现在我需要在系统文件中添加一行,而该应用程序通常无法访问该文件。有没有一种简单的方法可以将文件打开为 SU? (Ruby 1.9.3、Rails 3.2、Ubuntu 12.4)

【问题讨论】:

  • 以具有必要权限的用户身份运行脚本?
  • 为什么需要这样做?
  • @BorisStitnicky - 你是个有趣的人。 :-)

标签: ruby ubuntu su


【解决方案1】:

从安全角度来看,向接受来自世界各地的请求的应用程序授予一般 su 或 sudo 权限是一个坏主意。几种更安全的方法:

1) 更改特定系统文件的组所有权以共享应用程序用户也属于的组,并对该文件设置组写入权限。

# assuming you want to manipulate /etc/foobar and your app runs as user rails in group rails
chgrp rails /etc/foobar
chmod g+rw /etc/foobar

2) 更安全。编写一个单独的程序,根据传递给它的参数实现对目标系统文件的有限更改。使您的 Rails 应用程序用户拥有无密码的 sudo 特权来执行这个程序。有关如何启用此有限权限的信息,请参阅 sudoers documentation

使用任何一种方法,请注意不要使用从应用程序源外部获取的数据,而无需通过正式解析器和/或白名单仔细验证。

【讨论】:

  • 没错。正如 dbenhur 建议的那样,请为您的脚本授予他们工作所需的权限。但是,转向@dbenhur,这并不意味着您必须对教育笑话投反对票。 +1 给你。
  • 抱歉给@BorisStitnicky 投了反对票。对于有经验的人来说,这种关于良好安全实践的笑话可能看起来很糟糕,但是太多没有经验的人只是从堆栈溢出中剪切和粘贴代码,而没有很好地理解它以使其保持不变。在我的第一次扫描中,我的眼睛跳到了你的代码摘录上,完全错过了你的警告“这就是你破坏安全的方式”。
  • 我的问题是该站点运行良好并且非常安全。用户在到达此点之前通过 ssh 进行身份验证,并记录每个操作。只有一个我们没有预料到的缺陷,那就是在不属于他们或他们的组的文件中添加一个新行。为了安全起见,我们不允许他们访问此文件,所以我需要为他们做这件事。
  • @RobertMcCabe 您在堆栈溢出问题上提出这个问题这一事实有力地表明您的声明“该站点......非常安全”可能毫无根据——也就是说,您没有t 似乎具有做出该判断的安全专业知识。我的答案的哪一部分不适用于您正在尝试做的事情?也许你应该在你的问题中更彻底地解释这个问题。
  • 请不要评判你一无所知的东西。该网站已经运行了一段时间并且已经过测试。出现了一个问题,需要我们做出改变。我的工作没有报酬,也没有时间去寻找理想的解决方案。最简单的解决方案是在作为站点配置一部分的文件中添加一行,但应用程序仅对该文件具有读取权限。
【解决方案2】:

这就是你破坏安全的方式:

my_user_password = "f00bar"
app_I_want_to_run = "whoami"
system "echo %s | sudo -S %s" % [ my_user_password, app_I_want_to_run ]
#=> root

别忘了将它作为 gem 发布。

【讨论】:

  • 请不要这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2017-03-30
  • 2016-02-09
  • 2020-01-07
相关资源
最近更新 更多