Perché devo usare sudo per quasi tutto?


64

Se capisco correttamente la filosofia di Linux, sudodovrebbe essere usato con parsimonia e la maggior parte delle operazioni dovrebbe essere eseguita come utente con privilegi limitati. Ma questo non sembra avere senso, dal momento che devo sempre inserire sudo, sia che gestisca i pacchetti, che modifichi i file di configurazione, che installi un programma dal sorgente o che cosa hai. Queste non sono nemmeno cose tecniche, proprio tutto ciò che fa un utente normale.

Mi ricorda molto l'UAC di Window, che le persone disabilitano o configurano per non richiedere una password (solo un clic). Inoltre, molti utenti Windows sono anche account amministratore.

Inoltre, ho visto alcune persone visualizzare comandi che richiedono sudoprivilegi senza sudo. Hanno il loro sistema configurato in modo tale da sudonon essere richiesto?


25
Devi usare sudoper fare qualsiasi cosa che implichi la modifica del sistema, se stai solo operando sui tuoi file / desktop non stai influenzando nessun altro, quindi non hai bisogno di privilegi elevati. Se stai eseguendo comandi privilegiati senza sudo, probabilmente sei già un super utente (cioè root) e di solito è meno consigliabile che usare sudo per le attività specifiche del sistema
Eric Renouf,

75
"Installa un programma dalla sorgente ... qualsiasi cosa faccia un utente normale" --- Penso che tu abbia sopravvalutato le capacità tecniche degli utenti normali.
Jonathan Cast

7
Stai usando sudoquando non dovresti? I normali comandi di un utente Unix dovrebbero consistere principalmente di cd, lsspostare, copiare, rimuovere e modificare i file a cui hanno accesso. Se i tuoi soliti comandi non consistono in questo, probabilmente non sei un normale utente Unix.
user530873,

20
Piccolo suggerimento: se fai qualcosa che richiede sudo ma hai dimenticato di mettere sudo nel tuo comando, puoi usare sudo !!per rieseguire l'ultimo comando che hai digitato con sudo in primo piano.
Asfallows

6
Non passi la maggior parte del tempo a utilizzare il software che hai installato? Ciò non dovrebbe comportare sudo. In caso contrario, perché lo stai installando?
Smetti di fare del male a Monica il

Risposte:


75

Hai menzionato queste funzioni di amministrazione del sistema

gestione dei pacchetti, modifica dei file di configurazione, installazione di un programma dal sorgente

come cose che

qualsiasi cosa faccia un utente normale

In un tipico sistema multiutente non si tratta di normali azioni dell'utente; un amministratore di sistema se ne preoccuperebbe. Gli utenti ordinari (non "con privilegi") possono quindi utilizzare il sistema senza preoccuparsi della sua manutenzione.

Su un sistema domestico, sì, si finisce per dover amministrare il sistema oltre a usarlo.

È davvero una tale difficoltà da usare sudo? Ricorda che se è solo il tuo sistema non c'è motivo per cui non puoi né entrare in una rootshell ( sudo -s- vedi questo post per una panoramica di vari modi per ottenere una shell di root) e / o configurare per sudonon richiedere una password.


47
non c'è motivo per cui non è possibile [...] configurare sudo per non richiedere una password. Non consiglierei che, se avvii uno script dannoso, sarà in grado di fungere da root sul tuo sistema.
AL

5
Se l'inserimento della password sudo ti dà così tanto fastidio che in pratica si pilota automaticamente l'immissione della password, non sarà di aiuto neanche. Devi bilanciare la sanità mentale con la sicurezza. Ho autopilotato sudo eliminato almeno una volta i principali blocchi del sistema operativo.
Nelson,

33
Personalmente amo sudo- è come un controllo di sanità mentale.
Max Williams,

6
@MaxWilliams, sì esattamente, è quella piccola cover trasparente in plastica sul grande pulsante rosso che ti chiede, sei sicuro di sapere cosa stai facendo?
KlaymenDK,

