Inversione di alcuni / usr / danni locali

-2

Stavo seguendo questo tutorial - link - e impostato / usr / local su $ USER, che ora realizzo era un errore enorme.

Qualcuno sa come posso ripristinare queste modifiche, ma permetto comunque di installare Homebrew, Node, Ruby, etc senza richiedere sudo?

    
posta Matty F 25.10.2012 - 09:45
fonte

2 risposte

10

Per quanto riguarda la prima parte della tua domanda, non puoi annullare le modifiche, non c'è Z o annullare il comando, ma è possibile impostare le autorizzazioni per una buona ipotesi di ciò che era prima. Maggiori informazioni su questo nel primo elenco qui sotto.

Per installare il software in /usr/local devi avere permessi di scrittura nella directory (e nelle sue sottodirectory). Ci sono diversi modi per ottenere questo:

  1. Imposta il proprietario su te stesso . Questo è ciò che hai fatto con sudo chown -R $USER /usr/local . Il mio background sysadmin Linux mi dice che questo non è il modo standard, perché /usr/local è al di fuori della tua home directory e non dovrebbe essere di tua proprietà. Ma non direi che hai danneggiato qualcosa di irreparabile.
  2. Utilizza sudo , ma non vuoi essere obbligato a usarlo.

    (Dal mio punto di vista la soluzione migliore .%?sudo ti protegge da te. Pensaci due volte se devi digitare sudo (a meno che non segui un'esercitazione di < a href="http://howtonode.org"> link :-) ).)

  3. Imposta ACL . Bel modo per separare le autorizzazioni originali dalle autorizzazioni aggiunte. (Vedi link per maggiori informazioni sugli ACL.)
  4. Configura gruppi . Aggiungi te stesso al gruppo che possedeva /usr/local e modifica le autorizzazioni in g+rwx / g+rw . Ingombrante. Non farlo.

Hai fatto 1. e vuoi annullare le modifiche, 2. non vuoi, e io non lo consiglio 4., quindi ti spiegherò 3:

  • Iniziamo a "ripristinare" le modifiche apportate. /usr/local era probabilmente di proprietà dell'utente root , gruppo wheel . Puoi impostarlo come segue:

    $ cd /usr/local
    $ sudo chown -R root:wheel .
    
  • Imposta gli ACL in modo da disporre di tutte le autorizzazioni:

    $ 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" .
    

    (vedi man chmod , sezione ACL MANIPULATION OPTIONS per i dettagli.)

  • Vedrai che tutti i file hanno un + aggiunto, ls -e mostra gli 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
    

(Ho testato i comandi di cui sopra, ma potrei aver fatto un refuso. Come best practice, ti consiglio di eseguire i comandi sopra in una directory di test . Potresti fare mkdir ~/tmpacl . Quindi cd ~/tmpacl e sudo rsync -av /usr/local/ . per copiare il contenuto di /usr/local in ~/tmpacl . Quindi salta cd /usr/local in ogni sezione precedente per applicare i comandi a ~/tmpacl . Al termine, rm -rf ~/tmpacl .)

Ora puoi installare il software (o fare qualsiasi cosa, per quello) in /usr/local senza sudo .

Tieni presente che qualsiasi file che crei in /usr/local apparterrà a te (come myACLtestfile nella scheda sopra riportata), quindi vedrai che alcuni file sono di proprietà di root e altri da te.

(Se cambi idea e vuoi tornare al meraviglioso mondo di sudo , elimina gli ACL come segue:

sudo chmod -R -N /usr/local

e imposta le autorizzazioni su root:wheel :

sudo chown -R root:wheel /usr/local

)

** MODIFICA **

Se la routine di installazione del software che si desidera installare utilizza /usr/bin/install , questa potrebbe essere una soluzione molto più semplice. Aggiungere:

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

a ~/.bashrc . Quindi fai . ~/.bashrc affinché le modifiche abbiano effetto.

Quindi modifica /etc/sudoers con il comando sudo visudo , aggiungi:

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

e salva e chiudi il file con :x .

(Se usi altro comando install da qualche parte nel filesystem, come GNU install, cambia il percorso sopra in modo appropriato.)

Perché funzioni, il software deve utilizzare /usr/bin/install . Di solito è il caso con make install .

** / EDIT **

    
risposta data 25.10.2012 - 14:55
fonte
1

Avvia il tuo HD di ripristino e vedi se vuoi utilizzare il terminale per riparare Mac HD / usr / local a mano o se preferisci semplicemente ripristinare da un comodo backup.

Dato che i Mac non hanno bisogno di nulla in / usr / local, non vedo come sudo o qualsiasi sistema critico sia influenzato, quindi forse non sto nemmeno capendo la tua situazione.

    
risposta data 25.10.2012 - 12:38
fonte

Leggi altre domande sui tag