In che modo sudo è più sicuro dell'utilizzo diretto di su se all'utente viene concesso l'accesso a tutti i comandi?


40

Quindi ho letto le differenze tra l'utilizzo di sue sudo, e tutti sembrano essere d'accordo sul fatto che l' sudoapproccio sia più sicuro che consentire l'accesso all'account root stesso. Dicono che con l'account root potresti rompere l'intero sistema con un solo comando. Questo lo capisco. MA l'utente iniziale creato sul sistema ha anche accesso a tutti i comandi usando sudo. Questo lo posso scoprire correndo su -l. In questo caso, posso semplicemente correre sudo <game-ending command>per rovinare il mio sistema. Quindi, in che modo questo approccio è migliore o più sicuro, quindi consentirmi l'accesso diretto all'account superutente? Posso eseguire tutti gli stessi comandi ...

È perché usando sudola riga di comando sto esplicitamente dicendo al computer che penso di sapere cosa sto facendo? Pensano che le persone dimenticheranno di avere l'account super user a meno che non lo affermino esplicitamente?

Le persone affermano anche che se il sistema fosse compromesso e inserito da qualcuno straniero, essere sotto l'account di root consentirebbe loro di fare cose terribili al mio sistema. Ma mi sembra che se hanno già accesso al mio account e conoscano la mia password, possono fare queste stesse cose terribili usando sudo e inserendo la mia password poiché non hanno nemmeno bisogno di conoscere la password del superutente. Cosa non ci sto arrivando?



2
Grazie per aver creato questa domanda, quindi ora c'è qualcosa da mostrare alle persone che continuano a dire che sudo è più sicuro ma non può giustificarlo.
user253751

Risposte:


40

Personalmente non lo considero necessariamente più sicuro e la maggior parte dei vantaggi (di sudo) sono su un sistema multiutente. Su un sistema a singolo utente è probabilmente un lavaggio.

I vantaggi sono (in nessun ordine particolare):

  • sudo ha una registrazione superiore. sudo registra ogni comando.
  • sudo consente un controllo più preciso del grano. Si può configurare sudo per dare accesso root ad alcuni ma non a tutti i comandi.
  • sudo utilizza la password di accesso. Questo protegge la necessità di fornire la password di root (come si farebbe con su) ed è correlata al punto precedente per quanto riguarda il controllo / accesso più accurati alla radice.
  • In Ubuntu, per impostazione predefinita, l'account di root è bloccato. Questo impedisce ai cracker di accedere (in remoto tramite dire ssh) devono indovinare sia un nome utente che una password. Se l'account di root non è bloccato, come nel caso di su, devono solo decifrare la password di root.
  • sudo -iè probabilmente il metodo migliore per isolare le variabili ambientali di root dal tuo utente. Di tanto in tanto, ma è moderatamente esoterico. Vedi https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • alcune persone ritengono che dover digitare sudo prima di ogni comando che desiderano eseguire come root o avere il timeout sudo consenta loro di fermarsi e pensare in modo più chiaro e ridurre i propri errori o eseguire comandi errati. In tal caso, anche questo sarebbe un vantaggio.

Probabilmente ci sono più vantaggi, ma, quelli sono i maggiori, IMHO.

Vedi anche - https://help.ubuntu.com/community/RootSudo

Per provare a rispondere ad alcuni dei tuoi altri pensieri:

  • Non c'è nulla su su o sudo che ti impedisce di eseguire codice dannoso fintanto che conosci la password. Né è più sicuro o migliore.
  • I cracker possono ottenere l'accesso alla shell tramite una serie di metodi. Quando vedi "eseguire codice arbitrario" in un avviso di sicurezza - https://usn.ubuntu.com/usn/ - significa che un cracker può eseguire / bin / bash o qualsiasi altro codice. Quindi un cracker, tramite vari exploit, può ottenere l'accesso alla shell senza conoscere il nome di accesso o la password. Né sudo né su aiutano in questo.
  • Se un cracker ha accesso alla shell può causare molti danni senza accesso root. Ad esempio il ransomware che crittografa tutti i tuoi dati personali.
  • Se un cracker ha accesso shell a un account con accesso root, tramite su o sudo, il cracker può ottenere l'accesso root tramite una serie di metodi che esulano dallo scopo di questa discussione. Né sudo né su sono superiori in questo senso.

Quindi, mentre hai riscontrato problemi o difetti con sudo, su ha le stesse vulnerabilità e su non è superiore a sudo in questi aspetti, IMHO


