Làm cách nào để chạy Homebrew với quyền root?


11

Nhiều năm trước, bạn có thể thoát khỏi việc chạy brewbằng root chỉ bằng cách truy cập brewvào root, nhưng họ đã loại bỏ tính năng đó. Vì vậy, trong Homebrew 1.1.6, tôi đã từng chỉnh sửa /usr/local/Homebrew/Library/Homebrew/brew.shđể xóa kiểm tra gốc (công cụ kiểm tra đó là "cực kỳ nguy hiểm") để tôi có thể chạy brewnhư root.

Phiên bản mới hơn của Homebrew vẫn hoạt động với điều đó nhưng vẫn hoàn nguyên lại brew.shtệp mỗi lần sau khi tôi chạy brew, ngay cả khi tôi chmod 500. Tôi có thể viết một kịch bản để thay đổi nó sau đó chạy brewtự động, nhưng tôi không chắc liệu nó có luôn hoạt động không và không muốn có cơ hội. Có ai tìm thấy một phương pháp khác để chạy Homebrew với quyền root không?


3
Vì tò mò, tại sao bạn muốn chạy brewbằng root? Ngoài ra, sudokhông đủ cho mục đích của bạn?
Allan

2
@ ALLan sudokhông chạy nó dưới quyền root và nó cũng gây ra lỗi "cực kỳ nguy hiểm" tương tự. Tôi muốn chạy với quyền root vì nó có vấn đề khi cài đặt các gói nhất định, đặc biệt là nếu mọi thứ được cài đặt không thông qua Homebrew (ví dụ thông qua pip). Tôi đã đi xuống tuyến đường đó nhiều lần. Thêm vào đó, nó không hoạt động đúng cho nhiều người dùng mà không có cách giải quyết khác trừ khi tôi cài đặt mọi thứ như root.
sudo

$ su -> $ brew whateveryouwant?
StrawHara

1
Xây dựng một gói phần mềm rootlà rủi ro. Ngay cả khi xây dựng gói mà không có trình quản lý gói, bạn sẽ xây dựng gói dưới dạng người dùng không có đặc quyền (bản thân) sau đó cài đặt gói như rootvới sudo. Các trình quản lý gói như Fink và MacPorts đều được xây dựng với người dùng không có đặc quyền của riêng họ sau đó cài đặt dưới dạng root. Homebrew không có cơ chế như vậy.
fd0

1
Hmm, tôi không thấy vấn đề ở phần cuối của mình trong đó brew.shtệp đang được hoàn nguyên sau khi sửa đổi nó và sau đó chạy một brewlệnh. Vì vậy, tôi có thể chạy sudo brew whateverbrew whateversong song tốt. brew --versionDo đó, đầu ra của tôi là: Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28) FYI, tôi đã sửa đổi brew.shtệp của mình để nhận xét tất cả các dòng trong check-run-command-as-roothàm và đặt một returncâu lệnh ở đầu hàm thay thế.
GDP2

Câu trả lời:


2

Sau khi thực hiện thay đổi tập lệnh của bạn, hãy thử đặt cờ bất biến trên brew.sh.

chflags uchg /usr/local/Homebrew/Library/Homebrew/brew.sh

Tôi chưa thử. Theo nguyên tắc chung, tôi không cung cấp root cho các ứng dụng mà các nhà phát triển đang cầu xin tôi đừng.


Tôi cũng đồng ý với Jason. Có một lý do họ nói không chạy brew như root. Chủ yếu là vì họ là nhà phát triển và tôi sẽ tin tưởng họ với phần mềm của họ. Ngoài ra, không giống như macports, lần trước tôi đã kiểm tra vẫn yêu cầu điều đó, brew không cần hoặc không muốn quyền root, vì vậy nếu bạn làm hỏng cái gì đó thì rất có thể nó sẽ không làm hỏng cả hệ thống của bạn. Tất cả mọi thứ được chứa trong tài khoản người dùng của bạn và không cần phải loay hoay với sudo.
dùng9950573

1
Khẳng định làm việc, cảm ơn. Phải mất một thời gian để cố gắng cập nhật lần đầu tiên, nhưng sau đó sudo brew installchạy như bình thường.
sudo

1
Không có gì nhiều để làm rối và khiến một hệ thống không thể sử dụng được với các gói tôi sẽ cài đặt trên máy Mac. Dù sao, tôi có thể khôi phục hệ thống của mình trong vòng 30 phút. Dọn dẹp người dùng của tôi khó hơn rất nhiều, và nhiều thứ ngay lập tức không hoạt động trừ khi được cài đặt toàn hệ thống, như tôi giải thích trong các ý kiến ​​trên.
sudo

1

Người dùng thông thường không nên làm điều này, nhưng bạn không phải là điển hình?

Hai vấn đề:

  1. Bạn không thể dừng root. Nếu bạn khăng khăng sử dụng root, thì root có thể ghi đè lên brew.shbất kể điều gì.

  2. Rốt cuộc, bạn không thể dừng lại brew, bạn đang nói về việc chạy brew.

Vì vậy, chúng tôi sẽ làm việc với điều đó. Hãy thiết lập một bí danh để sao chép brew.shrồi chạy brew.

alias brew='cp /<modified>/brew.sh /<actuall>/brew.sh; /usr/local/bin/brew'

(Sửa các đường dẫn để khớp với hệ thống của bạn).

Bây giờ tất cả những gì bạn cần làm là:

sudo brew <arguments>

(Nó sẽ trở thành root, sao chép lại brew.sh, sau đó chạy brewbằng root với các đối số, sau đó brewsẽ ghi đè lên brew.shvà bạn sẽ sẵn sàng làm lại từ đầu)

Lưu ý: Bạn cũng có thể đặt sudobí danh, nhưng cách này cảm thấy tốt hơn vì bạn sẽ được nhắc nhập mật khẩu mỗi lần.

Thông thường, bạn không thể sử dụng setuid( chmod u+s) để root trên shell script, để bảo mật. Perl có một chương trình riêng biệt suidperlcó thể được cài đặt và có thể leo thang đặc quyền người dùng, nhưng các giải pháp như vậy hơi sâu để có câu trả lời nhanh.

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.