Là quyền của tôi cho / usr / local / đúng không?


87

Tôi đang sử dụng HomeBrew cho các nhu cầu cổng của mình (có vẻ như một chút sạch hơn so với MacPorts).

Tôi có thể cài đặt mà không cần sudoing (rất tuyệt), nhưng bước liên kết người đàn ông dường như yêu cầu nó ( /usr/local/share/man/man3được sở hữu bởi root).
Một hướng dẫn tôi tìm thấy gợi ý tôi đệ quy chown /usr/localbằng cách làm

sudo chown -R `whoami` /usr/local

Đây có phải là an toàn hay là một ý tưởng tồi ™?

Ngoài ra: quyền của tôi có đúng không?

$ pwd
/usr/local/share/man
$ ls -lah
total 32
drwxrwxr-x    8 root  staff   272B  4 Set 11:02 .
drwxrwxr-x    9 root  staff   306B 10 Set 11:27 ..
drwxr-xr-x    3 root  wheel   102B  4 Ago  2009 de
drwxrwxr-x  163 root  staff   5,4K 10 Set 11:27 man1
drwxr-xr-x   11 root  wheel   374B 10 Set 11:27 man3
drwxr-xr-x    7 ago   staff   238B 10 Set 11:39 man5
drwxr-xr-x   11 ago   staff   374B 10 Set 11:39 man7
-rw-r--r--    1 root  staff    13K  4 Set 11:02 whatis

5
Đây là cách Homebrew được sử dụng. Một số người có thể không đồng ý nhưng nhà phát triển chính nói phải làm mọi thứ theo cách đó.
Mike McQuaid

1
Thay thế tốt hơn một chút để chown của bạn : sudo chown -R :admin /usr/local. Bằng cách này, nó sẽ hoạt động tương tự cho bất kỳ người dùng quản trị viên nào của máy. Mặc dù bạn cũng có thể cần phải chạy sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+để đảm bảo nhóm có quyền truy cập ghi giống như người dùng.
Slipp D. Thompson

12
"Tôi sẽ sử dụng homebrew, nó cảm thấy sạch hơn macports. Ồ, hãy nhìn vào mớ quyền hạn không rõ ràng này. Tôi sẽ kiểm tra Stack Overflow. Ồ, đây là một bản hack nhanh chống lại các thực tiễn tốt nhất của Unix và chống lại những gì cập nhật hệ điều hành thử để thực thi. Hoàn hảo! ". Tháng sau: "Này, phần mềm độc hại này đã được cài đặt như thế nào?"
hmijail

Vấn đề tôi gặp phải với cách tiếp cận này là nó chỉ có nghĩa là tài khoản người dùng cài đặt Homebrew có thể sử dụng nó. Tôi có một máy Mac có nhiều tài khoản mà tôi sử dụng để tách biệt các dự án công việc với các dự án gia đình (ví dụ). Nếu tôi đăng nhập sai tài khoản, tôi không thể sử dụng cài đặt brew. Tôi đã đi theo con đường này để tránh những nguy hiểm khi sử dụng root nhưng tôi không tin đó là cách tiếp cận tốt nhất.
Kiết tường

@MikeMcQuaid Tôi thấy thật thú vị khi Homebrew cuối cùng đã nhận lỗi về điều này và trong phiên bản mới được phát hành một hoặc hai tuần trước, đã khôi phục các quyền mặc định thành / usr / local
oemb1905

Câu trả lời:


36

Thông thường tốt hơn là giữ quyền nghiêm ngặt nhất có thể. Giữ /usr/localquyền sở hữu bởi rootcó nghĩa là chỉ các quy trình chạy dưới dạng root/ sudo(hoặc yêu cầu người dùng quản trị viên thông qua hộp thoại ủy quyền của Apple) mới có thể ghi vào khu vực này. Vì vậy, quá trình tải xuống phải yêu cầu bạn nhập mật khẩu trước khi làm hỏng các tệp ở đó.

Nhưng như bạn nói, nó làm cho việc thêm các chương trình mới khó hơn.

Tôi ổn với việc chạy sudo, vì bạn cài đặt mọi thứ ít thường xuyên hơn chạy chúng nhưng bạn phải tin tưởng rằng quá trình xây dựng không thay đổi bất cứ điều gì cần thiết.

Nếu bạn muốn tránh sudo, tôi sẽ cài đặt Homebrew vào ~/usr/localvà thay đổi đường dẫn của bạn, manpath, v.v. để bao gồm các thư mục bên dưới.

