¿Son mis permisos para / usr / local / correct?

88

Estoy usando HomeBrew para mis necesidades de puertos (parece un poco más "limpio" que MacPorts).

Puedo instalar sin sudoing (lo cual es genial), pero el paso de enlace man parece requerirlo ( /usr/local/share/man/man3es propiedad de root).
Una guía que encontré sugiere que recursivamente chown /usr/localhaciendo

sudo chown -R `whoami` /usr/local

¿Es esto seguro ... o es una mala idea ™?

Además: ¿son correctos mis permisos?

$ 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
Agos
fuente
55
Así es como se debe usar Homebrew. Algunas personas pueden estar en desacuerdo, pero el desarrollador principal dice que haga las cosas de esa manera.
Mike McQuaid
1
Un poco mejor alternativa a su chown: sudo chown -R :admin /usr/local. De esta manera, funcionará igual para cualquier usuario administrador de la máquina. Aunque también es posible que deba ejecutar sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+para asegurarse de que el grupo tenga el mismo acceso de escritura que el usuario.
Slipp D. Thompson
12
"Usaré homebrew, se siente más limpio que los macports. Oh, mira este desorden de permisos mal definido. Comprobaré en Stack Overflow. Oh, aquí hay un truco rápido que va en contra de las mejores prácticas de Unix y de las actualizaciones del sistema operativo. para hacer cumplir. ¡Perfecto! ". Mes después: "Hola, ¿cómo se instaló este malware?"
hmijail
El problema que tengo con este enfoque es que solo la cuenta de usuario que instala Homebrew puede usarlo. Tengo una Mac con varias cuentas que uso para mantener los proyectos de trabajo separados de los proyectos caseros (por ejemplo). Si he iniciado sesión en la cuenta incorrecta, no puedo usar brew install. He tomado esta ruta para evitar los peligros de usar root, pero no estoy convencido de que sea el mejor enfoque.
Auspicio
@MikeMcQuaid Me parece interesante que Homebrew finalmente haya admitido fallas en esto y en la nueva versión lanzada hace una o dos semanas, haya restaurado los permisos predeterminados a / usr / local
oemb1905

Respuestas:

37

Por lo general, es mejor mantener los permisos lo más estrictos posible. Mantener la /usr/localpropiedad rootsignifica que solo los procesos que se ejecutan como root/ sudo(o solicitan un usuario administrador a través del cuadro de diálogo de autorización de Apple) pueden escribir en esta área. Por lo tanto, una descarga de proceso tiene que pedirle una contraseña antes de dañar los archivos allí.

Pero como usted dice, hace que agregar nuevos programas sea más difícil.

Estoy de acuerdo con la ejecución sudo, ya que instala las cosas con menos frecuencia que las que ejecuta pero tiene que confiar en que el proceso de compilación no cambia nada de lo que debería.

Si desea evitar sudo, instalaría Homebrew ~/usr/localy alteraría su ruta, ruta de acceso, etc. para incluir los directorios allí.

Una mejor manera es crear otro usuario, por ejemplo, homebrewy crear un directorio propiedad de ese usuario. Luego, instale allí usando sudo -U homebrew. Otros usuarios tendrán la ventaja de no poder sobrescribir ningún otro archivo, ya que no se están ejecutando root y otros programas no pueden afectar a homebrew. (Observo que las preguntas frecuentes de Homebrew sugieren a este nuevo usuario si se encuentra en un "entorno multiusuario". Diría que cualquier máquina Unix, incluido macOS, es un entorno multiusuario)

Sin embargo, como dice el wiki de Homebrew, las recetas no encuentran todos los casos /usr/localy los reemplazan con el directorio elegido, sospecho que estamos atascados /usr/local.

usuario151019
fuente
1
+1 para mantener las autorizaciones estrictas y modificar $PATHe $MANPATHincluir directorios de usuarios. Si los programas instalados no requieren instalación en todo el sistema, es una alternativa mucho mejor.
zneak
3
+1 y la respuesta aceptada para "mantener los permisos lo más estrictos posible". Hacer brew doctor(sugerido a continuación) me dijo que solo tengo que compartir los directorios man compartidos ... lo suficientemente seguro para mí.
Agos
1
Una solución de compromiso, al menos para las personas que se preocupan por la seguridad lo suficiente como para no ejecutarse como usuarios Administradores todo el tiempo, es cambiar la propiedad y los permisos del grupo para que solo los Administradores puedan escribir a / usr / local. Ver la respuesta de kenorb.
hmijail
2
@ Mark Me parece interesante que Homebrew finalmente haya admitido fallas en esto y en la nueva versión lanzada hace una o dos semanas, haya restaurado los permisos predeterminados a / usr / local
oemb1905
48