Sarebbe bene optare per consentire a tutti gli utenti il ​​controllo dell'alimentazione (spegnimento e riavvio) in caso di inatallazione di destop, piuttosto che sudoers voci o con un nome di gruppo.
mckenzm,

8
Credo che il più grande vantaggio sia quello di giustificare ogni comando in quanto necessita di autorizzazioni da superutente. Ho scoperto nella mia prima esperienza con Linux che tendevo sempre a funzionare come root in almeno un terminale mentre armeggiavo con il sistema. Sfortunatamente, è molto facile emettere un comando distruttivo al terminale per incomprensioni o errori di digitazione. Se quello si trovava nel "terminale di root", potrebbe comportare un ripristino dal backup o reinstallare. sudo mi ha protetto così tante volte!
Rolinger,

14
Non compromettere la password di root è forse il più grande vantaggio di sudo. Puoi dare il permesso di root senza rivelare alcun segreto.
Thorbjørn Ravn Andersen,

Non solo puoi limitare i comandi, ma puoi anche limitare gli argomenti specificati. Ma non sono d'accordo sul fatto che il root sia bloccato non ha nulla a che fare con esso; perché è possibile configurare ssh per non consentire il login root. C'è qualcos'altro però con su versus sudo: sudo usi la tua password utente che è un numero inferiore di password per essere compromessa e che in genere non è una buona cosa. Come ogni cosa in questo mondo, ci sono diversi modi per fare qualcosa e ciò non significa che un modo sia più corretto degli altri il 100% delle volte, se mai. Quindi ci sono preferenze.
Pryftan,

Ma otoh se è più di un utente che ha bisogno dell'accesso root (che non è qualcosa che entrerò perché è solo - beh è una discussione accesa nella migliore delle ipotesi), allora sudo ha un vantaggio lì.
Pryftan,

10

Immagina di avere 20 minuti per fare qualcosa di complesso. Sei un po 'sbronzo e devi correre. "Usiamo su" dici. "Ti farà risparmiare un po 'di tempo" è il tuo ragionamento.

Per caso digiti

