Tempo di Lettura: 14 minuti
La Riparazione dei permessi è una delle soluzioni più diffuse quando si ha qualche problema sui sistemi Mac OS X. Lo scopo di questo articolo è spiegare perché accade che, di tanto in tanto, i permessi debbano essere ripristinati, ma anche quello di approfondire alcuni aspetti poco chiari sul meccanismo di riparazione.
L’argomento è stato trattato in maniera abbastanza esauriente e data la sua lunghezza, l’ho organizzato in capitoli, in modo da poter sia leggere l’articolo per intero sia passare direttamente solo alle sezioni che interessano.
Ecco l’indice degli argomenti trattati:
- Cosa sono i permessi dei file?
- Cosa fa la Riparazione dei permessi?
- Come riparare i permessi da interfaccia e da terminale
- Come fa il Repair Disk Permissions a conoscere i corretti permessi da assegnare?
- Come è possibile riparare i permessi di applicazioni di terze parti?
- Cosa succede se si cancella un file receipt e cosa è il file BaseSystem.pkg
- La doppia funzione della directory dei Receipts
- Il file HintFile.plist
- Come mai i permessi dei file vengono alterati?
- I consigli della Apple
- Inserire la riparazione dei permessi nel crontab
- Quando non è necessaria la riparazione dei permessi
Cosa sono i permessi dei file?
Come tutti i sistemi Unix, anche Mac OS X, ha una gestione standard dei permessi sui file, che rispecchia la natura di sistema operativo multiutente.
Ogni file e directory di un sistema Mac OS X ha impostati dei permessi che altro non sono che i privilegi di ciascun utente o gruppo di utenti su un particolare elemento del file system. In particolare i permessi possono essere di lettura, scrittura e esecuzione e vengono differenziati sulla base della natura dell’utente rispetto al file o directory:
- utente proprietario owner del file
- gruppo proprietario owner group del file
- gli altri utenti others, che sono l’owner e non appartegono all’owner group.
Cosa fa la Riparazione dei permessi?
La funzione di Repair Disk Permissions su Mac OS X, è il processo che si occupa di ripristinare i corretti permessi su tutti i file di sistema: se vengono rilevate delle discrepanze sui permessi assegnati ai file, questi vengono riparati. Infatti, se non li si riparasse, il sistema operativo potrebbe avere problemi a leggere o scrivere determinati file, portando, inevitabilmente, ad una instabilità generale del sistema, poiché questo non potrebbe accedere correttamente a questi file. Verosimilmente potrebbe essere impossibile loggarsi con un determinato utente, stampare o lanciare una determinata applicazione. Oppure potrebbe accadere che una applicazione Apple o di terze parti non riesca ad accedere ad un determinato file di sistema, precludendone di fatto il corretto funzionamento. E’ in questi casi che, quindi, la funzione Repair Disk Permissions corre in nostro aiuto.
Come riparare i permessi da interfaccia e da terminale
La funzione di Repair Disk Permissions fa parte integrante delle Utility Disco della Apple (in /Applications/Utility/Utility Disco). Dopo averlo lanciato, si deve selezionare il disco nella lista di sinistra e, facendo clic sulla sezione S.O.S, nella parte inferiore della finestra bisognerà cliccare sul pulsante “Ripara permessi del disco”.
Per i più geek è possibile anche lanciare la riparazione dei permessi via shell (Terminale) usando il seguente comando:
sudo diskutil repairPermissions /
Come fa il Repair Disk Permissions a conoscere i corretti permessi da assegnare?
Quando, si esegue l’installazione di Mac OS X o si eseguono dei Software Update, vengono lanciate le Apple’s Installer utility, ovvero dei package di installazioni (sono file con estensioni .pkg) che, generalmente, portano con se un receipt (una ricevuta), ovvero, un piccolo package che contiene le informazioni su tutti i file installati inclusi i permessi che ha ciascun file. Questo receipt verrà, di default, posizionato nella cartella “/Library/Receipts”.
Quando, quindi, verrà lanciata l’utility di Riparazione dei Permessi del Disco, questa non farà altro che esaminerare tutti i receipts contenuti nella directory “/Library/Receipts” del disco da riparare, comparando le informazioni trovate nei file con i permessi effettivi dei file. Ciò significa, quidi, che questa utility può essere lanciata solo sul volume dove Mac OS X è stato installato (altrimenti troverebbe alcuna file receipt da comparare e non avrebbe anche alcun senso).
Se l’utility di Riparazione dei Permessi del Disco trova un file con permessi differenti da quelli contenuti dal receipt (e che indica come dovrebbero, di fatto, essere impostati) i permessi di quel file saranno ripristinati al valore contenuto nel file receipt.
Se siete curiosi e volete curiosare nelle informazioni contenute in questi receipt, potrete usare l’utility Pacifist che, con un semplice drag e drop del file receipt, mostrerà la lista di tutti i file installati ognuno con i suoi permessi originali permissions.
Come abbiamo detto prima, non tutti i file vengono toccati dalla utility di Riparazione dei Permessi del Disco, ma solo quelli che sono stati installati usando l’OS X Installer, che di fatto costituisce l’unico modo per generare un package receipt nella cartella “/Library/Receipts”. In generale, quindi, i file i cui permessi possono essere ripristinati, sono, i file del sistema operativo, quelli delle Applicazioni (installate con un file .pkg) o i System Add-ons. Da questi, evidentemente, sono escluse tutte quelle applicazioni che vengono installate con un semplice drag e drop, tutti i documenti utenti e tutti quei file non di sistema.
Volendo entrare nel dettaglio, bisogna anche dire che non tutti i receipt vengono analizzati dalla utility di Riparazione dei Permessi del Disco, ma solo quelli che sono associati al sistema operativo. Per vedere quali package sono referenziati con questa utility, basterà lanciare da terminale, col le appropriate opzioni, il comando:
sudo fs_usage | grep /Library/Receipts
Se volete, però, vedere i file contenuti nella cartella receipts, allora dovete lanciare il seguente comando:
ls -af /Library/Receipts
Questa è la lista di quali receipts vengono controllati sul mio Mac con Mac OS X 10.5.2.
AirPortUtility_Leopard.pkg
AppleIntermediateCodec.pkg
AppleMobileDeviceSupport.pkg
BSD.pkg
FM2008 v8.0.1 Patch.pkg
Flip4Mac QuickTime Components.pkg
Flip4Mac Web Plugins.pkg
FrontRowUpdate2.1.2.pkg
FrontRowUpdate2.1.3.pkg
GarageBand.pkg
GarageBandFactoryContent.pkg
GarageBand_410.pkg
GarageBand_411.pkg
GarageBand_412.pkg
GarageBand_Instruments.pkg
GarageBand_Loops.pkg
GarageBand_MagicContent.pkg
Image Tricks 2.4.pkg
Keynote_401.pkg
Keynote_402.pkg
Keynote_403.pkg
MacBookProFirmwareUpdate.pkg
Numbers_101.pkg
Numbers_102.pkg
Office2008_en_autoupdate.pkg
Office2008_en_errorreporting.pkg
Office2008_en_helpviewer.pkg
Pages_301.pkg
Pages_302.pkg
QuickTime730_Leopard.pkg
QuickTime731_Leopard.pkg
QuickTime740_Leopard.pkg
QuickTime741_Leopard.pkg
QuickTime745_Leopard.pkg
RAWCamera.pkg
RemoteDesktopClient.pkg
SIMBL.pkg
StartupSoundPrefPane.pkg
growl.pkg
growlPostflight.pkg
growlPreflight.pkg
iDVD.pkg
iDVDThemes.pkg
iDVD_701.pkg
iLife ’08.pkg
iLifeCookie.pkg
iLifeMediaBrowser.pkg
iLifeSoundEffects_Loops.pkg
iMovie.pkg
iMovieHD6.pkg
iMovie_710.pkg
iMovie_711.pkg
iPhoto.pkg
iPhotoContent.pkg
iPhoto_710.pkg
iPhoto_711.pkg
iPhoto_712.pkg
iPhoto_713.pkg
iTunesAccess.pkg
iTunesX.pkg
iWeb.pkg
iWeb_202.pkg
iWeb_203.pkg
iWork08.pkg
info.pkg
inquisitor.pkg
inquisitorPreflight.pkg
piclens.pkg
Come potete vedere, questi receipts sono tutte installazioni relative a Mac OS X o, se installato, all’Apple Xcode/Developer Tools.
Tutti quei file che non sono listati da quel comando, non vengono controllati dalla utility di Riparazione dei Permessi del Disco. Tutto ciò porta alla logica conseguenza che la riparazione dei permessi è un tool che serve a fixare solo i permessi relativi ai problemi che sono a livello di sistema operativo!
In particolare, questi receipts sono tutti i pacchetti esplicitamente indicati come DiskManagementTool, ovvero il componente di OS X che si occupa di far girare l’utility di riparazione permessi. E’ possibile verificarlo con questo comando da Terminale:
strings /System/Library/PrivateFrameworks/DiskManagement.framework/Versions/A/Resources/DiskManagementTool | grep Receipts
che darà un risultato simile a questo:
/Library/Receipts/BaseSystem.pkg/Contents/Archive.bom
/Library/Receipts/Essentials.pkg/Contents/Archive.bom
/Library/Receipts/AdditionalEssentials.pkg/Contents/Archive.bom
/Library/Receipts/BSD.pkg/Contents/Archive.bom
/Library/Receipts/BSDSDK.pkg/Contents/Archive.bom
/Library/Receipts/X11User.pkg/Contents/Archive.bom
/Library/Receipts/X11SDK.pkg/Contents/Archive.bom
/Library/Receipts/CommonAccessCard.pkg/Contents/Archive.bom
/Library/Receipts/CommonCriteriaTools.pkg/Contents/Archive.bom
/Library/Receipts/Internal.pkg/Contents/Archive.bom
/Library/Receipts/FatLibraries.pkg/Contents/Archive.bom
/Library/Receipts/DevDocumentation.pkg/Contents/Archive.bom
/Library/Receipts/DevExamples.pkg/Contents/Archive.bom
/Library/Receipts/DevSDK.pkg/Contents/Archive.bom
/Library/Receipts/DeveloperTools.pkg/Contents/Archive.bom
/Library/Receipts/Java.pkg/Contents/Archive.bom
/Library/Receipts/DevInternal.pkg/Contents/Archive.bom
/Library/Receipts/DevFatLibraries.pkg/Contents/Archive.bom
/Library/Receipts/AddressBook.pkg/Contents/Archive.bom
/Library/Receipts/Automator.pkg/Contents/Archive.bom
/Library/Receipts/Mail.pkg/Contents/Archive.bom
/Library/Receipts/MigrationAssistant.pkg/Contents/Archive.bom
/Library/Receipts/OxfordDictionaries.pkg/Contents/Archive.bom
/Library/Receipts/iCal.pkg/Contents/Archive.bom
/Library/Receipts/iChat.pkg/Contents/Archive.bom
/Library/Receipts/MicrosoftIE.pkg/Contents/Archive.bom
/Library/Receipts/Safari.pkg/Contents/Archive.bom
/Library/Receipts/iTunesX.pkg/Contents/Archive.bom
/Library/Receipts/iTunes.pkg/Contents/Archive.bom
/Library/Receipts/AdditionalFonts.pkg/Contents/Archive.bom
/Library/Receipts/AdditionalAsianFonts.pkg/Contents/Archive.bom
/Library/Receipts/BrotherPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/EpsonPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/CanonPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/HewlettPackardPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/LexmarkPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/GimpPrintPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/ElectronicsForImagingPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/RicohPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/XeroxPrinterDrivers.pkg/Contents/Archive.bom
/Library/Receipts/QuickTimeStreamingServer.pkg/Contents/Archive.bom
/Library/Receipts/ApplicationsServer.pkg/Contents/Archive.bom
/Library/Receipts/ServerFatLibraries.pkg/Contents/Archive.bom
/Library/Receipts/ServerInternal.pkg/Contents/Archive.bom
/Library/Receipts/ServerAdminTools.pkg/Contents/Archive.bom
/Library/Receipts/ServerSetup.pkg/Contents/Archive.bom
/Library/Receipts/ServerEssentials.pkg/Contents/Archive.bom
Come è possibile riparare i permessi di applicazioni di terze parti?
Come abbiamo potuto appurare, nonostante Apple affermi che l’utility di Riparazione dei Permessi del Disco sia in grado di agire su ogni software, inclusi le applicazioni di terze parti che siano state installate con l’Installer e accompagnate da un file receipt posizionato nella directory “/Library/Receipts”, ciò non è propriamente vero. Le sole applicazioni di terze parti i cui permessi possono essere ripristinati, sono quelle incluse con Mac OS X e installate con Mac OS X Installer. Per fare un esempio, sono inclusi nella verifica il plugin Flash per Safari (/Library/Internet Plug-Ins/flashplayer.xpt) e, nelle vecchie versioni di Mac OS X, il browser Internet Explorer di Microsoft.
E’ altresì facile verificare quanto affermato sopra: basterà prendere un qualsiasi software installato da un file .pkg, cambiarne i permessi, e lanciare l’utility di Riparazione dei Permessi per verificare che questa non agirà su i permessi di questo software.
Sebbene, però, apparentemente ciò possa sembrare una forte limitazione, questa restrinzione, invece, ha delle valide ragioni di sicurezza: infatti, lo scopo, è quello di evitare che applicazioni di terze parti non certificate possano modificare anche i permessi dei file di sistema, magari assegnando tutti i permessi a determinati file che in realtà dovrebbero essere letti solo da certi utenti, minando così la sicurezza intera del sistema operativo che si ritroverebbe ad avere una porta aperta a tutto il codice maligno esistente.
Detto questo, c’è da tenere bene in mente che molti software di terze parti sfruttano componenti di Mac OS X. Quindi, se anche la riparazione dei permessi non tocca le applicazioni di terze parti, può comunque avere effetti benefici su questi ultimi, risolvendo eventuali problemi esistenti.
Cosa succede se si cancella un file receipt e cosa è il file BaseSystem.pkg
Se, accidentalmente, si dovesse cancellare (o spostare in un’altra locazione) un file receipt, l’effetto che se ne avrebbe è che l’utility di Riparazione dei Permessi non potrebbe riparare i diritti di tutti i file referenziati in quel file che è stato rimosso.
Ovviamente vi sono alcuni receipts basilari per il corretto funzionamento di questa utility senza i quali l’analisi non potrebbe terminare a buon fine. In particolare il package BaseSystem.pkg (contiente i permessi del core del sistema operativo) deve essere sempre presente all’interno della directory “/Library/Receipts”, altrimenti se dovesse mancare, l’utility di Riparazione dei Permessi del Disco darebbe un errore simile a questo:
First Aid failed: Disk Utility stopped repairing permissions on ’[volume name]’ because the following error was encountered: No valid packages or Error: No valid packages (-9997).
Se accidentalmente avete cancellato il file BaseSystem.pkg, Apple raccomanda di copiarlo da un altro computer che usa la stessa versione di sistema operativo. Laddove non fosse possibile reperire il file BaseSystem.pkg occorerrà reinstallare Mac OS X, avendo cura di sovrascrivere solo i file di sistema.
La doppia funzione della directory dei Receipts
La funzione della directory “/Library/Receipts” è molto importante sia per quanto riguarda la correzione dei permessi che per quanto riguarda l’installazione degli aggiornamenti. Infatti, i file receipts non servono solo per ripristinare i diritti ma sono spesso usati da Mac OS X’s Software Update e da alcuni installer di applicazioni di terze parti per verificare la presenza o meno di particolari software installati. Quindi, se vi venisse voglia di cancellare i file contenuti in questa directory, magari per fare spazio, sappiate che minereste la stabilità del sistema operativo (con le capacità degli attuali hard disk non si pone più il problema dello spazio occupato: la cartella Receipts occupa appena 200 Mb di spazio!)
Il file HintFile.plist
Per vari motivi Apple può decidere che alcuni nuovi file o file recentemente aggiornati debbano avere permessi differenti rispetto a quelli di una versione precedente
Per esempio, immaginiamo un file installato da OS X 10.4.0 con i suoi permessi riassunti nella ricevuta BaseSystem.pkg. Se in un successivo aggiornamento Apple decide di cambiare i permessi per quel file, allora si verifica una discrepanza tra i permessi nuovi e il “modello” contenuto nella vecchia ricevuta: la funzione Ripara Permessi si affretta a ripararli, anche se, alla fine, i permessi risultano “non corretti”. Per evitare simili riparazioni erronee i più recenti aggiornamenti Apple includono un file chiamato HintFile.plist, installato in:
/Sistema/Libreria/PrivateFrameworks/DiskManagement.framework/Versions/A/Resources
che elenca tutti i permessi che dovrebbero essere diversi da quelli elencati nelle ricevute. In pratica si tratta di istruzioni rivolte alla funzione Ripara Permessi che gli dice di lasciar perdere alcune eccezioni sulle varie discrepanze rilevate comparando i file .pkg.
Come mai i permessi dei file vengono alterati?
Nonostante il Mac sia un sistema sicuro, credo che il tallone di Achille di questo sistema operativo, siano appunto i permessi. Infatti, come vedremo, vi sono diversi modi per modificare i permessi. Eccone una breve lista, non esaustiva, ma comunque utile per far capire che i permessi non si alterano da soli, ma c’è sempre un motivo alla causa di questo problema che può creare instabilità di sistema:
- Installer malfunzionanti: un installer scritto male potrebbe cambiare i permessi a file o directory non pertinenti al programma stesso. Secondo alcuni, la causa più probabile dei problemi nei permessi, è sempre derivata da un package di installazione scritto male che, magari, è in grado di alterare i permessi delle directory /Applications o /Library (per esempio, problemi del genere avvenivano per i Macs sotto dominio Open Directory o quando si lanciava il Quark installer)
- Modifiche manuali: un altra ragione che spiega le modifiche dei permessi, è quella dell’utente che, magari per risolvere qualche problema o per eseguire qualche trick, modifica manualmente i diritti dei file e delle directory
- Eseguire il Boot di Mac OS 9: per chi ha ancora una doppia installazione, se si fa il il Boot di Mac OS 9 e si muovono o editano i file presenti su Max OS X, siccome la release 9 non gestiva i permessi dei file, questi non verranno gestiti correttamente.
- Corruzione del disco: i permessi dei file sono, ovviamente, memorizzati sull’hard disk. Se questo, però ha qualche problema di corruzione dei file (a causa di interruzioni di corrente o system crashes), magari anche minima, ciò può portare ad una discrepanza dei permessi dei file
- Restore di file di backup: alcune utility di backup non gestiscono correttamente i permessi dei file. Ciò significa che se si vuole ripristinare alcuni files di sistema, potrebbe non essere in grado di assegnare i giusti privilegi.
I consigli della Apple
Apple dichiara esplicitamente che “Come regola di manutenzione sistematica, è una buona idea riparare i permessi dopo aver aggiornato o installato nuovo software“. Ovviamente, però, il suggerimento di Apple non è necessario seguirlo sempre, ma siccome questa operazione è del tutto indolore e veloce e, se eseguita, non crea alcun problema, (anzi è in grado di risolvere eventuali e remoti problemi di installazioni maligne), si può benissimo decidere di adottare questa regola generale.
Inserire la riparazione dei permessi nel crontab
Se volete, però, potete anche spingervi ad inserire nel crontab questa operazione (schedulandolo, per esempio, alle 2:30 AM), con una riga simile a questa da inserire nel file /etc/crontab:
30 2 * * * username diskutil repairPermissions /
dove username dovrà essere sostituito dal vostro utente di sistema con privilegi da amministratore.
Quando non è necessaria la riparazione dei permessi
Quel che invece dovete sapere è che, se vi state apprestando a fare un upgrade software del sistema operativo, non è necessario lanciare prima l’utility di Riparazione dei Permessi del Disco. Questo perché, per lanciare l’upgrade è necessario loggarsi con un utente che ha pari priviligi di un utente root che, in quanto tale, è in grado di accedere a qualunque file, indipendentemente dai permessi assegnatogli. Inoltre, a fine installazione, tutti i file di sistema saranno stati sovrascritti con i nuovi file con i permessi corretti.
[Il seguente post è una libera traduzione riveduta, corretta e personalizzata dall’articolo in lingua inglese su Macworld; solo dopo aver terminato di scrivere questo articolo, mi sono accorto che già qualcuno aveva pensato di tradurlo tempo fa. Credo comunque di aver dato un tocco personale e aggiunto notizie in più rispetto ai due articoli]
Interessante, non avevo mai approfondito questo aspetto. Grazie della traduzione… e non preoccuparti se esisteva già: chi segue te non è detto che abbia visitato anche quella fonte…
Io ad esempio, senza questo post, non avrei scoperto tante cosette. 🙂
Ciao,
Emanuele
@Emanuele: Contento che ti sia stato utile! 🙂
Pingback: links for 2008-05-09 « Andy’s Blog 9 Maggio 2008
[…] Levysoft » Tutto quello che avreste voluto sapere sulla Riparazione dei Permessi di Mac OS X (tags: macosx) […]
Io invece credevo che facesse una cosa più accurata andando a riassegnare i giusti permessi in base alla posizione, alla tipologia e l’importanza del file e delle cartelle all’interno del FileSystem. Il solito ingenuo che si vuol complicare le cose, in effetti questo modo è ugualmente valido e più potente.
credo che il tuo blog sia uno dei più esaustivi sull’intera rete.
ti ringrazio di cuore.
@kemas: Troppo buono! 🙂
come si fa ad inserire l’operazione in automatico? nel link indicato non riesco a capire
grazie per la cortesia e complimenti per il tutorial