También uso Homebrew y puedo confirmar que es totalmente seguro. Citando la página de instalación en las preguntas frecuentes oficiales de Homebrew :

Hazte un favor y elige /usr/local

  1. Es más fácil
    /usr/local/bin ya está en tu PATH.

  2. Es más fácil que se
    rompan toneladas de scripts de compilación si sus dependencias no están en / usr o / usr / local. Arreglamos esto para las fórmulas de Homebrew (aunque no siempre lo probamos), pero encontrará que muchos scripts de configuración de RubyGems y Python se rompen, algo que está fuera de nuestro control.

  3. Es seguro que
    Apple se haya conformado con POSIX y nos haya dejado este directorio. Lo que significa que no hay un /usr/localdirectorio por defecto, por lo que no hay necesidad de preocuparse por estropear las herramientas existentes.

Si planea instalar gemas que dependen de cervezas, ¡ahórrese un montón de molestias e instálelas /usr/local!

No es trivial decirle a gem que busque en directorios no estándar para encabezados y dylibs. Si eliges /usr/local, ¡todo "simplemente funciona"!

Voy a añadir que hacer las cosas como root es una idea muy mala , por lo chowning /usr/localno sólo me parece razonable (que no es un sistema de dir en OSX), pero sano .

Sus permisos no son correctos (todavía). Simplemente ejecute el comando que enumeró y estará bien.

Si tiene otros problemas, recuerde, ¡ brew doctorpuede ayudarlo!

Carmine Paolino
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
bmike
77
El chat se fue, lo cual es una pena. Entonces, a riesgo de repetir la historia, dejaré mi comentario aquí: que esto se haga no significa que esto sea seguro.
hmijail
44
La esencia del gráfico es que, aunque esto es lo que Homebrew sugiere, hay razones por las cuales esto está mal
usuario151019
1
brew doctorEs simplemente asombroso.
Utku
55
@Carmine Paolino Me parece interesante que Homebrew finalmente haya admitido fallas en esto y en la nueva versión lanzada hace una o dos semanas, haya restaurado los permisos predeterminados a / usr / local
oemb1905
9

Si está utilizando Homebrew, debe otorgar el permiso de escritura a un grupo específico (ya sea admino staff), para que los archivos se puedan compartir entre los usuarios que están en ese grupo.

Por ejemplo:

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

Luego asigne los usuarios que deberían tener acceso al brewcomando a ese grupo (verifique sus grupos a través de:) id -Gn.

Luego, cuando trabaje con brew, no lo ejecute sudo.

Cuando todavía tenga algún problema de permiso, ejecute brew doctorpara solucionar el problema.

kenorb
fuente
+1 por dar una solución real, mejor comportada, incluso si no está realmente terminada. Por ejemplo: ¿agregar un usuario al grupo de administración en el nivel BSD? ¿Eso no afectará el concepto de OS X de usuarios administradores?
hmijail
Para el registro, seguí estas instrucciones, pero simplemente utilicé mi usuario de administrador de OS X GUI existente en lugar de agregar a nadie a ningún grupo en la CLI. Funciona: para poder ejecutar comandos brew, primero tengo que hacerlo su myAdminUser, y luego todo funciona según lo previsto. Pero, por supuesto, esta solución no dará seguridad a las personas que de todos modos ya están ejecutando un usuario administrador todo el tiempo.
hmijail
Esta es probablemente la mejor manera de hacerlo, estoy de acuerdo con @kenorb
pixel 67
7

Por lo que vale, /usr/localOS X no lo considera una carpeta de "sistema", y en una nueva instalación de Snow Leopard esa carpeta está vacía.

Cualquier material propiedad de root en esa carpeta es el resultado de sudo make installotro software, o de dar su contraseña después de hacer doble clic en uno .pkgque quiere volcar cosas /usr/local.

Ser propietario /usr/localha "trabajado para mí" en 2 máquinas durante más de un año.

Uno de los problemas es que si instaló MySQL (sin usar Homebrew) y transfirió sus archivos, entonces probablemente ya no podrá ver sus bases de datos (por lo tanto, tendrá que devolverlas a cualquier usuario que MySQL esté ejecutando como .)

