gpt4 book ai didi

ruby - rbenv 系统范围安装导致不安全操作

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:34 26 4
gpt4 key购买 nike

我们公司使用瘦客户端,并且有很多用户使用同一个盒子。我按照以下网站上的说明将 rbenv 安装为系统安装;

https://blakewilliams.me/posts/system-wide-rbenv-install

这归结为这些命令

cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv
chgrp -R staff rbenv
chmod -R g+rwxXs rbenv

通过运行最后一行,我们应该能够以属于“staff”组的系统的任何用户身份安装 gems。我们有两个开发人员属于该组,但都不能安装 gems。

我们得到了错误;

~ % gem install cheat         
/usr/local/rbenv/versions/2.3.5/lib/ruby/2.3.0/rubygems/config_file.rb:332:in `exist?': Insecure operation - exist? (SecurityError)
from /usr/local/rbenv/versions/2.3.5/lib/ruby/2.3.0/rubygems/config_file.rb:332:in `load_file'
from /usr/local/rbenv/versions/2.3.5/lib/ruby/2.3.0/rubygems/config_file.rb:198:in `initialize'
from /usr/local/rbenv/versions/2.3.5/lib/ruby/2.3.0/rubygems/gem_runner.rb:75:in `new'
from /usr/local/rbenv/versions/2.3.5/lib/ruby/2.3.0/rubygems/gem_runner.rb:75:in `do_configuration'
from /usr/local/rbenv/versions/2.3.5/lib/ruby/2.3.0/rubygems/gem_runner.rb:40:in `run'
from /usr/local/rbenv/versions/2.3.5/bin/gem:21:in `<main>'
~ % gem install cheat

如果我从组中删除粘性位,那么他们可以添加 gem,但是如果有人试图删除其他人安装的 gem,这将失败;

~ % chmod -R g-s rbenv

我如何允许多个用户从系统范围安装的 rbenv 安装/卸载 gem?

更新

这里是安装在/usr/local/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems目录下的例子,可以看到

drwxrwxr-x   5 map7  map7  4.0K Jun  4 15:50 unicode-display_width-1.3.3
drwxrwxr-x 5 andre andre 4.0K May 23 13:22 vcr-3.0.3
drwxrwxr-x 3 map7 staff 4.0K Apr 30 11:01 web-console-3.6.2

我找到的解决方案是

  : cd /usr/local/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
: sudo chown -R map7:staff gems
: sudo chmod -R 775 gems
: sudo chmod g+s gems

最佳答案

我查看了 RubyGems config_file 的源代码。您遇到的错误是由 this file operation 引起的尝试读取 $HOME/.gem/credentials(这是硬编码的 here )。

基于此,您可以尝试授予 rbenv 为一个用户读取 $HOME/.gem/credentials 的权限,并查看是否允许该用户安装 gem。

但是,向所有用户公开任何称为“凭据”的东西似乎是一个危险的提议。

我的理解是,如果您尝试 publish gems,凭据文件只需要包含真实凭据。 ,但对于大多数安装来说可以为空。由于这是一台共享机器,您已经预料到人们偶尔会践踏彼此的 gems,因此让 rbenv 访问所有 gem 凭据对您来说可能是可以接受的...

直到它不是。您提到您“不想在同一台机器上保留两个副本”,但这比看起来要困难得多。每种编程语言都有略微不同的工具来避免 Dependency Hell ,但许多人坚持一种模式:每个代码项目都获取其所有依赖项的副本。在我的机器上,我至少安装了五个 Rails 副本 Bundler ,跨越两个或三个版本。我不担心磁盘空间,我很高兴我不必手动整理一千个依赖项。

关于ruby - rbenv 系统范围安装导致不安全操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479426/

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