Cách tốt hơn là tạo một người dùng khác nói, homebrewvà tạo một thư mục thuộc sở hữu của người dùng đó. Sau đó, cài đặt ở đó bằng cách sử dụng sudo -U homebrew. Những người dùng khác sẽ có lợi ích là không thể ghi đè lên bất kỳ tệp nào khác, vì chúng không chạy vì root các chương trình khác không thể ảnh hưởng đến homebrew. (Tôi lưu ý rằng Câu hỏi thường gặp về Homebrew gợi ý người dùng mới này nếu bạn ở trong "môi trường nhiều người dùng". Tôi sẽ nói rằng bất kỳ máy Unix nào bao gồm macOS đều là môi trường nhiều người dùng)

Tuy nhiên, như wiki Homebrew nói rằng các công thức nấu ăn không tìm thấy tất cả các trường hợp /usr/localvà thay thế chúng bằng thư mục đã chọn, tôi nghi ngờ chúng ta đang bị mắc kẹt /usr/local.


1
+1 để giữ cho các ủy quyền nghiêm ngặt, và thay đổi $PATH$MANPATHbao gồm các thư mục người dùng. Nếu các chương trình đã cài đặt không yêu cầu cài đặt toàn hệ thống, thì đó là một giải pháp thay thế tốt hơn nhiều.
zneak

3
+1 và câu trả lời được chấp nhận cho dịch vụ giữ quyền nghiêm ngặt nhất có thể. Làm brew doctor(đề nghị dưới đây) nói với tôi rằng tôi chỉ phải truy cập các thư mục người đàn ông chia sẻ ... đủ an toàn cho tôi.
Agos

1
Một giải pháp thỏa hiệp, ít nhất là cho những người chăm sóc bảo mật đủ để không chạy như người dùng Quản trị viên mọi lúc, là thay đổi quyền sở hữu và quyền của nhóm để chỉ Quản trị viên mới có thể ghi vào / usr / local. Xem câu trả lời của kenorb.
hmijail

2
@Mark Tôi thấy thú vị khi Homebrew cuối cùng đã nhận lỗi về điều này và trong phiên bản mới được phát hành một hoặc hai tuần trước, đã khôi phục các quyền mặc định thành / usr / local
oemb1905

48

Tôi cũng sử dụng Homebrew và có thể xác nhận rằng nó hoàn toàn an toàn. Trích dẫn trang Cài đặt trên Câu hỏi thường gặp về Homebrew chính thức :

Làm cho mình một ưu tiên và chọn /usr/local

  1. Nó dễ dàng hơn
    /usr/local/bin đã có trong của bạn PATH.

  2. Nó dễ dàng hơn Hàng
    tấn tập lệnh xây dựng bị phá vỡ nếu phần phụ thuộc của chúng không nằm trong / usr hoặc / usr / local. Chúng tôi sửa lỗi này cho các công thức Homebrew (mặc dù chúng tôi không luôn kiểm tra nó), nhưng bạn sẽ thấy rằng nhiều tập lệnh thiết lập RubyGems và Python bị hỏng, đó là điều nằm ngoài tầm kiểm soát của chúng tôi.

  3. An toàn,
    Apple đã tuân thủ POSIX và để lại thư mục này cho chúng tôi. Điều đó có nghĩa là không có /usr/localthư mục theo mặc định, vì vậy không cần phải lo lắng về việc làm rối các công cụ hiện có.

Nếu bạn có kế hoạch cài đặt đá quý phụ thuộc vào bia, hãy tiết kiệm cho mình một loạt rắc rối và cài đặt /usr/local!

Nó không phải là tầm thường để nói với gem để tìm trong các thư mục không chuẩn cho các tiêu đề và dylib. Nếu bạn chọn /usr/local, mọi thứ đều hoạt động!

Tôi sẽ chỉ nói thêm rằng làm mọi thứ với quyền root là một ý tưởng rất tồi , vì vậy chowning /usr/localkhông chỉ có vẻ hợp lý với tôi (nó không phải là một hệ thống hướng dẫn trên OSX), mà còn lành mạnh .

Quyền của bạn không chính xác (chưa). Chỉ cần chạy lệnh bạn đã liệt kê và bạn sẽ ổn thôi.

Nếu bạn có vấn đề khác hãy nhớ, brew doctorcó thể giúp bạn!


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
bmike

