Un asterisco nelle specifiche del comando sudo è sicuro?

5

Questo suggerisce di limitare un utente a un comando specifico con sudo una riga come

%web ALL=(ALL) /usr/bin/service apache2 *

può essere usato. Questa particolare linea limiterebbe l'utente a eseguire il programma citato /usr/bin/service con gli argomenti apache2 * .

service apache2 status

funziona, solo

service apache2

non

Mi chiedo quanto sia pericoloso. * possono essere molte cose, ovviamente. (Non sto parlando di sfruttare il programma con un falso input, questo è ovviamente un problema.)

Suppongo che vada bene perché sudo non sta facendo girare una shell, quindi non si può fare nient'altro con quella stella. Ma rendere questo tipo di assunzione mi rende un po 'a disagio.

Qualche pericolo di cui dovrei essere a conoscenza?

    
posta Elias 14.12.2017 - 11:59
fonte

1 risposta

5

Diverse applicazioni hanno una diversa comprensione di ciò che significa l'asterisco. Le conchiglie tendono a trattarlo per l'espansione dei parametri, che può essere piuttosto complessa nell'implementazione e spesso causa problemi di sicurezza quando viene usata negli script. Sudo, d'altra parte, lo tratta semplicemente come un jolly catch-all per ogni ulteriore parametro in quel singolo comando. In altre parole, consente al comando di servizio di funzionare con qualsiasi argomento che corrisponda alla seguente espressione regolare:

^ apache2 .*

L'aggiunta al tuo sudoers(5) garantirà che sarai in grado di eseguire qualsiasi argomento per lo script init di apache2 come root. Indipendentemente dal fatto che questo sia sicuro dipende da come funziona il servizio. Non c'è nulla di intrinsecamente pericoloso nell'usare un asterisco, ma alcuni comandi ti permetteranno di eseguire altri comandi come argomenti. Ad esempio, se si consente tar(1) con qualsiasi argomento, è possibile che si verifichi un'esecuzione arbitraria del comando sotto forma di tar --use-compression-program=./evil.sh . Non sono a conoscenza di alcun modo per eseguire comandi arbitrari, ma ciò non significa che non ce ne siano o che non ce ne saranno in futuro.

Generalmente si presume che una persona che è in grado di eseguire un comando che gestisce i servizi sia già in una posizione privilegiata, quindi ci sarà poca attenzione nel garantire che il servizio init di apache2 oi comandi di gestione dei servizi non possano essere abusati quando eseguito come root.

Se consideri questo "sfruttando il programma con un falso input" e quindi fuori dall'ambito, è sicuro. La voce sudoers non ti consente, ad esempio, di eseguire service apache2; ./evil.sh come root .

    
risposta data 25.12.2017 - 04:50
fonte

Leggi altre domande sui tag