map*_*ap7 7 ruby permissions rubygems rbenv
我们在公司使用瘦客户端,我们有很多用户使用同一个盒子.我按照以下网站上的说明安装了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
Run Code Online (Sandbox Code Playgroud)
通过运行最后一行,我们应该能够像系统的任何用户一样安装gem,这是"staff"组的一部分.我们有两个开发人员是该组的一部分,他们都不能安装宝石.
我们得到错误;
~ % 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
Run Code Online (Sandbox Code Playgroud)
如果我从组中删除粘性位然后他们可以添加宝石,但如果有人试图删除由其他人安装的宝石,这将失败;
~ % chmod -R g-s rbenv
Run Code Online (Sandbox Code Playgroud)
如何允许多个用户从系统范围的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
Run Code Online (Sandbox Code Playgroud)
我发现的解决方案是
: 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
Run Code Online (Sandbox Code Playgroud)
小智 2
我查看了 RubyGems 的源代码config_file。您遇到的错误是由尝试读取的文件操作引起的(此处$HOME/.gem/credentials是硬编码的)。
基于此,您可以尝试授予 rbenv 读取$HOME/.gem/credentials某个用户的权限,看看是否允许该用户安装 gem。
然而,向所有用户公开任何所谓的“凭据”似乎是一个危险的提议。
我的理解是,如果您尝试发布 gems ,凭据文件只需要包含真实凭据,但对于大多数安装来说可以为空。由于这是一台共享机器,您已经期望人们偶尔会践踏彼此的宝石,因此授予 rbenv 访问所有宝石凭证的权限对您来说可能是可以接受的......
直到它不再是为止。您提到您“不想在同一台机器上保留两个副本”,但这比看起来更困难。每种编程语言都有稍微不同的工具来避免依赖地狱,但许多语言都坚持一种模式:每个代码项目都会获取其所有依赖项的副本。在我的机器上,我至少有Bundler安装的五个 Rails 副本,跨两个或三个版本。我不担心磁盘空间,我只是很高兴我不必手动排序上千个依赖项。
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |