Innanzitutto, un chiarimento:
Richiede il privilegio di root per modificare l'autorizzazione a un file.
Da man 2 chmod possiamo vedere che la chiamata di sistema chmod () restituirà EPERM (un errore di permessi) se:
L'UID effettivo non corrisponde al proprietario del file e il processo non è privilegiato (Linux: non ha la capacità CAP_FOWNER).
Ciò significa in genere che si sia bisogno di essere il proprietario del file o l'utente root. Ma possiamo vedere che la situazione in Linux potrebbe essere un po 'più complicata.
Quindi, ci sono delle relazioni tra root e kernel?
Come ha sottolineato il testo che hai citato, il kernel è responsabile di verificare che l'UID del processo che effettua una chiamata di sistema (ovvero l'utente con cui è in esecuzione) sia autorizzato a fare ciò che chiede. Pertanto, i superpoteri di root derivano dal fatto che il kernel è stato programmato per consentire sempre un'operazione richiesta dall'utente root (UID = 0).
Nel caso di Linux, la maggior parte dei vari controlli delle autorizzazioni che avvengono verificano se l'UID specificato ha le funzionalità necessarie . Il sistema di funzionalità consente un controllo più preciso su chi è autorizzato a fare cosa.
Tuttavia, al fine di preservare il significato UNIX tradizionale dell'utente "root", un processo eseguito con l'UID di 0 ha tutte le funzionalità.
Si noti che mentre i processi in esecuzione come UID = 0 dispongono dei privilegi di superutente, devono comunque effettuare richieste del kernel tramite l'interfaccia di chiamata di sistema.
Pertanto, un processo di spazio utente, anche in esecuzione come root, è ancora limitato in ciò che può fare in quanto è in esecuzione in " modalità utente " e il kernel è in esecuzione in " modalità kernel " che sono in realtà modalità di funzionamento distinte per la CPU stessa. Nella modalità kernel un processo può accedere a qualsiasi memoria o inviare qualsiasi istruzione. Nella modalità utente (sulle CPU x86 ci sono in realtà un numero di diverse modalità protette), un processo può accedere solo alla propria memoria e può solo dare alcune istruzioni. Quindi un processo di spazio utente in esecuzione come root ha ancora accesso solo alle funzionalità della modalità kernel che il kernel espone ad esso.