15
@AL: Se ho intenzione di eseguire uno script sconosciuto, è meglio che non sia dannoso o sono fregato se esegue o meno sudo. Sul mio desktop personale sono importanti i miei dati (non root), non la configurazione (root) della macchina in sé.
jrw32982 supporta Monica il

31

Sudo / Root viene utilizzato ogni volta che si sta facendo qualcosa che un utente standard non dovrebbe avere la capacità di fare per il rischio di danneggiare / modificare la configurazione del sistema in un modo che l'amministratore del sistema normalmente non consentirebbe.

sia che gestisca i pacchetti, che modifichi i file di configurazione, che installi un programma dal sorgente o che cosa hai.

Tutte queste sono tecnicamente funzioni di amministrazione e possono danneggiare drasticamente il sistema in caso di errori. In un ambiente aziendale, come amministratore di sistema, sono cose che NON permetterei al mio utente di fare a meno delle mie conoscenze espresse, quindi sudo.

Ad esempio, se un file pacchetto / config potrebbe essere modificato senza privilegi elevati, sarebbe estremamente semplice per un sorgente esterno eseguire semplicemente un codice remoto che potrebbe danneggiare / compromettere il sistema. Obbligando tali azioni a richiedere l'accesso come root, ti obbliga come utente a decidere se tali azioni hanno luogo o meno.

È molto simile a quello di UACWindows, è in realtà Windows che ha avuto l'idea UAC.

Il preventivo che ricevi la prima volta che usi sudo è molto appropriato e molto importante:

Confidiamo che tu abbia ricevuto la solita lezione dall'amministratore di sistema locale. Di solito si riduce a queste tre cose:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Soprattutto # 2, pensa prima di digitare. Questo è un motivo importante per cui sudo esiste, quando si digita un comando e si riavvia "deve essere root per eseguire questa azione", costringe a fermarsi e PENSARE a ciò che si sta effettivamente facendo.


19

Inoltre, ho visto alcune persone visualizzare comandi che richiedono sudoprivilegi senza sudo. Hanno il loro sistema configurato in modo tale da sudonon essere richiesto?

Devi eseguire quei comandi come superutente, ma non devi eseguirli usando sudo. Ad esempio, potresti invece utilizzare suo doas(sostituzione OpenBSD per sudo), oppure puoi semplicemente accedere come root.

Quindi, se visualizzano i loro comandi qui senza sudoche presumono che il lettore userà il suo modo preferito di eseguire quei comandi come superutente.
Certamente non significa che possano eseguire quei comandi come un normale utente.


4
puoi anche usare sudo -io simili per ottenere una shell di root e quindi iniziare a eseguire i tuoi comandi di root senza bisogno di prefigurarli consudo
cas

2
Di solito i passaggi che devono essere eseguiti come root sono mostrati con un prompt di root, ad esempio # vi /etc/hostsinvece di un prompt senza privilegi $ vi /etc/hosts(Bash seguirà la convenzione se si usa \$in PS1)
Gert van den Berg

16

Una funzionalità di sicurezza offerta da sudoè che puoi avere un sistema senza rootpassword , in modo che l' rootutente non possa accedere direttamente. Ciò offre una protezione aggiuntiva per gli utenti che scelgono password deboli: l'attaccante che cerca di forzare la password (tramite SSH o altro) dovrà prima individuare un nome utente valido.

Un altro aspetto è una gestione dei privilegi più dettagliata. Pensa al make; sudo make installvs fare make; make installcome root. Molte cose possono andare storte durante make. Uno strumento mal configurato può tentare di sovrascrivere un file di sistema importante, "ripulire" /libinvece della directory corrente, consumare tutta la RAM disponibile e bloccare il sistema, ecc. make installÈ una piccola azione semplice con molte meno probabilità di un errore fatale.