rm -rf /*

invece di

rm -rf ./*

Il tuo sistema ora si sta murando da solo e hai 10 minuti fino alla scadenza.

Se scegli esplicitamente quando hai bisogno di root, puoi ridurre al minimo la possibilità che ciò accada. Potrebbe non essere necessario il root, rm -r ./*quindi perché usarlo? Perché correre il rischio?

Ecco cosa significa "sicurezza" qui. Ridurre al minimo il rischio che gli utenti (tutti gli utenti, non solo i principianti) commettano un errore fatale.

Naturalmente, questo è un esempio estremo che non dovrebbe essere consentito in un ambiente di produzione (garantisco che è successo in un ambiente di produzione).

Per quanto riguarda la sicurezza, ci sono alcune cose per le quali sudo è meglio. Come dice @Panther: registrazione, restrizioni, password di root è SPOF, ecc.)


4
Cavolo, non devi aspettare così tanto se lo fai ... chown -R nobody:nobody /o anche chown -R nobody ../come root. chmodovviamente ha problemi simili anche in modalità ricorsiva. Ma il punto migliore che fai è che dovresti essere root solo quando ne hai bisogno; minore è il privilegio di accesso migliore è per un uso normale.
Pryftan,

2
+1 per la programmazione quando hai i postumi della sbornia però.
abhicantdraw il

4
Quindi, come è diverso sudo? Scrivi sudo rm -rf /*invece sudo rm -rf ./*e boom di nuovo.
ilkkachu,

2
@ilkkachu in termini di comando effettivo, fa la minima differenza su ciò che accade. Ma hai dovuto dichiarare esplicitamente che vuoi farlo come root. Questo è il punto. La sicurezza riguarda la gestione del rischio. Ovviamente puoi ancora mettere in mattoni il sistema. Ma meno tempo hai i privilegi di root, meno possibilità di fare un errore fatale. La sicurezza consiste nel ridurre al minimo le probabilità.
Dijksterhuis,

2
@ilkkachu Perché non scriverei sudo rm -rf ./*. Presumibilmente hai accesso in scrittura alle cose nella directory corrente, quindi non hai bisogno di sudo per quel comando. Così le estremità comando typoed per essere rm -rf /*, che produce una lunga serie di "Permesso negato" messaggi, ti permette di sapere è necessario ctrl-cprima che arrivi la roba si può effettivamente eliminare, invece di eliminazione tutto in /bin, /boot, /dev, e la metà di /etcprima ti rendi anche conto che qualcosa non va.
Ray,

9

Voglio aggiungere un po 'di prospettiva storica alle altre risposte. Sfortunatamente, non ho fonti disponibili, tranne i miei ricordi delle discussioni su Usenet e degli articoli di riviste.

Qualche tempo fa, negli anni '90, le distribuzioni stavano rendendo più semplice l'installazione di Linux sul proprio hardware, anche con poca conoscenza del computer .¹ Pertanto, Linux ha iniziato ad attirare sempre più persone che sorprendentemente non erano state precedentemente esercitate come amministratori di sistema su un dialetto UN * X. Invece, molti sono stati usati per sistemi (singolo utente) come Windows 95/98. E hanno appreso che la maggior parte delle attività di amministrazione del sistema Linux rendevano necessario lavorare con quello strano account "root".

Pertanto, alcuni utenti hanno appena effettuato l'accesso come root e hanno utilizzato quell'account per tutto il loro lavoro quotidiano. Perché dovrebbero dover digitare sue la password di root ancora e ancora o accedere a un nuovo tty solo per alcuni comandi di amministrazione? Ma usare root per ogni cosa non è ovviamente una buona idea, in quanto potresti fare molto più danno al tuo sistema con un comando poco gentile nel posto sbagliato. Ciò ha persino portato alcune distro (era SuSE?) A modificare lo sfondo del desktop affinché l' utente root visualizzasse un grosso avvertimento che si dovrebbe usare quell'account solo per le attività di amministrazione.

Quindi, il modo Ubuntu con sudopresenta alcuni vantaggi (oltre a quelli già elencati da Panther ).

  • Non si può accedere direttamente alla radice account.² :-)
  • Il processo di installazione non ti chiederà una password di root (aggiuntiva), devi solo una password (del tuo utente).
  • sudomemorizza nella cache le tue credenziali, quindi per più comandi di amministrazione in sequenza, devi inserire la password una sola volta (al contrario di su). Ciò riduce la necessità di aprire una shell o un nuovo terminale con privilegi di root .
  • E rende più facile dire agli utenti online e nella documentazione quali comandi devono inserire come admin e quali no

¹ E per coloro che non hanno il coraggio di farlo da soli, c'erano feste di installazione.
² Ma è possibile utilizzare un comando simile sudo -io sudo su - rootper ottenere una shell root dopo aver effettuato l'accesso come utente normale.
³ Ma sai ovviamente che non dovresti semplicemente copiare e incollare i comandi da Internet , giusto?


In Ubuntu stai dicendo che non puoi fare: sudo su -o sudo su - root? Perché ho visto affermazioni simili, ad esempio che MacOS X non ha root ma è completamente sbagliato quando si deve solo fare il primo comando ...
Pryftan,

2
Naturalmente c'è un account root . Ho detto che non è possibile "accedere direttamente", il che significa che non è possibile inserire l'utente roote una password al prompt di accesso o nella finestra di dialogo di accesso X e avviare la sessione come root. Ma puoi usare uno dei tuoi comandi (preferisco sudo -iperché è più corto e sono pigro) per ottenere una shell di root.
Dubu,

1
Per favore, leggi di nuovo il mio commento :) Ho detto che alcuni dicono che MacOS X non ha un account di root, ma in realtà lo fa e mi ha ricordato questo (non l'ho equiparato al fatto che non c'è un account di root in Ubuntu). Ma per quanto ne so gli sviluppatori di Ubuntu erano abbastanza pazzi da patchare sudo da non permettere che da qui la mia domanda.
Pryftan,

1
@Pryftan Come ho detto nel mio commento sopra, entrambi i tuoi comandi funzionano e ti daranno una shell di root. Lo aggiungerò alla mia risposta.
Dubu,

Sì. Lo so :) Non stavo dicendo che fosse falso o no. Stavo dicendo che mi ha ricordato qualcosa che alcune persone dicono ma non sono corrette nel dire. Quindi rendendo audace quella parte.
Pryftan,

2

Per decenni è stato possibile disabilitare il login root tramite ssh. Il modo Ubuntu di disabilitare l'account di root e fare in modo che le persone facciano tutto non è altro che un trucco. Solo "sudo -s" e hai una shell di root. Disabilita il login root tramite ssh e lascialo lì.


8
... su quella nota, andare solo in chiave per QUALSIASI login ssh, non solo per l'account root, È un'ottima pratica.
Rackandboneman,

Sì. L'ho notato in un commento solo pochi minuti fa. Essere meno privilegiati è la cosa migliore in assoluto, quindi elevare solo quando è necessario e questo vale sia per l'accesso da ssh che localmente. E quello che dice @rackandboneman è ovviamente assolutamente corretto anche se per me disabilito il root remoto completo anche con i tasti ssh indipendentemente dal sistema.
Pryftan,

0

A seconda della configurazione, sudo <game ending command>non funzionerà necessariamente. Naturalmente, se la sudoersconfigurazione legge "user ALL = (ALL) ALL", sudonon offrirà alcuna protezione aggiuntiva. Puoi comunque specificare un elenco di comandi privilegiati che devi eseguire spesso, come installare nuovi pacchetti, e tralasciare comandi pericolosi come rm.

In questo modo è possibile eseguire tutti i comandi se si accede come root, ma poiché sarà necessario solo occasionalmente, il rischio di esecuzione <game ending command>sarà sostanzialmente ridotto.


1
E argomenti specifici anche per i comandi.
Pryftan,

1
E per gruppo anziché per utente. l'utilizzo di gruppi ha un valore inestimabile in ambienti multiutente dove il personale può andare e venire e dove potresti aver bisogno di ruoli specifici.
Pantera,

0

Che sudo ti permetta di consentire solo determinati comandi non è l'unico vantaggio di sudo rispetto a su.

Nella maggior parte dei negozi, non è nemmeno il vantaggio più importante.

Con sudo, sai chi ha eseguito un comando particolare.

Ora forse questo non ti interessa. Ad esempio, potresti essere l'unico utente del tuo computer. Se è così, allora sudo probabilmente non è meglio di su.

Ma molti host hanno più di un amministratore.

sudo diventa quindi molto utile perché se qualcuno fa la cosa sbagliata, sudo ti fa sapere chi è stato.

Ciò consente di comprendere perché si sono verificati errori e di educare le persone a prevenire errori ricorrenti o, se necessario, a rimuovere gli strumenti da qualcuno.

Come bonus, quando le persone sanno che le loro azioni sono registrate, spesso sono un po 'più attente.

Il Sudo non è perfetto.

Se due persone fanno "sudo sh" allo stesso tempo, allora può essere difficile attribuire comandi all'uno o all'altro.

E un amministratore malintenzionato può sempre rimuovere o modificare i registri, anche se farlo in modo pulito non è sempre facile come la gente pensa, soprattutto se si dispone di una registrazione centralizzata.

sudo non necessariamente ferma un'azione stupida o dannosa, per tutti i motivi identificati nella domanda originale.

Ma ti dà una possibilità molto migliore di prevenire una ricorrenza.


1. Solo se si prende il tempo per configurarlo correttamente. Cosa che il sistema Ubuntu predefinito non fa (e non può fare). 2. Solo se l'utente non ha modo di modificare i registri post-fact, cosa che può fare a meno che i comandi che possono eseguire non siano limitati. (Che non è nel caso d'uso predefinito di Ubuntu)
ilkkachu il

@ilkkachu, anche se hai dei buoni punti, la tua discussione qui non ha senso qui. Il punto non è le impostazioni predefinite, il punto è che è possibile configurare e mettere a punto sudo. Non è possibile configurare su per agire in questi modi. su è tutto o nessuno, non c'è modo di limitare i comandi ed è un dato di fatto che sudo fornisce una registrazione superiore. Né su o sudo offrono alcuna protezione contro ciò che un cracker può o non può fare su un sistema compromesso, e nessuno ha tenuto sudo in questo modo. I registri sudo hanno un grande valore nelle normali operazioni quotidiane.
Pantera,

@Panther, beh, il titolo della domanda dice "... se all'utente viene concesso l'accesso a tutti i comandi?" quindi ho pensato che intendessero la solita configurazione predefinita di Ubuntu in cui sudotutto è permesso . Certo, puoi configurarlo per limitare i comandi che un utente può eseguire, ma non penso che sia il caso nella domanda come chiesto.
ilkkachu,

Risposta espansa.
Ben Aveling,

@ilkkachu - rileggi la mia risposta "Personalmente non lo considero necessariamente più sicuro e la maggior parte dei vantaggi (di sudo) sono su un sistema multiutente. Su un singolo sistema utente è probabilmente un lavaggio." Ho quindi continuato a spiegare gli altri vantaggi di sudo, uno dei quali è che è configurabile.
Pantera
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.