Как запустить Homebrew от имени пользователя root?

11

Несколько лет назад вы могли избежать brewпроблем brewс правами администратора, просто подав их, но они убрали эту функцию. Так что в Homebrew 1.1.6 я использовал правку, /usr/local/Homebrew/Library/Homebrew/brew.shчтобы убрать проверку root (ту, которая говорила, что она «чрезвычайно опасна»), чтобы я мог работать brewот имени root.

Более новая версия Homebrew по-прежнему работает с этим, но продолжает возвращать brew.shфайл обратно каждый раз после запуска brew, даже если я chmod 500это сделаю . Я мог бы написать сценарий, чтобы изменить его, затем запустить brewавтоматически, но я не уверен, что это всегда будет работать, и не хочу рисковать. Кто-нибудь нашел другой способ запустить Homebrew от имени root?

Судо
источник
3
Из любопытства, почему вы хотите запустить brewот имени root? Кроме того, sudoне достаточно для ваших целей?
Аллан
2
@Allan sudoзапускает его как root, и он выдает мне ту же «чрезвычайно опасную» ошибку. Я хочу работать с правами root, поскольку в противном случае возникают проблемы с установкой определенных пакетов, особенно если что-то было установлено не через Homebrew (например, через pip). Я ходил по этому пути много раз. Кроме того, он не работает должным образом для нескольких пользователей без странных обходных путей, если я не установлю все как root.
Судо
$ su -> $ варево, что вы хотите?
StrawHara
1
Сборка программного пакета так rootже рискованна. Даже построение пакета без менеджера пакетов, вы бы построить пакет как пользователь без привилегий (самостоятельно) , а затем установить пакет , как rootс sudo. Менеджеры пакетов, такие как Fink и MacPorts, создают свои собственные непривилегированные пользователи, а затем устанавливают как root. Доморощенный не имеет такого механизма.
fd0
1
Хм, я не вижу проблемы с моей стороны, когда brew.shфайл возвращается после изменения и запуска brewкоманды. Так что я могу бегать sudo brew whateverи brew whateverв тандеме просто отлично. brew --versionТаким образом, мой вывод: к Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28) вашему сведению, я изменил свой brew.shфайл, чтобы закомментировать все строки в check-run-command-as-rootфункции, и returnвместо этого поместил один оператор в верхней части функции.
ВВП2

Ответы:

2

После внесения изменений в скрипт попробуйте установить флаг неизменяемости на brew.sh.

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

Я не проверял. Как правило, я не даю рут приложениям, разработчики которых просят не делать этого.

Джейсон
источник
Я также согласен с Джейсоном. Есть причина, по которой они говорят, что нельзя запускать brew от имени root. Главным образом потому, что они разработчики, и я доверю им их программное обеспечение. Кроме того, в отличие от macports, который в прошлый раз, когда я проверял, все еще требует этого, brew не нужен или не нужен root-доступ, поэтому, если вы что-то испортите, это, скорее всего, не будет мешать всей вашей системе. Все содержится в вашей учетной записи пользователя и нет необходимости возиться с sudo.
user9950573
1
Подтвердил работу, спасибо. Требуется некоторое время, чтобы попытаться выполнить обновление в первый раз, но позже он sudo brew installзапускается как обычно.
Судо
1
Там не так много, чтобы испортить и сделать систему непригодной для использования с пакетами, которые я буду устанавливать на Mac. В любом случае, я могу восстановить свою систему в течение 30 минут. Очистка моего пользователя намного сложнее, и многие вещи не работают, если не установлены в масштабе всей системы, как я объясняю в комментариях выше.
Судо
1

Обычные пользователи не должны этого делать, но вы не типичны, не так ли?

Два вопроса:

  1. Вы не можете остановить root. Если вы настаиваете на использовании root, то root может перезаписать brew.shнесмотря ни на что.

  2. Вы не можете остановиться brew, в конце концов, вы говорите о беге brew.

Так что мы будем работать с этим. Давайте настроим псевдоним для копирования и brew.shзапуска brew.

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

(Исправьте пути, чтобы соответствовать вашей системе).

Теперь все, что вам нужно сделать, это:

sudo brew <arguments>

(Он станет root, скопируйте brew.sh, затем запустите brewкак root с аргументами, после чего brewперезапишите, brew.shи вы будете готовы сделать это снова)

Примечание. Вы также можете указать sudoпсевдоним, но этот способ удобнее, потому что вам будет каждый раз запрашиваться пароль.

Как правило, вы не можете использовать setuid( chmod u+s), чтобы получить root права на скрипты оболочки, для безопасности. В Perl есть отдельная программа, suidperlкоторая может быть установлена ​​и может повысить привилегии пользователя, но такие решения немного глубоки для быстрого ответа.

Able Mac
источник