100 votos

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

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

Puedo instalarlo sin sudo (lo cual es genial), pero el paso de enlace del hombre parece requerirlo ( /usr/local/share/man/man3 es propiedad de root ).
A guía que encontré sugiere que recursivamente chown /usr/local haciendo

sudo chown -R `whoami` /usr/local

¿Esto es seguro o es un mal Idea™?

También: ¿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

5 votos

Así es como debe usarse Homebrew. Algunas personas pueden no estar de acuerdo, pero el desarrollador principal dice que hay que hacer las cosas así.

1 votos

Una alternativa ligeramente mejor 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 puede ser necesario ejecutar sudo find /usr/local -perm -200 -exec chmod g+w '{}' \+ para asegurar que el grupo tiene el mismo acceso de escritura que el usuario.

17 votos

"Usaré homebrew, se siente más limpio que macports. Oh, mira este lío de permisos mal definidos. Miraré en Stack Overflow. Oh, aquí hay un hack rápido que va en contra de las mejores prácticas de Unix y en contra de lo que las actualizaciones del sistema operativo tratan de hacer cumplir. Perfecto". Un mes después: "Oye, ¿cómo se instaló este malware?"

54voto

Brian Willis Puntos 839

Yo también uso Homebrew y puedo confirmar que es totalmente seguro. Citando el Instalación en la página oficial FAQ del homebrew :

Hazte un favor y elige /usr/local

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

  2. Es más fácil
    Toneladas de build scripts se rompen 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ás que muchas configuraciones de RubyGems y Python scripts se rompen, lo cual es algo que está fuera de nuestro control.

  3. Es seguro.
    Apple se ha conformado con POSIX y nos ha dejado este directorio. Lo que significa que no hay /usr/local por defecto, así que no hay necesidad de preocuparse por estropear las herramientas existentes.

Si planeas instalar gemas que dependen de las cervezas, entonces ahórrate un montón de problemas e instálalas para /usr/local !

No es trivial decirle a la gema que busque en directorios no estándar los encabezamientos y dylibs. Si eliges /usr/local todo "simplemente funciona".

Sólo añadiré que hacer cosas como Root es una muy mala idea así que chown ing /usr/local no sólo me parece razonable (no es un sistema dir en OSX), sino que cuerdo .

Sus permisos no son correctos (todavía). Sólo ejecuta el comando que has listado y estarás bien.

Si tienes otros problemas recuerda, el brew doctor puede ayudarte!

0 votos

Los comentarios no son para ampliar la discusión; esta conversación ha sido trasladado al chat .

10 votos

El chat ha desaparecido, lo que es una pena. Así que, a riesgo de repetir la historia, dejaré aquí mi comentario: que esto esté hecho no significa que sea seguro.

4 votos

La esencia del gráfico es que, aunque esto es lo que sugiere Homebrew, hay razones por las que esto es incorrecto

41voto

yoliho Puntos 340

Normalmente es mejor mantener los permisos tan estrictos como sea posible. Manteniendo /usr/local propiedad de root significa que sólo los procesos que se ejecutan como root / sudo (o preguntar por el usuario administrador a través del cuadro de diálogo de autorización de Apple) puede escribir en esta área. Así, un proceso de descarga tiene que pedirte una contraseña antes de corromper los archivos allí.

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

No tengo problemas para correr. sudo ya que instalas las cosas con menos frecuencia que las ejecutas, pero tienes que confiar en que el proceso de construcción no cambia nada de lo que debería.

Si quieres evitar el sudo yo instalaría Homebrew en ~/usr/local y alterar su camino, sendero, etc. para incluir los directorios que hay debajo.

Una mejor manera es crear otro usuario, por ejemplo, homebrew y crear un directorio propiedad de ese usuario. Luego, instálalo allí usando sudo -U homebrew . Otros usuarios tendrán el beneficio de no poder sobrescribir ningún otro archivo, porque no se están ejecutando como root y otros programas no pueden afectar al homebrew.

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

1 votos

+1 para mantener las autorizaciones estrictas, y alterar $PATH y $MANPATH para incluir los directorios de los usuarios. Si los programas instalados no requieren una instalación en todo el sistema, es una alternativa mucho mejor.

3 votos

+1 y respuesta aceptada para "mantener los permisos tan estrictos como sea posible". Haciendo brew doctor (sugerido más abajo) me dijo que sólo tengo que hacer chown en los directorios compartidos del hombre... lo suficientemente seguro para mí.

1 votos

