Come puoi sapere se eseguire un programma richiede root?


10

Capisco che questa è una domanda un po 'fondamentale e forse una sciocca, ma non sono stato in grado di trovare una risposta.

Capisco che ogni file ha il "Executable"bit.

Ho ipotizzato che i programmi che richiedono root, che sono di proprietà di rootutenti e rootgruppi non avranno il Executablebit per Othere che impedirebbero agli utenti non root di eseguirli. Ma nelle directory /bine /sbinvedo che tutti i file hanno autorizzazioni simili-rwxr-xr-x

Quindi cosa determina davvero se un utente deve disporre dell'autorizzazione di root per eseguire qualcosa?


1
Per impostazione predefinita, l'utente o qualsiasi utente può eseguire qualsiasi programma /bino /sbindirectory. Il problema è che alcuni di questi programmi funzionano in modo diverso a seconda dell'utente che li esegue.
Radu Rădeanu,

Risposte:


13

A volte, è nel codice. Ad esempio, a metà strada hwclock.c, troverai:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

che cambierà il comportamento del programma se sei root o no.

Nella maggior parte degli altri casi, è implicito; delegato al kernel. Ad esempio, se il programma chiama la chiamata di sistema che ti consente di riavviare il sistema, funzionerà solo se sei root. Se non sei root, avrai un errore "permesso negato" che l'applicazione (se ben scritta) ti segnala semplicemente. Oppure stai cercando di eliminare un file; se hai il permesso giusto sul file per farlo, avrà successo; in caso contrario, dipende dal fatto che tu sia root o meno --- quando le rmchiamate unlink()il kernel controllerà le autorizzazioni.

Quindi no, in linea di principio non si può dire solo guardando l'autorizzazione dell'eseguibile se il programma richiede o meno i privilegi di root. Molti programmi li richiedono solo per alcune operazioni, quindi sarà davvero difficile fare qualcosa del genere. Il caso di hwclockuno (chiunque può leggere l'orologio, ma solo root può impostare), ma ci sono centinaia di loro ( kill, rm, cat...)

Poi c'è il mondo correlato e interessante dei programmi setuid ...


Quindi in pratica il kernel è "responsabile"? Se il programma effettua una chiamata di sistema, il kernel determina se l'utente che esegue il programma deve essere root e lo applica?
Decano del

2
Fondamentalmente sì. Il programma può eseguire test aggiuntivi, ma il controllo delle autorizzazioni è a livello di kernel. I programmi setuid-root sono l'eccezione; funzionano sempre come root, quindi hanno bisogno di controllare l'autorizzazione (e sono un bel tipo di difetti di sicurezza ...)
Rmano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.