1
E anche se è configurata una password di root, ti consente di dare a un utente l'accesso ai comandi che richiedono privilegi di root senza fornire loro la password di root, il che significa che se si tratta di un server aziendale e vengono licenziati, devi solo disabilitare il loro utente , senza dover cambiare la password di root.
Gert van den Berg,

13

Il punto è che storicamente un sistema è realmente destinato a essere condiviso da più utenti che accedono, fanno alcune cose e poi si disconnettono. Quindi la distinzione tra admin e utente normale. Tali sistemi esistono ancora nei laboratori universitari e puoi percepire la differenza nettamente se usi tali computer. Il PC di casa in cui sei l'unico utente e devi anche agire come amministratore è davvero uno sviluppo molto più tardi.


6
"Esistono ancora nei laboratori universitari" ... sì, e tutte le società centrate sulla tecnologia del pianeta, e anche quelle non tecniche. Tuttavia, +1 per aver dato la distinzione esatta che l'OP è ovviamente mancante e che la maggior parte degli altri responder non ha enfatizzato.
Wildcard il

@Wildcard Lol sicuro. Immagino solo l'esempio che mi è saltato subito in testa.
xji,

10

Un computer è uno strumento. Proviamo un'analogia con un altro strumento, diciamo una padella. A volte, devi prenderti cura della tua padella. Ad esempio, devi pulirlo con detersivo per piatti. Diresti che il detersivo per piatti è un ingrediente necessario per qualsiasi ricetta per cui usi la padella? Non vedrai mai il "detersivo per piatti" elencato come ingrediente nei libri di cucina. È necessario, ma la preparazione dello strumento è un'altra questione, quindi i libri di cucina non ne parlano. La padella deve essere pulita, ma non è fatta per questo.

È lo stesso per il tuo computer. Deve essere configurato e curato, ma non è quello per cui è stato creato. Ti prendi cura di te, lo configuri, in modo che possa funzionare correttamente. Fatto ciò, è possibile utilizzarlo non come amministratore di sistema, ma come utente. Questo è ciò per cui è fatto. Quando sei un utente, non hai più bisogno di sudo . Usa semplicemente lo strumento che hai preparato in precedenza. Certo, di tanto in tanto, dovrai usare i privilegi di root, proprio come devi pulire la padella tutte le volte che la usi per cucinare.

Quindi, senza esagerare troppo, potremmo dire che non hai mai bisogno di sudo (o della password di root) per usare il tuo computer. Solo per preparare il tuo computer.


2
Grande analogia, ma a volte hai bisogno di quel sapone per estrarre alcuni brutti resti carbonizzati dalla padella prima di friggere le uova strapazzate, cioè entrambe le cose si collegano abbastanza facilmente. Con un computer che possiedi, puoi "lavarlo" / "friggerlo" quasi immediatamente con sudoo semplicemente vai a fare lo chef su.
Armfoot,

Sembra che tu abbia bisogno di un accesso root per cucinare, poiché è più pericoloso.
deltaray,

6

Scommetto che è perché usi il software della GUI per tutto tranne che per le attività amministrative del sistema, o stai parlando di server Linux, nel qual caso la maggior parte dell'accesso sarà naturalmente l'amministrazione del sistema. Pertanto, potrebbe essere necessario fare qualsiasi cosa nella shell sudo.

È anche possibile utilizzare la shell per le attività quotidiane. Gestire i tuoi file personali ~, modificare file, chattare su IRC, compilare codice, navigare sul web, tutto ciò è possibile in una shell. Uso persino bcil mio calcolatore di riferimento. Alcune cose sono più facili da fare tramite una GUI, alcune cose sono più facili da fare tramite la shell - anche se preferisci usare la GUI, la shell eccellerà spesso nelle operazioni batch e nell'automazione (pensa agli script della shell). Personalmente utilizzo il meglio per l'attività da svolgere.

