L'autorizzazione bit di esecuzione viene verificata dal kernel all'esecuzione della chiamata di sistema exec (2) (e cugini). Ne avrai bisogno solo per eseguire programmi a livello di kernel.
Solo i programmi con quel bit attivato (a seconda di quali siano i risultati che ti riguardano come proprietario, gruppo o altro è quello che viene controllato) possono essere exec () ed dal kernel.
Un'altra cosa diversa è ciò che fa la shell quando interpreta uno script di shell o perl, o qualunque interprete tu possa avere. Sugli script, il kernel controlla il #!...
all'inizio del file come un numero magico, e lancia la shell indicata lì (sarà necessario anche il permesso di esecuzione per la shell), e tu hai bisogno di legge i permessi su quello script, dato che la shell deve aprirlo e leggerlo per essere interpretato. Per gli script di shell è necessario avere il permesso di lettura e l'autorizzazione all'esecuzione. Ma per gli script di shell è necessario il permesso di lettura solo , poiché è sempre possibile eseguire uno script di shell eseguendo la shell e passando lo script della shell come parametro (o file di input) )
Ovviamente, come è stato indicato, il bit di esecuzione può essere aggirato copiando il programma e rendendolo eseguibile, ma non potrai copiarlo se non hai i permessi di lettura per fare quella copia (continui a essere in grado di eseguirlo).
Prova a modificare (come root ovviamente) le autorizzazioni per ls (1) e renderlo 0111
( ---x--x--x
) e provare a fare una copia eseguibile di esso e vedere come impossibile ottenere la tua copia eseguibile, anche quando continui ad essere in grado di eseguirla.
Sulle directory, eseguire bit significa una cosa diversa. Il kernel usa il permesso ' x
' durante l'iterazione attraverso il percorso (nella funzione kernel namei () ) quindi se non si dispone di autorizzazioni di esecuzione su una directory, non è possibile né utilizzarlo, né i file accessibili attraverso di esso. Anche tu puoi leggere un contenuto di directory con permessi di lettura, ma non puoi accedere ai file in esso contenuti. Oppure, al contrario, puoi avere permessi di esecuzione su una directory ma non avere accesso in lettura, e sarai in grado di utilizzare i file all'interno, ma non sarai in grado di vedere il contenuto della directory.