Adam Vandenberg
fuente
55
gcc y otras herramientas de desarrollo se ven automáticamente en / usr / local, por lo que afecta el sistema
user151019
11
El problema no es que sea una carpeta de "sistema"; es que es una carpeta "de todo el sistema". Incluso si no hay nada allí, /usr/local/bintodavía está en el $PATHvalor predeterminado , y cualquier cosa que coloque allí también puede ser utilizada por otros usuarios y se debe confiar . Si todo el /usr/local/directorio tiene los mismos permisos /usr/local/share/manque tiene actualmente en la configuración de OP, cualquiera puede ir y cambiar cualquier binario con un script que lo tenga rm -rf ~.
zneak
1
demasiado arriesgado: es probable que instale MySQL tarde o temprano
Agos
2
@Agos: siempre puedes instalar MySQL con HomeBrew, en cuyo caso no tendrás ningún problema :)
Carmine Paolino
1
@Agos No es arriesgado en absoluto. La precaución solo se aplica si ha instalado MySQL antes de Homebrew. Si lo hace después, los permisos /usr/localdeberían estar bien. (Pero probablemente uses Postgres de todos modos. :))
Marnen Laibow-Koser
6

Como en Homebrew 1.0.0:

Homebrew ya no necesita ser propietario de / usr / local. Si lo desea, puede devolver / usr / local a su propiedad predeterminada con: sudo chown root: wheel / usr / local

Yuhao Zhang
fuente
1
Actualmente estoy actualizando Brew usando brew update, que todavía requiere la propiedad de /usr/local. Intentaré restaurar los permisos después.
Joshua Pinter
Esta es realmente una gran información! Establecí los permisos según lo especificado por Homebrew (<1.0), y después de la actualización, me dio estas instrucciones sobre cómo volver a configurarlos.
mortona42
0

Creo que está bien que los usuarios tengan permisos de escritura a /usr/local- después de todo, eso significa que no estés utilizando sudoen cada escritura de la estructura. No me gusta la idea de un usuario normal propietaria /usr/local . Prefiero tener root (o similar) propio /usr/local, pero cambiar los permisos para que los usuarios (o al menos algún grupo privilegiado) puedan escribir en él. Ese parece ser el enfoque conceptualmente correcto.

Marnen Laibow-Koser
fuente
77
El problema aquí es que /usr/local/binmuy bien puede estar al frente de $ PATH para la mayoría de los usuarios. Hacer que el directorio se pueda escribir en el mundo abre muchos agujeros de seguridad de esa manera.
nohillside
@patrix Entonces cambia los caminos. :) Si tiene secuencias de comandos que tienen agujeros de seguridad debido a rutas de comando ambiguas, culparía a las secuencias de comandos, no a sus permisos: los comandos invocados en las secuencias de comandos generalmente deben estar completamente calificados por exactamente esta razón. De todos modos, no hay mejor solución: o le das a tu cuenta de administrador una máscara de seguridad insegura, o ejecutas todos tus scripts de compilación sudo, o les das a algunos usuarios permisos de escritura /usr/local. Tomaré el tercero como el menos arriesgado ... a menos que conozca una mejor manera.
Marnen Laibow-Koser
Hmm Pensando en esto un poco más, tal vez una mejor manera sería hacer que Homebrew haga lo que RVM hace de manera predeterminada: instalar todo ~/brewo algo así. Sin embargo, el problema es que, a diferencia de Ruby, que es bastante autónomo, muchas utilidades * nix esperan encontrarse en /usr/local...
Marnen Laibow-Koser
3
No mencioné que /usr/localno se puede escribir en mi mundo: más bien, tengo un grupo de confianza homebrew(no solo administrador) que tiene permisos de escritura (permisos extendidos como 0: group:homebrew allow add_file,delete,add_subdirectory,delete_child,file_inherit,directory_inherittotalmente rock). Este es el mejor compromiso que he podido resolver: no sudoen los scripts de compilación, pero sí algo de control /usr/local.
Marnen Laibow-Koser
@ MarnenLaibow-Koser Me encantaría ver una explicación más detallada de este enfoque (creando un grupo confiable de usuarios con permisos de escritura /usr/local). Rastreando mucho en SO y otros sitios, viendo argumentos sobre: ​​mover Homebrew a la carpeta de inicio del usuario versus mantenerlo /usr/local, cambiar de propietario y / o grupo /usr/localo no, etc. Solución universalmente aceptable. ¿Tiene una publicación de blog o artículo sobre esto, o podría dar una explicación más profunda en alguna parte?
Gabriel L.