自制权限和需要酝酿更新的多个用户


79

我正在使用Homebrew来管理Lion上的软件包安装(实际上是Lion Server,但这无关紧要)

Homebrew安装在一个用户下。现在,另一个用户想要添加一个软件包,而Homebrew不满意:

$ brew update
fatal: Unable to create '/usr/local/.git/index.lock': Permission denied
Error: Failure while executing: git checkout -q master

这算不好吗?我认为使用/usr/local/安装的好处之一是不需要sudo。但显然我们做到了。

所有需要修改Homebrew的用户都是admin组的成员。因此,我可能chmod -R g+w /usr/local/但怕这会吓到别人或造成安全问题?!?

忠告?

$ ls -al /usr/local/.git/
total 432
drwxr-xr-x  14 ladmin  admin     476 Feb 24 11:48 .
drwxrwxr-x  14 root    admin     476 Feb  9 15:27 ..
-rw-r--r--   1 ladmin  admin      94 Feb 24 11:48 FETCH_HEAD
-rw-r--r--   1 ladmin  admin      23 Feb 24 11:48 HEAD
-rw-r--r--   1 ladmin  admin      41 Feb  9 15:28 ORIG_HEAD
drwxr-xr-x   2 ladmin  admin      68 Feb  9 15:27 branches
-rw-r--r--   1 ladmin  admin     218 Feb  9 15:27 config
-rw-r--r--   1 ladmin  admin      73 Feb  9 15:27 description
drwxr-xr-x  12 ladmin  admin     408 Feb  9 15:27 hooks
-rw-r--r--   1 ladmin  admin  200272 Feb 24 11:48 index
drwxr-xr-x   3 ladmin  admin     102 Feb  9 15:27 info
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 logs
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 objects
drwxr-xr-x   5 ladmin  admin     170 Feb  9 15:27 refs

Answers:


100

这算不好吗?我认为使用/ usr / local /进行安装的好处之一是不需要sudo。但显然我们做到了。

默认情况下,自制软件会为单用户访问设置自己/usr/local。因此,您需要打开目录树的权限,以便由多个人来管理它。

人们不需要在这里运行sudo来管理自制软件。您只需要更改一些权限。由于您已经拥有:

所有需要修改Homebrew的用户都是admin组的成员。

您还需要做两件事:

  1. 确保下的一切都/usr/local属于这个组admin; 和
  2. 确保小组中的任何人都admin可以写信给/usr/local

在这种情况下,要进行的更改是:

chgrp -R admin /usr/local
chmod -R g+w /usr/local
chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

并且该admin组中的任何用户都应该能够管理计算机上的自制程序安装。如果您需要将用户添加到管理组,可以这样完成:

 dseditgroup -o edit -a <username> -t user admin

(该用户将需要再次登录才能获得特权)。

为了使计算机更安全,您可能需要考虑创建自己的Homebrew 分支,并让本地的homebrew git存储库指向本地分支。这样一来,您就可以为您的环境自定义Homebrew并控制人们可以使用该brew命令安装的软件包的版本。由多个人进行安装,您可能会遇到版本问题或依赖性问题。


1
我遇到了同样的问题,并按建议更改了组所有权和组权限。brew doctor仍然抱怨说,例如,/usr/local/include即使我可以手动验证我可以在此处写入文件(例如使用echo "hello" > /usr/local/include/testfile),也无法写。我是管理组的成员。有调试的想法吗?
mgd 2012年

2
该解决方案对我有用,但是不能解决Homebrew的本地缓存。我也建议跑步:chmod -R g+w /Library/Caches/Homebrew
德鲁·达拉·阿布拉姆斯


2
看来Homebrew现在已将缓存过渡到当前用户的目录。刚刚看到:==>在进行brew更新时,将/ Library / Caches / Homebrew迁移到/Users/bluechain.admin/Library/Caches/Homebrew...。如果我正确地解释了这一点,则意味着我们不再需要为Homebrew拥有一个可全局写入的缓存目录。
Endareth '17

对于有此问题的高级Sierra用户,您现在需要使用以下sudo chown -R $(whoami) $(brew --prefix)/*命令:而不是上面的命令。从这里
Jeff Kranenburg

7

您可以通过管理员组或任何其他用户组为多个用户启用自制权限。这是一个略微扩展的配方,用于配置此功能:

该组需要管理本地自制安装目录。因此,将/ usr / local分配给admin组(或您的首选组)并启用组写权限:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

该组还需要在/ Library / Caches / Homebrew上对自制软件的公式和源文件的本地缓存的权限:

chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

如果在从多个帐户使用自制软件时遇到其他类似的权限问题,请注意有问题的路径并考虑尝试相同的方法。

Leif Hanack在博客上发布了一个类似的解决方案,他为此目的创建和配置了专用的用户组brew

-更新2015-08-20

最近,我再次使用此答案来设置具有自制访问权限的访客帐户。为了从第二个管理员帐户使用Cask,我还必须运行以下命令:

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask

4

我只是在评论接受的答案(但还没有这样的声誉。)

作为Caskroom.io的用户,我还建议添加:

sudo chown -R admin /opt/homebrew-cask
sudo chmod -R g+w /opt/homebrew-cask
sudo chmod -R g+w  /Library/Caches/Homebrew/

因为cask是自制程序非常有用的扩展,因此将其所有文件都放入 /opt/homebrew-cask


1
通过/opt我猜你的意思是/usr/local?就像/opt在最近的OS X安装中不存在的那样,即使在自制安装之后也是如此。
2015年

2016年6月,Homebrew-Cask(啤酒扩展)将其Caskroom文件夹的默认位置从/usr/local(或更准确地说$(brew --prefix))从移到了该位置,/opt/homebrew-cask因此该答案现在尚无定论,但在编写时仍然有效。请参阅移动默认的机房位置#21603

1

您需要授予路径许可。在命令行中运行它,你会很好的。它为我工作:

须藤chown -R $ USER / usr / local


0

我会投票赞成设置组权限-在我看来,这正是它的用途,不应造成安全问题。

  • 不要使用sudo。

tl; dr Sudo很危险,因此您始终没有安装sudo就安装了TextMate.app。

Homebrew设计为无需使用sudo即可工作。您可以决定使用它,但我们强烈建议您不要使用它。如果您使用过sudo并遇到错误,则可能是原因。请不要提交错误报告,除非您可以在不使用sudo的情况下从头重新安装Homebrew之后重新生成它。


因此,您的建议是sudo chmod -R g+w /usr/local/
Meltemi

是的,但是您可能希望使用以下方法之一征求第二意见:IRC(irc://irc.freenode.net/#machomebrew);邮件列表(homebrew@librelist.com); Twitter(twitter.com/machomebrew
iolsmit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.