Expertus metuit
Параноидальная установка homebrew
2013-11-16 22:44
Теги: macosx, kb

Homebrew — клёвая штука, однако она крайне небезопасная в обычном режиме установки — файлы ставятся в каталог /usr/local с правами текущего пользователя, поэтому, если в систему пролезет зловред, он легко сможет изменить очень важные для безопасности файлы в каталоге /usr/local. В homebrew faq очень не советуют ставить brew через sudo, однако там неявно имеется в виду установка с правами суперюзера. Так действительно жить нельзя, поэтому пойдём другим путём — выделим для brew отдельного юзера и отдельную группу, и все операции по установке будем проводить через неё.

Весь дальнейший текст подразумевает, что вы пользуетесь операционной системой Mac OS X версии 10.9 Mavericks, все скриншоты и системные пути сделаны именно для неё, в других версиях всё может несколько отличаться. Также все названия разделов операционки даются на английском. Все команды набираются в терминале руками.

Сначала коротко о процессе:

  • создать пользователя и группу с именем homebrew;
  • изменить пермиссии каталога /usr/local;
  • установить homebrew из-под пользователя homebrew;
  • поставить пакет wget через команду brew.

Возможные последствия

Традиционное предупреждение: вы всё делаете на свой страх и риск, я ничего не гарантирую и ничего не обещаю, все совпадения с реальными лицами случайны и так далее.

В процессе установки происходит смена групп и пермиссий на некоторые каталоги внутри /usr/local, если у вас там уже что-то установлено, например, в /usr/local/bin, то это «что-то» может перестать работать. В идеале каталог /usr/local перед началом установки должен быть пустым.

Вы должны чётко понимать, как работает команда sudo и что означают её аргументы -u и -i.

Пользователи и группы

Открываем окно настроек «Users & Groups» (System Preferences…Users & Groups), жмём иконку с замком и вводим свой пароль, чтобы разблокировать редактирование.

Создаём пользователя с именем brew и каким-нибудь сложным рандомным паролем (этот пароль запоминать нигде не нужно, он нам никогда не понадобится, нужно лишь сделать его максимально сложным, чтобы нельзя было подобрать автоматическим перебором), логиниться под этим пользователем в систему через десктоп не нужно никогда, а все команды мы будем выполнять через sudo.

Создаём группу с именем brew и включаем в неё пользователя brew.

Чтобы созданный пользователь не показывался на экране логина, можно выполнить такую команду (взято отсюда):

sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add brew

Обновлённая инструкция для El Capitan:

Ставим brew по инструкции с официального сайта. НЕ запускаем больше никаких команд.

sudo chown -R brew:brew /usr/local/

Теперь открываем терминал и запускаем следующую магию (не обращайте внимания на ошибки типа «No such file or directory»):

for x in . bin etc include lib lib/pkgconfig Library sbin share var var/log share/locale share/man \
    share/man/man1 share/man/man2 share/man/man3 share/man/man4 share/man/man5 \
    share/man/man6 share/man/man7 share/man/man8 share/info share/doc share/aclocal; \
    do sudo /usr/bin/chgrp brew /usr/local/$x; sudo chmod g+rwx /usr/local/$x; done

Несколько важных моментов, касающихся безопасности:

  • НЕ добавляем текущего (главного) пользователя в группу brew;
  • НЕ добавляем пользователя brew в группу admin (то есть в диалоге редактирования не включаем крыжик «Allow user to administer this computer»).

Установка homebrew

Стандартная процедура установки с офсайта в нашей ситуации работать не будет, поскольку пользователь brew не является администратором, поэтому устанавливаем в ручном режиме. Вначале необходимо поставить инструменты из xcode (они нужны для сборки пакетов):

/usr/bin/xcode-select --install

Теперь важный момент — все команды дальше в этом разделе запускаются в терминале из-под пользователя brew. Добиться этого можно двумя способами: либо постоянно набирать команды типа sudo -u brew command, либо открыть shell-сессию из-под юзера brew: sudo -u brew -i. Мне больше нравится второй вариант, то есть открываем shell-сессию и работаем в ней.

Устанавливаем нужные файлы для brew с офсайта (не обращайте внимания на ошибки типа «Can't update time»):

curl -L https://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C /usr/local

Теперь запускаем обновления (в процессе будет запущен git и проинициализирован репозиторий brew):

brew update

Завершение установки

Всё! Теперь процесс работы с brew будет выглядеть примерно так:

sudo -u brew -i brew install wget

Здесь самый важный компонент — это префикс sudo -u brew -i перед командой brew, без него работать ничего не будет.

Например, для обновления делаем так:

sudo -u brew -i brew update

Если в процессе выполнения команд этой инструкции у вас возникли проблемы, оставьте комментарий к статье, разберёмся.

Комментарии

Текст комментария (разметка: *курсив*, **полужирная**, [ссылка](http://example.com) или <http://example.com> ещё)
Имя (обязательно, 50 символов или меньше)
Email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2016 Sergey Stolyarov | Работает на Pyrone