Quyền hạn homebrew & nhiều người dùng cần để cập nhật


79

Tôi đang sử dụng Homebrew để quản lý cài đặt gói trên Lion (Lion Server thực sự nhưng điều này không quan trọng) .

Homebrew đã được cài đặt dưới một người dùng. Bây giờ một người dùng khác muốn thêm gói và Homebrew không hài lòng:

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

Đây có được coi là xấu? Tôi nghĩ một trong những lợi thế của việc sử dụng /usr/local/cho các bản cài đặt của bạn là bạn không cần sudo. Nhưng rõ ràng chúng tôi làm.

Tất cả người dùng cần sửa đổi Homebrew là thành viên của nhóm quản trị viên . Vì vậy, tôi có thể chmod -R g+w /usr/local/nhưng sợ điều này sẽ làm hỏng một cái gì đó hoặc tạo ra các vấn đề bảo mật?!?

Lời khuyên?

$ 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

Câu trả lời:


100

Đây có được coi là xấu? Tôi nghĩ một trong những lợi thế của việc sử dụng / usr / local / cho các bản cài đặt của bạn là bạn không cần sudo. Nhưng rõ ràng chúng tôi làm.

Homebrew, theo mặc định, tự thiết lập để truy cập một người dùng /usr/local. Vì vậy, bạn cần phải mở các quyền trên cây thư mục để nó được quản lý bởi nhiều người.

Mọi người không cần phải chạy sudo ở đây để quản lý homebrew. Bạn chỉ cần thay đổi một số quyền. Vì bạn đã có:

Tất cả người dùng cần sửa đổi Homebrew là thành viên của nhóm quản trị viên.

Bạn cần làm thêm hai việc:

  1. Đảm bảo mọi thứ /usr/localthuộc về nhóm admin; và
  2. Hãy chắc chắn rằng bất cứ ai trong nhóm admincó thể viết cho bất cứ điều gì dưới /usr/local.

Trong trường hợp này, những thay đổi cần thực hiện là:

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

Và bất kỳ người dùng nào trong adminnhóm cũng có thể quản lý cài đặt homebrew trên máy. Nếu bạn cần thêm người dùng vào nhóm quản trị viên, điều này có thể được thực hiện như thế này:

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

(người dùng đó sẽ cần phải đăng nhập lại để có các đặc quyền được cấp).

Đối với sự tỉnh táo trên máy, bạn có thể muốn xem xét việc tạo một ngã ba Homebrew của riêng bạn và có kho lưu trữ git homebrew cục bộ của bạn đến ngã ba cục bộ. Điều đó cho phép bạn tùy chỉnh Homebrew cho môi trường của bạn và kiểm soát các phiên bản của gói mà mọi người có thể cài đặt bằng brewlệnh. Với nhiều người thực hiện cài đặt, bạn có thể gặp phải các vấn đề về phiên bản hoặc vấn đề phụ thuộc.


1
Tôi có cùng một vấn đề và đã thay đổi quyền sở hữu nhóm và quyền của nhóm như được đề xuất. brew doctorvẫn phàn nàn rằng ví dụ /usr/local/includelà không thể ghi được mặc dù tôi có thể xác minh rằng tôi có thể ghi vào một tệp ở đây (ví dụ như sử dụng echo "hello" > /usr/local/include/testfile). Tôi là thành viên của nhóm quản trị. Bất kỳ ý tưởng để gỡ lỗi?
mgd

2
Giải pháp này hiệu quả với tôi, nhưng nó không giải quyết được bộ đệm cục bộ của Homebrew. Tôi cũng đề nghị chạy:chmod -R g+w /Library/Caches/Homebrew
Drew Dara-Abrams

Tôi tìm thấy một bài viết trên blog về nó blog.strug.de/2012/06/my-homebrew-multi-user-setup và thích nghi một kịch bản từ đó raw.githubusercontent.com/steshaw/shelly/master/bin/...
Steven Shaw

2
Có vẻ như Homebrew hiện đã chuyển bộ đệm sang thư mục người dùng hiện tại. Chỉ thấy: ==> Di chuyển / Thư viện / Bộ nhớ cache / Homebrew đến /Users/bluechain.admin/L Library / Caches / Homebrew ... khi thực hiện cập nhật bia. Nếu tôi diễn giải điều này một cách chính xác, điều này có nghĩa là chúng ta không còn phải lo lắng về việc có một thư mục bộ đệm có thể ghi trên toàn cầu cho Homebrew.
Kết thúc