7
Trò chuyện không còn nữa, thật đáng tiếc. Vì vậy, có nguy cơ lặp lại lịch sử, tôi sẽ để lại nhận xét của mình ở đây: rằng việc này được thực hiện không có nghĩa là điều này an toàn.
hmijail

4
Ý chính của biểu đồ là mặc dù đây là những gì Homebrew cho thấy có nhiều lý do là tại sao điều này lại sai
Đánh dấu

1
brew doctorchỉ đơn giản là tuyệt vời.
Utku

5
@Carmine Paolino Tôi thấy thật thú vị khi Homebrew cuối cùng đã nhận lỗi về điều này và trong phiên bản mới được phát hành một hoặc hai tuần trước, đã khôi phục các quyền mặc định thành / usr / local
oemb1905

9

Nếu bạn đang sử dụng Homebrew, bạn nên cấp quyền ghi cho nhóm cụ thể (hoặc adminhoặc staff), để các tệp có thể được chia sẻ giữa những người dùng trong nhóm đó.

Ví dụ:

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

Sau đó chỉ định người dùng nên có quyền truy cập vào brewlệnh cho nhóm đó (kiểm tra các nhóm của bạn thông qua id -Gn:).

Sau đó, khi làm việc với brew, không chạy nó với sudo.

Khi vẫn gặp brew doctorsự cố về quyền, hãy chạy để khắc phục sự cố.


+1 để đưa ra giải pháp thực tế, hoạt động tốt hơn, ngay cả khi chưa thực sự kết thúc. Ví dụ: thêm người dùng vào nhóm quản trị viên ở cấp độ BSD? Bạn có thấy lộn xộn với khái niệm người dùng Admin của OS X không?
hmijail

Để ghi lại, tôi đã làm theo các hướng dẫn này, nhưng chỉ sử dụng người dùng Quản trị viên GUI OS X hiện có của tôi thay vì thêm bất kỳ ai vào bất kỳ nhóm nào trong CLI. Nó hoạt động: để có thể chạy các lệnh brew, trước tiên tôi phải làm su myAdminUser, và sau đó mọi thứ hoạt động như dự định. Nhưng tất nhiên, giải pháp này sẽ không cung cấp bất kỳ sự bảo mật nào cho những người dù sao cũng đang chạy một người dùng Admin.
hmijail

Đây có lẽ là cách tốt nhất để đi, tôi đồng ý với @kenorb
pixel 67

7

Đối với giá trị của nó, /usr/localOS X không được coi là thư mục "hệ thống" và trên bản cài đặt Snow Leopard hoàn toàn mới, thư mục đó trống.

Bất kỳ nội dung thuộc sở hữu gốc nào trong thư mục đó là kết quả của sudo make installphần mềm khác hoặc cung cấp mật khẩu của bạn sau khi nhấp đúp vào mục .pkgmuốn chuyển nội dung vào /usr/local.

Owning /usr/localđã "làm việc cho tôi" trên 2 máy trong hơn một năm.

Một điều đáng tiếc là nếu bạn đã cài đặt MySQL (không sử dụng Homebrew) và truy cập các tệp của nó, thì có lẽ nó sẽ không thể nhìn thấy cơ sở dữ liệu của nó nữa (vì vậy bạn phải truy cập lại chúng cho bất kỳ người dùng nào mà MySQL đang chạy .)


5
gcc và các công cụ phát triển khác tự động tìm trong / usr / local để nó ảnh hưởng đến hệ thống
Đánh dấu

11
Vấn đề không phải là thư mục "hệ thống"; đó là một thư mục "toàn hệ thống". Ngay cả khi không có gì ở đó, /usr/local/binvẫn có $PATHgiá trị mặc định và bất cứ thứ gì bạn đặt ở đó cũng có thể được sử dụng bởi những người dùng khác và nên được tin cậy . Nếu toàn bộ /usr/local/thư mục có cùng quyền /usr/local/share/manhiện có trong thiết lập của OP, bất kỳ ai cũng có thể đi và thay đổi bất kỳ nhị phân nào bằng một tập lệnh rm -rf ~.
zneak

1
quá rủi ro: có khả năng tôi sẽ cài đặt MySQL sớm hay muộn
Agos

2
@Agos: bạn luôn có thể cài đặt MySQL với HomeBrew, trong trường hợp đó bạn sẽ không gặp vấn đề gì :)
Carmine Paolino

