Invirtiendo algunos daños / usr / local

-2

Estaba siguiendo este tutorial, enlace , y configuré / usr / local en $ USER, que ahora me doy cuenta un gran error.

¿Alguien sabe cómo puedo revertir estos cambios, pero aún así permitir que Homebrew, Node, Ruby, etc. se instalen sin requerir sudo?

    
pregunta Matty F 25.10.2012 - 09:45

2 respuestas

10

En cuanto a la primera parte de su pregunta, no puede revertir los cambios, no hay Z o deshacer el comando, pero puede establecer los permisos para una buena conjetura de lo que era antes. Más sobre esto en la primera viñeta a continuación.

Para instalar el software en /usr/local debe tener permisos de escritura en el directorio (y sus subdirectorios). Hay varias maneras de lograr esto:

  1. Establece el propietario para ti . Eso es lo que hiciste con sudo chown -R $USER /usr/local . Mi experiencia con Linux sysadmin me dice que esta no es la forma estándar, porque /usr/local está fuera de su directorio de inicio y no debe ser de su propiedad. Pero no diría que haya dañado nada irreparablemente.
  2. Use sudo , pero no quiere que se le solicite usarlo.

    (Desde mi punto de vista, la mejor solución . ¿Por qué? sudo te protege de ti mismo. Piensas dos veces si necesitas escribir sudo (a menos que estés siguiendo un tutorial de < a href="http://howtonode.org"> enlace :-) ).)

  3. Establecer ACLs . Una buena manera de separar los permisos originales de los permisos agregados. (Consulte enlace para obtener más información sobre las ACL).
  4. Configurar grupos . Agregue su nombre al grupo que posee /usr/local y cambie los permisos a g+rwx / g+rw . Incómodo. No hagas eso.

Hiciste 1. y quieres revertir los cambios, 2. no quieres, y no recomiendo 4. Así que explicaré 3:

  • Primero "revirtamos" los cambios que hiciste. /usr/local probablemente fue propiedad del usuario root , grupo wheel . Puedes configurarlo de la siguiente manera:

    $ cd /usr/local
    $ sudo chown -R root:wheel .
    
  • Establezca las ACL para que tenga todos los permisos:

    $ cd /usr/local
    $ sudo chmod -R +a "$USER allow delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,list,search,add_file,add_subdirectory,delete_child,file_inherit,directory_inherit" .
    

    (vea man chmod , sección ACL MANIPULATION OPTIONS para más detalles)

  • Verás que todos los archivos tienen un + anexado, ls -e muestra las ACL:

    $ cd /usr/local
    $ ls -la .
    total 0
    drwxr-xr-x+ 11 root  wheel   374 Oct 10 21:57 .
    drwxr-xr-x+ 12 root  wheel   442 Sep 22 13:44 ..
    drwxr-xr-x+  3 root  wheel  3774 Oct 10 21:57 bin
    -rw-r--r--+  1 jaume wheel    0  Oct 25 14:53 myACLtestfile
    drwxr-xr-x+  3 root  wheel   136 Jul 26 18:55 include
    drwxr-xr-x+  4 root  wheel   442 Jul 26 18:55 lib
    (...)
    $ ls -led bin
    drwxr-xr-x+ 3 root  wheel  3774 Oct 10 21:57 bin
     0: user:jaume allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit
    $ ls -le myACLtestfile 
    -rw-r--r--+ 1 jaume  wheel  0 Oct 25 14:53 myACLtestfile
     0: user:jaume inherited allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown
    

(He probado los comandos anteriores, pero es posible que haya cometido un error tipográfico. Como práctica recomendada, recomiendo que ejecute los comandos anteriores en un directorio de prueba . Podría hacer mkdir ~/tmpacl . Luego cd ~/tmpacl y sudo rsync -av /usr/local/ . para copiar el contenido de /usr/local a ~/tmpacl . Luego omita cd /usr/local en cada sección de arriba para aplicar los comandos a ~/tmpacl . Cuando haya terminado, rm -rf ~/tmpacl .)

Ahora puedes instalar software (o hacer cualquier cosa, para el caso) en /usr/local sin sudo .

Observe que cualquier archivo que cree en /usr/local le pertenecerá (como myACLtestfile en la lista anterior), por lo que verá que algunos archivos son propiedad de root y otros de usted.

(Si cambias de opinión y quieres volver al maravilloso mundo de sudo , elimina las ACL de la siguiente manera:

sudo chmod -R -N /usr/local

y establezca los permisos en root:wheel :

sudo chown -R root:wheel /usr/local

)

** EDIT ** **

Si la rutina de instalación del software que desea instalar utiliza /usr/bin/install , esta puede ser una solución mucho más sencilla. Añadir:

alias install="sudo /usr/bin/install"

a ~/.bashrc . Luego haga . ~/.bashrc para que los cambios surtan efecto.

Luego edite /etc/sudoers con el comando sudo visudo , agregue:

<your username> ALL=(ALL) NOPASSWD:/usr/bin/install

y guarde y cierre el archivo con :x .

(Si usa otro comando install en otra parte del sistema de archivos, como la instalación de GNU, cambie la ruta de arriba como corresponda)

Para que esto funcione, el software debe usar /usr/bin/install . Este suele ser el caso con make install .

** / EDIT **

    
respondido por el jaume 25.10.2012 - 14:55
1

Arranque en su HD de recuperación y vea si desea usar el terminal para arreglar la Mac HD / usr / local a mano o si prefiere restaurar desde una copia de seguridad conveniente.

Dado que las Mac no necesitan que exista nada en / usr / local, no veo cómo el sudo o cualquier sistema crítico se ve afectado, por lo que quizás ni siquiera entiendo su situación.

    
respondido por el bmike 25.10.2012 - 12:38

Lea otras preguntas en las etiquetas