Установка всей системы rbenv приводит к небезопасной работе - PullRequest
0 голосов
/ 23 мая 2018

Мы используем тонких клиентов в нашей компании, и у нас много пользователей, использующих одну и ту же коробку.Я установил 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

ЗапустивВ последней строке мы должны установить 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

Если я удаляю липкий бит из группы, тогда они могут добавлять гемыно если кто-то попытается удалить гем, установленный кем-то другим, это не получится;

~ % chmod -R g-s rbenv

Как разрешить нескольким пользователям устанавливать / удалять гемы из общесистемной установки rbenv?

Обновление

Вот пример установки в каталоге /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

1 Ответ

0 голосов
/ 07 июня 2018

Я взглянул на исходный код RubyGems config_file.Ошибка, с которой вы сталкиваетесь, вызвана этой файловой операцией , пытающейся прочитать $HOME/.gem/credentials (жестко здесь ).

Исходя из этого, выможет попытаться дать rbenv разрешение на чтение $HOME/.gem/credentials для одного пользователя и посмотреть, позволяет ли это пользователю установить гем.

Однако предоставление всего, что называется «учетными данными», всем пользователям кажется опасным предложением.

Насколько я понимаю, файл учетных данных должен содержать только реальные учетные данные, если вы пытаетесь опубликовать гемы , но может быть пустым для большинства установок.Поскольку это общая машина, вы уже ожидаете, что люди будут время от времени топтать друг друга, поэтому предоставление rbenv доступа ко всем учетным данным gem может быть приемлемым для вас ...

Пока это не так.Вы упомянули, что «не хотите хранить две копии на одном компьютере», но это сложнее, чем кажется.У каждого языка программирования есть немного разные инструменты для избежания Dependency Hell , но многие придерживаются одного шаблона: каждый проект кода получает свою копию всех своих зависимостей.На моей машине установлено не менее пяти копий Rails, установленных Bundler , в двух или трех версиях.Я не беспокоюсь о дисковом пространстве, я просто счастлив, что мне не нужно вручную разбирать тысячи зависимостей.

...