Đối với người dùng High Sierra có vấn đề này, bây giờ bạn cần sử dụng điều này: sudo chown -R $(whoami) $(brew --prefix)/*thay vì các lệnh ở trên. Nhận nó từ đây
Jeff Kranenburg

7

Bạn có thể kích hoạt quyền homebrew cho nhiều người dùng thông qua nhóm quản trị viên hoặc thông qua bất kỳ nhóm người dùng nào khác. Đây là một công thức hơi mở rộng để cấu hình này:

Nhóm cần quản trị thư mục cài đặt homebrew cục bộ. Vì vậy, gán / usr / local cho nhóm quản trị viên (hoặc nhóm ưa thích của bạn) và cho phép quyền ghi nhóm:

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

Nhóm cũng cần quyền cho bộ đệm công thức và tệp nguồn cục bộ của homebrew tại / Library / Caches / Homebrew :

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

Nếu bạn gặp phải các vấn đề về quyền tương tự khác trong khi sử dụng homebrew từ nhiều tài khoản, hãy lưu ý đường dẫn vi phạm và xem xét thử phương pháp tương tự.

Leif Hanack đã blogged một giải pháp tương tự , nơi ông tạo và cấu hình một nhóm người dùng chuyên dụng brew cho mục đích này.

- Cập nhật 2015-08-20

Gần đây tôi đã sử dụng câu trả lời này một lần nữa để thiết lập tài khoản khách với quyền truy cập homebrew. Để sử dụng Cask từ tài khoản quản trị viên thứ hai, tôi cũng phải chạy các lệnh sau:

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

4

Tôi chỉ bình luận về câu trả lời được chấp nhận (nhưng chưa có tiếng tăm về điều đó.)

Là người dùng của Caskroom.io , tôi cũng khuyên bạn nên thêm:

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

kể từ thùng, một phần mở rộng cực kỳ hữu ích cho homebrew, đặt tất cả các tệp của nó vào /opt/homebrew-cask


1
Theo /opttôi đoán bạn có nghĩa là /usr/local? Như /optkhông tồn tại trên các bản cài đặt OS X gần đây, ngay cả sau khi cài đặt homebrew.
forapes

Vào tháng 6 năm 2016, Homebrew-Cask (một phần mở rộng bia) đã chuyển vị trí mặc định cho thư mục Caskroom của nó sang /usr/local(hoặc chính xác hơn $(brew --prefix)) từ /opt/homebrew-caskđó câu trả lời này hiện đang được đưa ra, nhưng nó có giá trị khi nó được viết. Xem Di chuyển vị trí thùng mặc định # 21603
zen

1

Bạn cần phải cho phép đường dẫn. chạy này trong dòng lệnh và bạn sẽ ổn để đi. Nó làm việc cho tôi:

sudo chown -R $ USER / usr / địa phương


0

Tôi sẽ bỏ phiếu để thiết lập sự cho phép của nhóm - và đối với tôi, dường như đó chỉ là những gì nó tồn tại và không nên tạo ra vấn đề bảo mật.

  • Đừng dùng sudo.

tl; dr Sudo rất nguy hiểm và bạn đã cài đặt TextMate.app mà không cần sudo.

Homebrew được thiết kế để hoạt động mà không sử dụng sudo. Bạn có thể quyết định sử dụng nó nhưng chúng tôi khuyên bạn không nên làm như vậy. Nếu bạn đã sử dụng sudo và gặp lỗi thì rất có thể đó là nguyên nhân. Vui lòng không gửi báo cáo lỗi trừ khi bạn có thể sao chép nó sau khi cài đặt lại Homebrew từ đầu mà không sử dụng sudo.


Vì vậy, lời khuyên của bạn sẽ là sudo chmod -R g+w /usr/local/gì?
Meltemi

Có, nhưng bạn có thể muốn hỏi ý kiến ​​thứ hai bằng một trong những điều sau: IRC (irc: //irc.freenode.net/#machomebrew); Danh sách gửi thư (homebrew@librelist.com); Twitter ( twitter.com/machomebrew )
iolsmit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.