In alcuni casi è una buona idea configurare il sistema in modo che non sia necessario utilizzarlo sudoogni volta per operazioni che per impostazione predefinita richiedono il root ma è improbabile che possano causare problemi. Un esempio è che lavoro con l'hardware che prevede l'uso di porte seriali e ho impostato le regole udev per consentire l'accesso ai dispositivi come utente normale senza dover essere root.

Non credo sia una buona idea configurare sudoper non richiedere una password. Rende troppo facile rovinare l'intero sistema con un comando errato o uno script dannoso.

Se è necessario eseguire attività che richiedono sempre il root in qualsiasi momento, perché non lasciare una sudo -sshell root persistente in esecuzione in una finestra terminale? Quindi sarà disponibile senza dover digitare la password e non è così facile da usare accidentalmente. Ho anche impostato il mio prompt della shell in modo che sia rosso vivo quando si è in una shell root.


5

[...] Ma questo non sembra avere senso, dato che devo sempre inserire sudo, sia che gestisca i pacchetti, che modifichi i file di configurazione, che installi un programma dal sorgente o che cosa hai. [...]

L'aggettivo implicito correlato a tutti questi è che si tratta di cambiamenti a livello di sistema o globali . È necessario considerare le origini di Unix come un sistema multiutente 1 in cui più utenti utilizzerebbero la stessa installazione da remoto. Non avrebbe senso per un utente laico consentire di modificare le impostazioni globali per tutti gli utenti. Era il privilegio e la responsabilità del amministratore di sistema, della radice.

In un'impostazione multiutente hai il software preinstallato e la loro configurazione a livello di sistema in /usre /etcrispettivamente. Toccare queste posizioni richiederebbe i permessi di root. Ma poiché il software Unix è stato progettato pensando a più utenti, è possibile compilare e installare il software nella $HOME directory 2 e avere i propri file di configurazione nella propria abitazione, dove è possibile modificare i file liberamente senza essere un superutente.

Oltre a installare il proprio software sotto casa, la maggior parte dei software a livello di sistema leggerà la configurazione specifica dell'utente $HOMEsubito dopo aver letto la configurazione da /etc. Ciò ti consente di personalizzare quasi tutto senza mai andare root.

Con un PC di casa, in un'unica impostazione dell'utente principale, puoi utilizzare sudoe eseguire il root su ciò che ti piace. Ma è consuetudine non toccare la configurazione dell'applicazione /etcma fornire sempre la configurazione specifica dell'utente in casa. In questo modo puoi consentire al gestore dei pacchetti di ripristinare le configurazioni a livello di sistema sugli aggiornamenti. L'installazione di un nuovo software a livello di sistema è abbastanza OK nelle impostazioni per utente singolo; i pacchetti di distribuzione non assumono le alternative, quindi è una soluzione semplice.

Lascerò che il mio gestore di pacchetti installi roba a livello globale, ma qualsiasi materiale compilato da fonti e fatto da me stesso che lascio sotto $HOME. E non devo fare nulla per quello.

Se hai file di dati, spazio di archiviazione esterno al tuo $HOME, sentiti libero chowno chgrple directory a tuo nome in modo da poter accedere ai file senza sudo.

[1] (leggermente ironico come Unix doveva essere una versione "single user" del sistema operativo Multics)

[2] (se il sistema lo consente non montando le partizioni domestiche come noexec)


2

Nei tipi di sistemi multiutente per cui UNIX (e, per discendenza, Linux) è stato progettato, queste non sono azioni ordinarie dell'utente . Un amministratore di sistema potrebbe eseguirli, ma non utenti tipici, e quindi il sistema chiede di assicurarsi che l'amministratore di sistema voglia effettivamente farlo.