1
@Agos Không mạo hiểm chút nào. Thận trọng chỉ áp dụng nếu bạn đã cài đặt MySQL trước Homebrew. Nếu bạn làm điều đó sau đó các quyền trên /usr/localsẽ ổn. (Nhưng dù sao bạn cũng có thể sử dụng Postgres. :))
Marnen Laibow-Koser

6

Như trong Homebrew 1.0.0:

Homebrew không còn cần phải có quyền sở hữu / usr / local. Nếu bạn muốn bạn có thể trả lại / usr / local cho quyền sở hữu mặc định của nó với: sudo chown root: wheel / usr / local


1
Tôi hiện đang cập nhật sử dụng Brew brew update, vẫn yêu cầu quyền sở hữu /usr/local. Tôi sẽ thử khôi phục các quyền sau đó.
Joshua Pinter

Đây thực sự là thông tin tuyệt vời! Tôi đặt perm theo quy định của Homebrew (<1.0) và sau khi cập nhật, nó đã đưa ra các hướng dẫn về cách đặt lại chúng.
mortona42

0

Tôi nghĩ người dùng có quyền ghi vào /usr/local- sau tất cả, điều đó có nghĩa là bạn không sử dụng sudotrên mọi tập lệnh xây dựng. Tôi không thích ý tưởng của một người dùng thông thường sở hữu /usr/local . Tôi muốn có quyền root (hoặc tương tự) /usr/local, nhưng thay đổi quyền để người dùng (hoặc ít nhất là một số nhóm đặc quyền) có thể viết thư cho nó. Đó dường như là cách tiếp cận đúng về mặt khái niệm.


7
Vấn đề ở đây là /usr/local/binrất có thể đứng trước $ PATH cho hầu hết người dùng. Làm cho thư mục thế giới có thể ghi được mở ra rất nhiều lỗ hổng bảo mật theo cách đó.
nohillside

@patrix Vậy thay đổi đường dẫn. :) Nếu bạn có các tập lệnh có lỗ hổng bảo mật do đường dẫn lệnh mơ hồ, tôi sẽ đổ lỗi cho tập lệnh chứ không phải quyền của bạn - các lệnh được gọi trong tập lệnh thường phải đủ điều kiện cho chính xác lý do này. Dù sao, không có giải pháp nào tốt hơn: bạn cung cấp cho tài khoản quản trị viên của mình một ô không an toàn hoặc bạn chạy tất cả các tập lệnh xây dựng của mình sudohoặc bạn cung cấp cho một số người dùng quyền viết /usr/local. Tôi sẽ coi thứ ba là ít rủi ro nhất ... trừ khi bạn biết cách tốt hơn.
Marnen Laibow-Koser

Hừm. Nghĩ về điều này nhiều hơn, có thể một cách tốt hơn sẽ là Homebrew làm những gì RVM làm theo mặc định: cài đặt mọi thứ vào ~/brewhoặc một số thứ như vậy. Tuy nhiên, vấn đề là không giống như Ruby, khá khép kín, rất nhiều tiện ích * nix mong muốn tìm thấy nhau trong /usr/local...
Marnen Laibow-Koser

3
Tôi đã bỏ qua việc đề cập rằng tôi /usr/localkhông thể ghi được trên thế giới: thay vào đó, tôi có một nhóm đáng tin cậy homebrew(không chỉ quản trị viên) có quyền ghi vào nó (các quyền mở rộng như 0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inheritrock hoàn toàn). Đây là sự thỏa hiệp tốt nhất mà tôi có thể tìm ra: không có sudocác tập lệnh xây dựng, nhưng một số quyền kiểm soát /usr/local.
Marnen Laibow-Koser

@ MarnenLaibow-Koser Tôi rất muốn thấy một lời giải thích sâu hơn về phương pháp này (tạo ra một nhóm người dùng đáng tin cậy có quyền ghi vào /usr/local). Thực hiện nhiều thao tác truy cập trên SO và các trang web khác, thấy các đối số lại: chuyển Homebrew vào thư mục nhà của người dùng so với giữ lại /usr/local, thay đổi chủ sở hữu và / hoặc nhóm /usr/local, hoặc vì vậy, rất khó để biết liệu có bất kỳ giải pháp phổ biến được chấp nhận. Bạn có một bài viết blog hoặc bài viết về điều này, hoặc bạn có thể giải thích sâu hơn ở đâu đó?
Gabriel L.
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.