Quali comandi Linux possono eseguire il codice fornito dall'utente? [chiuso]

3

Come spiegato qui ( link ), il comando tar può essere usato per eseguire codice arbitrario.

Esiste una lista di comandi di Linux, preferibilmente compresi i comandi nei pacchetti nei repository ufficiali, oltre al fatto che siano noti per avere funzionalità che eseguono il codice fornito dall'utente? Ovviamente, tale analisi non può determinare che un comando sia sicuro, solo che non esiste un modo ben pubblicato per eseguire codice arbitrario.

EDIT: il sistema ha un numero limitato di comandi autorizzati e, sebbene vi sia un uso legittimo per tutti (ad esempio kill per uccidere una connessione VPN sospesa), penso che potrebbero esserci anche usi illegittimi. Non sto chiedendo se applicare il principio del minimo privilegio, ma se lo sto applicando efficacemente qui. Piuttosto che chiedere informazioni sui comandi specifici sul mio sistema, ho deciso di porre una domanda più generale.

    
posta Arcanum 28.06.2018 - 04:02
fonte

2 risposte

1

Che cosa stai cercando di proteggere? Sembra che tu stia cercando di proteggerti da utenti malintenzionati che tentano deliberatamente di ottenere un ulteriore accesso al sistema.

In tal caso, suggerirei di provare a trovare un altro modo per gli utenti di realizzare la stessa cosa, senza usare sudo. Scritti suid ben scritti che realizzano la stessa cosa, per esempio. sudo dovrebbe essere limitato agli utenti di cui ti fidi e gli utenti sono abbastanza competenti per comprendere i comandi di Linux (più sotto).

Dovresti considerare anche il caso in cui gli utenti non sono malevoli, ma hanno una combinazione letale di incompetenza e confidenza eccessiva. Diversi anni fa ho dato l'accesso sudo su un server di sviluppo a uno sviluppatore che non era linux savy. Nel giro di una settimana ha completamente distrutto l'ambiente del server linux con un comando find -exec che ha trovato anche se cercando su google come correggere il suo codice. Non ha compreso le implicazioni del comando find -exec e ha completamente modificato tutte le autorizzazioni sul file system (inclusa l'impostazione di binari di sistema critici su non eseguibili). Ho ricostruito il server, le ho parlato della potenza del comando find e rimosso il suo accesso sudo.

In entrambi i casi, potresti comunque utilizzare la whitelist per darti un certo livello di protezione. Il problema con questo approccio è che i comandi linux grezzi eseguiti come root sono estremamente potenti, ed è difficile prevedere tutti i modi in cui malizia o incompetenza potrebbero morderti. Onestamente, eliminare la necessità di sudo in primo luogo è ancora probabilmente l'opzione migliore.

    
risposta data 28.06.2018 - 17:21
fonte
0

@ Il commento di Muhammad ha il diritto di farlo. Se vuoi limitare ciò che i tuoi utenti / software locale possono fare, e prevenire comportamenti arbitrari, ma vuoi anche dare l'accesso a sudo , l'opzione solo è per i comandi di whitelist (entrambe le combinazioni di programma completo percorsi con parametri o una mancanza di parametri esplicitamente specificata, o semplicemente percorsi di programma completi che non hanno modo di ottenere sovrascrittura di file arbitrari o esecuzione di codice - che equivale alla stessa cosa - al di fuori di essi indipendentemente dai parametri). Il file sudoers supporta questo.

Inoltre, è necessario assicurarsi che quei comandi siano installati solo in posizioni in cui gli utenti non-root non possono scrivere. Inoltre, è necessario impedire i comandi che consentono modifiche arbitrarie di nomi di file o contenuti. Se consenti sudo con /bin/ls (che potrebbe essere sicuro, non sto facendo promesse qui) ma permetto anche un comando che mi permetta di inserire un testo arbitrario in un file, posso usare il secondo comando per sostituire /bin/ls con uno script di shell che fa quello che voglio, e poi eseguo sudo ls e intraprendo azioni arbitrarie come root (o qualunque utente /bin/ls è stato impostato per l'esecuzione come sudoers).

Generalmente, l'accesso sudo deve essere limitato a utenti completamente fidati o a comandi molto specifici che devono essere eseguiti con determinati privilegi ma non possono essere utilizzati come leva per ottenere tali privilegi in modo più ampio. Nota che puoi combinarli (ad esempio, lasciando che tutti i membri del gruppo "ruota" usino comandi arbitrari e autorizzino specifici comandi per altri utenti).

Modifica. In precedenza ho detto che dovevi assicurarti di filtrare su percorsi completi, ma sudoers solo consente percorsi completi e sudo builtin, quindi è una specie di aringa rossa.

    
risposta data 28.06.2018 - 13:29
fonte

Leggi altre domande sui tag