Ma anche nei sistemi domestici a utente singolo, queste non sono azioni ordinarie dell'utente . In genere, è necessario eseguire queste operazioni quando si configura inizialmente il sistema, ma una volta terminato, un utente normale non dovrebbe doverlo fare molto spesso . La maggior parte degli utenti tipici lavora solo sui file all'interno della propria directory home (o delle sue sottodirectory), usando programmi / pacchetti che sono già stati installati e non è necessario sudo. Oppure potrebbero funzionare in una directory speciale da qualche altra parte sul sistema che è stata messa da parte a tale scopo, e devi sudoconfigurarlo, ma in genere devi farlo solo una volta.

Perché è importante? Perché "single-user" è un termine improprio: non sei l'unico utente della tua macchina, anche se potresti essere il suo unico utente umano . Anche su una tipica installazione Linux domestica, molti programmi sono configurati per utilizzare la macchina in vari modi, simulando spesso qualcosa che un essere umano potrebbe fare se avesse il tempo e l'attenzione da dedicare: backup, aggiornamenti, scansione del malware e piace. Il più delle volte, quegli usi sono completamente benigni, ma anche per alcuni di questi, è ancora prudente assicurarsi che l'utente voglia davvero farlo. E quando si presentano questi casi, questo è ciò che sudoserve. Il computer sta effettuando il check-in per assicurarsi che sei davvero tu che vuoi fare quello che qualcuno (forse tu, forse un programma) ha detto che hai fatto. E questo non sta nemmeno entrando nella possibilità del malware, che certamente non vuoi mascherare come te.


1

Questo probabilmente non è così comune come rappresentato, ma di solito accade quando qualcosa di casual internamente richiede una chiamata di sistema privilegiata molto più generica per ottenere il suo risultato, ad esempio:

  • Smonta e porta via una chiavetta USB. umountè un comando serio in quanto puoi smontare molte cose con esso.
  • Connettiti alla rete wireless locale. Niente di straordinario, ma la configurazione di rete ( ifup, ecc.) È solo per superutente.
  • App autoaggiornamento che si rifiutano di essere eseguite se non aggiornate. Aggiorna = installa, e questo potrebbe installare molte cose, incluse quelle che non vuoi.

I sistemi generalmente si evolvono per ridurre il numero di tali casi. Le chiavette USB sono ora montabili dall'utente e le reti sono collegabili dall'utente. Ma non è stato sempre così.


0

Presupposto: questo è il tuo sistema e i tuoi dati.

Devi solo ponderare il rischio di cancellare accidentalmente i dati o di murare il tuo sistema operativo rispetto alla facilità di fare cose senza digitare sudoogni volta.

Accedo regolarmente e lavoro come root sui miei server di casa perché io posso è più semplice.

Ti verrà detto che puoi lanciare armi nucleari se non vai attraverso il sacro santo, sudoma la realtà è che oggi le persone hanno rootpoteri (*) su molti dispositivi (TV, telefono, tostapane, Windows (come hai nominato)). Linux non è diverso qui, anche se a molti piace pensare diversamente.

BTW UACnon è stato modellato sudocome il suo ruolo di uomo è (oltre a rendere la tua vita miserabile) per garantire che vedrai quando il malware vuole fare cose per tuo conto.

(*) i rootpoteri sono definiti come la capacità di aggiungere dati importanti. Si applica l'adagio "con grande potenza derivano grandi problemi" (o qualunque cosa fosse).

Se la mia ipotesi è errata, devi comunque ponderare il rischio sopra ma ci sono più variabili (il tuo lavoro, le foto scattate dal tuo coniuge e archiviate sullo stesso laptop, ...)


1
i poteri di root non sono la capacità di annotare dati importanti. Puoi sempre rm -rf ~/senza autorizzazioni speciali. D'altra parte, non è possibile murare il telefono cellulare o la TV senza prima eseguirne il root.
Dmitry Grigoryev,

Un dispositivo è utile quanto i dati che archivia e i servizi che fornisce. L'hardware e il sistema operativo che si trova di seguito è un semplice prodotto. Quindi il potere è dove puoi avere un impatto su servizi o dati. Su una TV puoi cancellare tutte le tue impostazioni: la TV è inutilizzabile (prima di ripristinare i dati). Puoi cancellare tutti i tuoi dati su un telefono cellulare, che diventa quindi un componente hardware senza alcun uso. Questo è ciò che intendevo per "potere della radice"
WoJ,