Una solución de compromiso, al menos para las personas que se preocupan por la seguridad lo suficiente como para no correr como usuarios administradores todo el tiempo, es cambiar la propiedad del grupo y los permisos para que sólo los administradores puedan escribir en /usr/local. Vea la respuesta de kenorb.

13voto

matthew k Puntos 11

Si estás usando Homebrew, debes dar el permiso de escritura a un grupo específico (ya sea admin o staff ), para que los archivos puedan ser compartidos 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

A continuación, asigne los usuarios que deben tener acceso a brew a ese grupo (compruebe sus grupos a través de: id -Gn ).

Entonces, cuando se trabaja con brew No lo hagas con sudo .

Cuando todavía tenga algún problema de permiso, corra brew doctor para solucionar el problema.

0 votos

+1 por dar una solución real y mejorada, aunque no esté realmente terminada. Por ejemplo: ¿añadir un usuario al grupo de administradores a nivel de BSD? ¿No será eso un lío con el concepto de usuarios admin de OS X?

0 votos

Para que conste, seguí estas instrucciones, pero sólo usé mi usuario existente de OS X hecho por la GUI como administrador en lugar de añadir a alguien a cualquier grupo en la CLI. Funciona: para poder ejecutar los comandos brew, primero tengo que hacer su myAdminUser y luego todo funciona como está previsto. Pero, por supuesto, esta solución no dará ninguna seguridad a las personas que, de todos modos, ya están ejecutando un usuario administrador todo el tiempo.

0 votos

Esta es probablemente la mejor manera de hacerlo, estoy de acuerdo con @kenorb

9voto

Mark Renouf Puntos 13128

Por si sirve de algo, /usr/local no es considerada una carpeta de "sistema" por OS X, y en un nuevo Snow Leopard la instalación de esa carpeta está vacía.

Cualquier material de propiedad de Root en esa carpeta es el resultado de sudo make install en otro software, o dar tu contraseña después de hacer doble clic en un .pkg que quiere tirar cosas en /usr/local .

Poseer /usr/local ha "trabajado para mí" en dos máquinas durante más de un año.

Una cosa es que si instalas MySQL (sin usar Homebrew) y seleccionas sus archivos, entonces probablemente ya no podrá ver sus bases de datos (así que tendrás que seleccionarlos de nuevo para cualquier usuario que esté ejecutando MySQL).

5 votos

Gcc y otras herramientas de desarrollo buscan automáticamente en /usr/local por lo que afecta al sistema

11 votos

El problema no es que sea una carpeta "del sistema", sino que es una carpeta "de todo el sistema". Incluso si no hay nada allí, /usr/local/bin está todavía en el valor por defecto $PATH y cualquier cosa que pongas ahí puede ser usada también por otros usuarios y debe ser de confianza . Si todo el /usr/local/ tiene los mismos permisos /usr/local/share/man actualmente tiene en la configuración de OP, cualquiera puede ir y cambiar cualquier binario con un script que haga rm -rf ~ .

1 votos

Demasiado arriesgado: es probable que instale MySQL tarde o temprano

0voto

Creo que está bien que los usuarios tengan permisos de escritura a /usr/local -- después de todo, eso significa que no estás usando sudo en cada construcción script. No me gusta la idea de que un usuario ordinario que posee /usr/local . Preferiría tener Root (o similar) propio /usr/local pero cambia los permisos para que los usuarios (o al menos algún grupo privilegiado) puedan escribir en él. Ese parece ser el enfoque conceptualmente correcto.

7 votos

El problema aquí es que /usr/local/bin bien puede estar al frente de $PATH para la mayoría de los usuarios. Hacer que el directorio sea escribible en el mundo abre muchos agujeros de seguridad de esa manera.

0 votos

@patrix Pues cambia las rutas. :) Si tienes scripts que tienen agujeros de seguridad debido a rutas de comandos ambiguas, yo culparía a los scripts, no a tus permisos -- los comandos invocados en scripts normalmente deberían estar completamente cualificados por exactamente esta razón. De todos modos, no hay una solución mejor: o le das a tu cuenta de administrador un umask inseguro, o ejecutas todos tus scripts de construcción con sudo o le das a algunos usuarios permisos de escritura en /usr/local . Me quedo con la tercera por ser la menos arriesgada... a no ser que conozcas una forma mejor.

0 votos

Hmm. Pensando un poco más en esto, tal vez una mejor manera sería hacer que Homebrew haga lo que RVM hace por defecto: instalar todo en ~/brew o algo así. El problema, sin embargo, es que a diferencia de Ruby, que es bastante autocontenido, muchas utilidades de *nix esperan encontrarse en /usr/local ...

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X