系统级rbenv安装后多用户无法正常安装/卸载gems的问题咨询
系统级rbenv多用户共享gem安装/卸载权限解决方案
背景与问题
我们团队使用瘦客户端设备,多用户共用同一台机器。我完成了rbenv的系统级安装,执行命令如下:
cd /usr/local git clone git://github.com/sstephenson/rbenv.git rbenv chgrp -R staff rbenv chmod -R g+rwxXs rbenv
按照预期,staff组内的所有用户应该能正常安装gems,但实际测试中,两名属于该组的开发者执行gem install cheat时都遇到了权限错误:
~ % 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>'
尝试移除组粘滞位后,用户可以安装gems,但无法删除其他用户安装的gem包:
~ % chmod -R g-s 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
用户安装的gem目录默认归属个人用户组(比如map7、andre),而非staff组,导致其他staff用户没有修改权限。
解决方案
通过统一gems目录的归属和权限设置,让所有staff组用户都能安装、修改和删除gem:
# 进入对应ruby版本的gems目录 cd /usr/local/rbenv/versions/2.5.1/lib/ruby/gems/2.5.0 # 将gems目录及其所有内容的组设置为staff sudo chown -R :staff gems # 赋予staff组读写执行权限,其他用户只读 sudo chmod -R 775 gems # 设置组粘滞位,确保后续新安装的gem自动继承staff组 sudo chmod g+s gems
命令解释:
chown -R :staff gems:递归修改gems目录的组为staff,让所有组内用户拥有操作权限chmod -R 775 gems:设置目录权限为rwxrwxr-x,保证staff组用户可读写执行,其他用户仅可读chmod g+s gems:开启组粘滞位后,后续用户安装的gem目录会自动继承staff组权限,避免再次出现权限隔离问题
内容的提问来源于stack exchange,提问作者map7
相关产品推荐
相关产品推荐