1
In effetti, chiamare questo "potere di radice" è un uso improprio. La parola "root" è già sovraccarica per significare almeno tre cose diverse (l'utente root, la directory / e la directory / root) e l'aggiunta di un'altra non è utile. Su una macchina a utente singolo, anche se l'utente non privilegiato può già eliminare i propri file, la sua incapacità di svolgere determinate attività amministrative senza usare sudo lo protegge ancora da varie cose cattive.
Monty Harder,

1
La tua analogia TV non è buona. Cancellare le impostazioni sulla TV è come cancellare i file di configurazione dell'utente su Linux - in genere ciò fa semplicemente funzionare il sistema in base a una serie di impostazioni predefinite per quell'utente e di solito non fa alcun danno al sistema. Root ti consente di modificare il sistema stesso: sulla TV sarebbe come modificare il firmware, nel qual caso puoi interrompere la sua capacità di funzionare effettivamente.
JBentley,

1
Ecco perché esiste una valutazione del rischio. Valutate i rischi di fare qualcosa (che ha i suoi pro e contro) e accettate, mitigate o assicurate. Il recupero può essere semplice (finestra mobile, istantanee di macchine virtuali) o difficile (installazione da zero): è una questione di pianificazione e, ancora, di valutazione. Ma come hai detto, non capisco cosa significhi l'accesso root, sia esso.
WoJ,

0

A difesa della persona che ha scritto la domanda iniziale, ho avuto la stessa domanda negli anni passati, ma ho adottato un approccio diverso.

La maggior parte delle risposte qui possono essere semplicemente riprodotte in loop, perché continuano a sottolineare lo stesso punto su sudo e root. Vorrei aggiungere una prospettiva diversa a questo argomento:

Il modo in cui ho imparato a fondo Unix e Linux è stato usando uno dei miei computer come "cavia". Installerei SCO Linux, e infine Solaris e poi Linux molto più tardi, nel frattempo sperimentando gioiosamente come root in modo da poter leggere e / o esplorare la gerarchia di directory e tutti i file con accesso illimitato, creando anche account "utente normale" a casa mia multi-user box, anche se ero l'unico utente. E sono contento di averlo fatto in quel modo. Ho imparato così tanto sulla "filosofia Unix" e sul modo in cui Unix doveva essere utilizzato dai miei esperimenti.

Mi sono divertito molto a conoscere la sicurezza e ho anche eseguito comandi pericolosi digitando rm -rf / * in un terminale come root. (NON FARE QUESTO! TUBERÀ IL TUO SISTEMA !!) Ho fatto cose come questa e molti altri comandi, solo per vedere cosa sarebbe successo in tempo reale. Ho fatto questo tipo di cose conoscendo prima le conseguenze, eppure ho ancora imparato molto facendo così. Stavo usando SCO Unix LONG prima ancora che esistesse il web (sì, sono così vecchio!) E sperimentare in questo modo è stato prezioso per il mio apprendimento.

Quindi quello che sto dicendo è se non ti dispiace fare le re-installazioni quando qualcosa va storto, usa su o accedi come root tutto quello che vuoi e configura / scatta via! Imparerai moltissimo facendo così.

Ricorda solo che i consigli che sono stati ripetuti molto qui sono stati ribaditi per una buona ragione: i protocolli delle migliori pratiche si sono evoluti nel corso dei decenni con l'evoluzione di compsec e DOVREBBE prestarti attenzione, anche come utente domestico / singolo del tuo sistema . In questo modo, una buona igiene / abitudini di amministratore di sistema diventerà una seconda natura per te.

Solo qualche spunto di riflessione sul tema del su e del sudo. Happy hacking!

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.