如何在多用户MacOS Sierra安装程序上使用Homebrew

时间:2017-01-24 22:58:53

标签: macos permissions homebrew multi-user

我有一台由两位工程师共享的Mac。两者都有单独的用户帐户。两者都需要偶尔运行brew updatebrew install...

如何在不出现错误的情况下进行设置: /usr/local must be writable!

是的,我可以UserA每次想要使用brew时都接管/usr/local的权限(与UserB相同),但这似乎有很多不必要的麻烦

9 个答案:

答案 0 :(得分:57)

您还可以将群组权限更改为管理员或您的两个用户所在的其他群组:

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

原始来源:https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

<强>更新

在macOS High Sierra中,您无法更改/usr/local的所有者,群组或权限。因此,您必须更改子文件夹的组和权限:

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

更新 2018年9月,High Sierra 10.13.6

  1. 确定brew前缀的路径,即。用于存储与使用homebrew相关的文件的路径
  2. 检查系统中需要访问brew的所有用户是否位于管理
  3. 可选如果用户需要访问brew ,请将用户添加到管理组
      

    需要访问/权限才能使用 sudo 命令

  4. 将brew前缀路径设置为 admin
  5. 递归拥有
  6. 将brew前缀路径设置为 admin 组中的所有用户可递归写入
  7. 验证brew前缀的权限
  8. brew
  9. echo $(brew --prefix)
    echo $(groups $(whoami))
    sudo dseditgroup -o edit -a $(whoami) -t user admin
    sudo chgrp -R admin $(brew --prefix) 
    sudo chmod -R g+rwX $(brew --prefix)
    ls -lah $(brew --prefix)
    

答案 1 :(得分:9)

Hombrew在/usr/local中安装软件包,没有打破它安装的许多软件包,你无能为力。为所有用户添加读写权限,如下所示:

sudo chmod -R +rw /usr/local

请注意,由于这是一个系统文件夹,因此所有用户都将共享相同的brew安装。一个用户可以删除其他人已安装的软件包,依此类推。所以一定要协调以避免问题。

答案 2 :(得分:5)

macOS Mojave 10.14的解决方案

这是user4815162342的答案的编辑版本,开箱即用对我来说不起作用。

  1. 在“系统偏好设置”中,转到“用户和组”,单击左下角的锁定符号以解锁用户/组的创建,然后创建一个名为brew-usergroup的新组。将所有使用brew的用户添加到组中(如附件中来自德国macOS的屏幕截图)。

enter image description here

  1. 在终端中,执行以下操作:

    echo $(brew --prefix)
    echo $(groups $(whoami))
    sudo dseditgroup -o edit -a $(whoami) -t user brew-usergroup
    sudo chgrp -R brew-usergroup $(brew --prefix)/*
    sudo chmod -R g+rwX $(brew --prefix)/*
    ls -lah $(brew --prefix)
    

    请注意,这不再更改brew文件夹的权限(如在其他答案中一样),它更改了brew文件夹的子文件夹/文件。 brew install现在应该可以正常工作了,没有错误。

答案 3 :(得分:1)

最好的解决方案是添加sudoers记录,以允许非特权用户“ joe”以管理用户身份执行任何与“ brew”相关的命令。

在/etc/sudoers.d/joe中创建一个文件,内容如下:

joe ALL=(administrator) NOPASSWD: /usr/local/bin/brew

然后您可以像这样运行brew:

sudo -Hu administrator brew install <smth>

答案 4 :(得分:1)

上面的方法工作正常,但是如果您希望新文件自动继承那些权限,请设置一个继承的ACL(否则,只有倒瓶的用户才能删除它)。找到的提示可以在这里进行:https://gist.github.com/nelstrom/4988643

root运行一次(假设“ admin”组的所有用户都应具有访问权限):

cd /usr/local
chmod -R +a "group:admin allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" *
chgrp -R admin *
chmod -R g+rwX *
ls -lae .

-e上的ls显示ACL。

答案 5 :(得分:1)

如果您没有安装命令行工具:

xcode-select --install

根据brew文档,您可以使用以下命令将其安装在主文件夹中:

  • MacOS Mojave和更早版本:
cd $HOME
mkdir homebrew && curl -L 'https://github.com/Homebrew/brew/tarball/master' | tar xz --strip 1 -C homebrew
echo 'export PATH="$HOME/homebrew/bin:$PATH"' >> .bash_profile
exit
  • 在MacOS Catalina之后:
cd $HOME
mkdir homebrew && curl -L 'https://github.com/Homebrew/brew/tarball/master' | tar xz --strip 1 -C homebrew
echo 'export PATH="$HOME/homebrew/bin:$PATH"' >> .zprofile
exit

然后,您可以运行brew doctor以确保安装正确

答案 6 :(得分:0)

以上提到的每个答案对于High Sierra都是错误的。除了莫哈韦沙漠魔鬼一个,我都尝试过。

正确的答案是通过签出其git repo并将其brew二进制文件添加到您的路径中,从而在用户本地使用brew安装。不要对您的主要用户或初次用户Brew安装的所有权或权限感到困惑。

您将需要Homebrew / homebrew-core和Homebrew / brew。简单地说:

  

cd $ HOME && git clone Homebrew / homebrew-core && git clone Homebrew / brew

接下来,在此shell实例中更改此PATH实例的路径,并在.bashrc / .zshrc中添加此路径,然后更改其路径,然后重新启动(退出并重新输入)登录shell,以进行后续步骤:

  

export PATH = $ HOME / brew / bin:$ PATH

然后

  

酿造和酿造啤酒的医生

您实际上需要安装该用户可用的所有Brew软件包,因为它们现在与计算机上的第一个Brew用户具有单独的副本。

例如。

  

简单安装htop

答案 7 :(得分:0)

这是 Homebrew 维护者的 official answer

除此之外,我建议再做 3 个步骤。假设您有一个拥有 niki 目录的管理员用户 /usr/local/*,并且您以另一个管理员用户 niki_at_work 的身份登录。

  1. 使用以下内容创建 ~/brew.sh
#!/bin/bash
comm="brew $@"
su niki -c "$comm"
  1. chmod +x ~/brew.sh
  2. 将此别名添加到 .zshrc 或等效项:alias brew="~/brew.sh"

现在您可以像往常一样从 niki_at_work 冲泡(它会询问 niki 的密码):

brew update
brew install swiftlint

如果您想为 brew ex 使用专门的管理员用户。 brewadmin 你应该首先 chown brew dirs: sudo chown -R brewadmin:admin /usr/local/*

答案 8 :(得分:-1)

上述解决方案对我不起作用。但是运行下面的命令对我有用。

sudo chown -R $(whoami) $(brew --prefix)/*

来源:https://github.com/Homebrew/brew/issues/3228#issuecomment-333858695