在开发或部署项目时,很多人会用 ref="/tag/2028/" style="color:#E3A3CF;font-weight:bold;">Ruby 脚本来自动安装依赖。比如运行一段脚本,自动执行 bundle install 或从 Gemfile 安装一堆 gem 包。这看起来省事,但如果不加留意,也可能把安全大门敞开。
别轻易运行来路不明的 Ruby 安装脚本
你有没有收到过这样的提示:“请运行这个 Ruby 脚本一键配置环境”?尤其是一些开源项目文档里,可能会提供类似命令:
curl -sSL https://example.com/setup.rb | ruby
这条命令的意思是:从网络下载一个 Ruby 脚本,然后直接交给 Ruby 解释器执行。问题就出在这——你根本没看到代码长什么样,就已经让它在系统里跑起来了。就像陌生人递来一瓶饮料,你一口喝下,谁知道里面是什么。
恶意依赖可能藏在 gem 中
Ruby 的依赖管理靠的是 RubyGems,全球开发者都在用。但这也成了攻击者的突破口。曾有案例显示,一些名字和常用 gem 非常相似的恶意包被上传到 RubyGems.org,比如 rails-core 冒充 rails。一旦你在 Gemfile 里写错一行,就可能引入带后门的代码。
这些恶意 gem 可能在安装时悄悄收集你的环境变量、SSH 密钥,甚至反向连接攻击者的服务器。
如何安全地处理 Ruby 脚本和依赖
第一步,永远不要用管道直接把网络内容喂给 Ruby 执行。正确的做法是先下载,再查看:
curl -sSL https://example.com/setup.rb -o setup.rb
cat setup.rb # 先看看代码干了啥
ruby setup.rb # 确认无误后再运行
第二,检查项目的 Gemfile 和 gem 来源。只使用官方源(https://rubygems.org),避免在 Gemfile 里添加第三方源,除非你完全信任它。
第三,定期更新依赖,但也要小心更新带来的风险。可以用 bundle audit 这类工具扫描已安装的 gem 是否有已知漏洞。
用最小权限运行安装脚本
哪怕是你自己写的脚本,也别用 root 身份去跑。创建一个普通用户专门用来运行 Ruby 项目,限制它的系统权限。这样即使某个 gem 出了问题,影响范围也能控制住。
就像家里装防盗门,不是防自家人,而是提防那些伪装成快递员的陌生人。Ruby 脚本和依赖也一样,信任要给,但验证不能少。