¿Cómo Homebrew ya no necesita la propiedad de /usr/local?

Hoy ejecuté brew updatey después de migrar el repositorio, informó que ya no necesitaba la propiedad de /usr/local:

$ brew update
Updated Homebrew from 5371359 to 13f08a2.
...
==> Migrating HOMEBREW_REPOSITORY (please wait)...
==> Migrated HOMEBREW_REPOSITORY to /usr/local/Homebrew!
Homebrew no longer needs to have ownership of /usr/local. If you wish you can
return /usr/local to its default ownership with:
  sudo chown root:wheel /usr/local

Este cambio parece un poco dudoso. ¿Cómo logra brew este nuevo comportamiento, aparentemente pasando por alto los controles de seguridad?

¿Qué controles de seguridad está eludiendo? El /usr/localno está incluido en SIP. Consulte Acerca de la Protección de integridad del sistema en su Mac en "Rutas y aplicaciones que las aplicaciones e instaladores de terceros pueden escribir para incluir:" /usr/localaparece en la lista.
Dicho esto, no soy un usuario de Homebrew, ya que compilo directamente desde el código fuente las utilidades que quiero que no están incluidas en OS X, sin embargo, imagino que Homebrew se ha reescrito según sea necesario para actuar normalmente como lo han hecho otras aplicaciones. hecho en el pasado. ¡OMI Homebrew debería haber sido escrito desde el principio para no tener que usurpar la propiedad raíz para empezar!
Quiero decir, si /usr/localy sus elementos secundarios son propiedad de root:admino root:wheelno se puede escribir en grupo, entonces no tengo acceso para escribir en esos directorios (y tampoco Homebrew, presumiblemente), pero si ese es el caso, ¿cómo puede Homebrew administrar la instalación? y eliminar aplicaciones de esas ubicaciones?
Me doy cuenta de que el mensaje solo hace referencia /usr/localy no a sus descendientes. Y mirando lo que hace una nueva instalación de homebrew, establece que todos los subdirectorios sean propiedad de $USER y grupo grabable.
¡Es una vulnerabilidad de seguridad cambiar /usr/localla propiedad al usuario! No tener la propiedad de eso es mejor, no peor. No es para nada dudoso no tener propiedad sobre él; pero es dudoso que lo necesite. Sophos también escribe en ese directorio (correctamente). Deja que eso se hunda.

Respuestas (2)

De acuerdo con este script de Ruby: update-report.rb , acaban de mover cosas a /usr/local/Homebrew, que aún es de tu propiedad.

¿No es necesario que $USER pueda escribir /usr/local para que se cree /usr/local/Homebrew? ¿Qué pasa con otros directorios, como /usr/local/Cellar o /usr/local/opt? ¿Homebrew todavía no necesita acceso (no sudo) para escribir en esos directorios? ¿Cómo puede hacer eso si los directorios son propiedad de root y no se pueden escribir en grupo?
En la primera instalación, todavía usan sudo para crear un repositorio homebrew, consulte install . La secuencia de comandos en mi respuesta para la actualización, en ese momento aún posee /usr/local, que chown-ed en la versión anterior.

Ahora creamos todos los directorios raíz /usr/localque necesita y verificamos la propiedad en ellos en lugar de requerirlo en /usr/localsí mismo.