gpt4 book ai didi

ruby-on-rails - Ruby on Rails - 如何以 root 身份运行 bash 脚本?

转载 作者:行者123 更新时间:2023-12-03 15:21:15 25 4
gpt4 key购买 nike

我想做的是使用“button_to”和 friend 在 Linux 服务器上启动不同的脚本。并非所有脚本都需要 root,但有些脚本需要,因为它们将运行“apt-get dist-upgrade”等。

PassengerDefaultUser 在 apache2.conf 中设置为 www-data

我已经尝试从 Controller 运行脚本,这些脚本会做一些小事,比如写入文本文件等,这样我就知道我让 Rails 正确地执行了脚本。 (换句话说,我知道如何从 Controller 运行脚本)但我不知道如何运行需要 root 访问权限的脚本。谁能给我一个线索?

关于安全的说明:感谢您提供的所有防止黑客攻击的警告。但是,您不需要放松任何 sleep ,因为 A) 无法从公共(public)互联网访问该 Web 应用程序,它只能在私有(private)内部网上访问,B) 该应用程序受密码保护,并且 C) 因为用户不会能够提供自定义输入,仅从将作为变量传递给脚本的表单中进行选择。但是,因为我这么说并不意味着我无视您的安全建议 - 我会在设计中非常仔细地考虑它们。

最佳答案

您应该使用 setuid 位来实现相同的功能而无需 sudo。但是您不应该运行 Bash 脚本。 Setuid 比 sudo 安全得多。使用 sudo 或 setuid,您将以 root 身份运行程序。但只有 setuid(在某些语言的帮助下)提供了一些额外的安全措施。

本质上,您将使用暂时允许以所有者身份运行的脚本,而不是以调用它们的用户身份运行的脚本。 Ruby 和 Perl 可以检测脚本何时以与调用者不同的用户身份运行,并强制执行安全措施以防止不安全的调用。这称为污点模式。 Bash 根本不会在污染模式下运行。

污点模式的工作原理主要是声明来自外部源的所有输入在传递给系统调用时不安全。

设置:

使用 chmod 将要运行的脚本的权限设置为 4755,并将其所有者设置为 root:

$ chmod 4755 script.rb
$ chown root script.rb

然后像往常一样运行脚本。 setuid 位启动并运行脚本,就好像它是由 root 运行的一样。这是临时提升权限的最安全方法。

请参阅关于 safe levels and taint 的 Ruby 文档了解 Ruby 的卫生要求,以防止受污染的输入造成伤害。或者 perlsec faq学习如何在 Perl 中完成同样的事情。

再次。如果您执意要以 root 身份从自动化系统运行脚本。 不要使用 Bash!使用 Ruby 或 Perl 而不是 Bash。污染模式迫使您认真对待安全问题,并可以避免许多不必要的问题。

关于ruby-on-rails - Ruby on Rails - 如何以 root 身份运行 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1616814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com