Quanto è universale sudo?


26

Stavo scrivendo alcune istruzioni su come installare qualcosa (relativo a TeX - se non lo chiedi, non ti rovinerò la giornata fornendo maggiori dettagli) e usato sudoper l'installazione a livello di sistema. Qualcuno ha commentato di non pensare che sudofosse disponibile su tutte le distribuzioni Linux (o Unix).

Ci sono distribuzioni Unix che non hanno sudo, e se sì quali sono? Esiste un comando "Ottieni privilegi di superutente" universalmente riconosciuto che si trova su tutti i sistemi?

Risposte:


34

sudo non può essere considerato universale:

  • Red Hat Enterprise Linux : sudoè installato di default su Red Hat Enterprise Linux e sui suoi derivati, 1 ma si installa solo pronto per l'uso in RHEL 7 e versioni successive.

    Red Hat Enterprise Linux 7 ha aggiunto una nuova opzione alla schermata di installazione in cui si crea il primo utente non root , una casella denominata "Rendi questo amministratore utente". Il suo scopo non è documentato in quella pagina della guida all'installazione, ma uno dei suoi effetti è quello di consentire all'utente di eseguire qualsiasi comando sudo. Lo fa aggiungendo quell'utente al wheelgruppo, che può eseguire qualsiasi comando nella sudoconfigurazione del pacchetto di magazzino .

    Anche Red Hat Enterprise Linux da 3 a 6 è installato sudodi default, 2 ma fino a RHEL 7, è stato configurato in modo tale da rootpoter eseguire solo i comandi. Il modo più semplice per risolvere questo problema è aggiungere uno o più utenti al wheelgruppo, quindi eseguire visudocome root e rimuovere il commento dalla %wheel ALL=(ALL)...riga.

  • Debian : A partire da Debian 9, include un'installazione minima sudo.

    In Debian 7 e 8, è stato necessario selezionare il pacchetto " Utilità di sistema standard " impostato durante l'installazione per ottenere sudo. Se si installa in sudoquesto modo, il programma di installazione del sistema operativo aggiungerà automaticamente al gruppo l'utente non amministrativo creato in precedenza nel processo di installazione sudo, che dispone dell'autorizzazione per eseguire tutti i comandi.

    In Debian 6 e versioni precedenti, era necessario installare sudovia apt-getdopo l'installazione e la configurazione a mano per concedere agli utenti non-root la possibilità di usarlo.

  • FreeBSD : sudonon è installato di default in FreeBSD. Devi costruirlo da Porte.

  • NetBSD : uguale a FreeBSD.

  • OpenBSD : sudousato per essere installato di default in OpenBSD, ma hanno commutato a doaspartire dal 5.8, rilasciato nel ottobre 2015 . doasnavi disabilitate di default.

    Per accedere sudoalle versioni correnti, è necessario installarlo dal repository dei pacchetti. Il sudopacchetto di OpenBSD è configurato in modo molto simile a RHEL da 3 a 6, in modo tale che solo rootpuò eseguire comandi attraverso di esso, il che piuttosto vanifica lo scopo di sudo. Se hai aggiunto un non rootutente durante l'installazione, è stato aggiunto al wheelgruppo, quindi il modo più semplice per rendere sudoutile su un sistema OpenBSD è decommentare la %wheel ALL=(ALL)...linea tramite visudo.

  • Solaris : sudoè installato per impostazione predefinita in Solaris 11, ma Solaris 10 e versioni precedenti utilizzano lo stesso modello ma non lo stesso pfexec.

    È possibile ottenere sudosistemi meno recenti, ma i valori predefiniti sono importanti. Solaris 10 e più vecchi saranno con noi per anni, quindi se hai Solaris nel tuo ambiente e non hai il controllo personale di tali sistemi e quindi puoi assicurarti che sudosia lì, non puoi contare su di esso.

Più vecchio è il sistema, maggiori sono le possibilità che non ha sudo. Sebbene sudosia molto vecchio , non ha iniziato a diventare popolare fino alla metà degli anni 2000. È improbabile che sistemi più vecchi di quello sudo. Le scatole Unix tendono a vivere a lungo, quindi non è inconcepibile che tu possa ancora imbatterti in un tale sistema oggi.

Conto solo sudosu sistemi che gestisco personalmente o su sistemi come Ubuntu, macOS o openSuSE in cui è l' unico modo per ottenere i privilegi di root, per impostazione predefinita.

suè più vicino a un comando universale "get me superuser privileges" di sudo, ma poi hai sistemi come Ubuntu e macOS in cui l'account di root è bloccato per impostazione predefinita in modo specifico per forzarti a utilizzare sudoinvece di su. Quindi, non puoi nemmeno chiamare suuniversale.


Note a piè di pagina :

  1. CentOS, Oracle Linux, Scientific Linux ...

  2. Sì, anche con installazioni minime.


9

sudoè un'utilità disponibile su quasi tutti i sistemi Linux.
Tuttavia, non è raggruppato per impostazione predefinita in tutte le distribuzioni. Tuttavia, tutte le principali distro sono raggruppate per impostazione predefinita.

Distribuzioni Linux come Arch Linux, Gentoo, LFS, ecc. Che consentono all'utente la completa personalizzazione non hanno sudo di default.

Su Arch Linux, il sistema di base non viene fornito con sudoinstallato. L'utente deve scaricare sudoe modificare manualmente il file sudoers.
Idem per Gentoo e LFS. Non conosco altre distro importanti senza sudo.

E no, non credo che esista qualcosa di più universale che sudonel concedere privilegi da superutente. Cioè, a parte l'accesso effettivo come root.


1
sudopotrebbe essere raggruppato nella maggior parte delle distribuzioni, ma non tutte configurano tutti gli utenti come in grado di eseguirlo.
jsbillings,

Un altro buon punto. Dipende da cosa dice il file sudoers.
darnir,

7

La distribuzione più utilizzata, Ubuntu, usa sudocome metodo raccomandato per diventare root (quando usano la riga di comando - gli utenti che si attengono alla GUI riceveranno una richiesta di password senza capire o preoccuparsi di ciò che accade sotto il cofano). Altre distribuzioni possono o meno incoraggiare la creazione di sudo e possono anche o meno spedirle. D'altra parte, suè disponibile ovunque e utilizzabile sulla maggior parte dei sistemi tranne quelli in cui sudoè disponibile solo perché l'utente non avrà la password di root.

Tra sue sudo, coprirai quasi tutti i tuoi utenti. L'esotico pochi che hanno bisogno califeo opo pfexecsa cosa fare già. Anche se non lo fanno, un sistema che non utilizza susudoè probabile che abbia file in luoghi sconosciuti e abbastanza cose a cui non hai pensato che le tue istruzioni probabilmente non funzioneranno comunque.


6

Per rispondere alla tua domanda, nel modo più preciso, no sudonon è considerato universale. In verità l'intero concetto di "universale" è spesso un'aringa rossa. Ciò è particolarmente vero per quanto riguarda la compatibilità cross-distro. Una volta che hai lanciato la moltitudine di diverse versioni di software, l'universalità diventa semi-irrealistica. Lo scripting per natura è pragmatico, se fosse pedante, scrivere script portatili sarebbe praticamente impossibile.

Normalmente misuro il mio ambiente di esecuzione previsto, una distribuzione Linux semi-moderna, mi aspetto una shell POSIX con i comuni GNU Utils. Per gli script che potrebbero essere eseguiti al di fuori di Linux, mi aspetto solo uno standard POSIX completo. Ovviamente molti script sono specifici di Linux o specifici della distro, quindi spesso restringe l'ambito della portabilità.

Per risolvere il tuo caso di scripting specifico,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

lo script incollato è complimento shell POSIX, scrivo sempre Dash compatibile.


Ma il tuo script non richiede che sudo sia installato? Esiste un modo per ottenere l'accesso come superutente senza l'uso di sudo? Attraverso semplici script?
darnir,

@darnir: No, non è necessario sudoinstallare lo script incollato . Richiede l'esecuzione di un superutente e può essere utilizzato sudose è disponibile. Se sudonon è disponibile, lo script deve essere eseguito come utente root, o lo sarà die.
JM Becker,

@darnir: Inoltre non c'è davvero nulla di chiamato "scripting semplice". Quasi tutto, esclusi gli incorporamenti della shell, viene eseguito tramite normali binari. Questo è l'intero punto della shell, per chiamare altri comandi, interattivi o automatici. È questa caratteristica distintiva, che separa la shell dai linguaggi di programmazione generici. Quindi, indipendentemente da come si acquisisce il superutente, lo si fa attraverso comandi esterni ..., supponendo che non si stia codificando con le interfacce del kernel non elaborate.
JM Becker,

1
@varesa: È interessante notare che Ubuntu è esattamente l'opposto delle configurazioni predefinite sudo / su. È possibile verificare quali autorizzazioni sudo sono disponibili per un utente eseguendo sudo -l. Purtroppo è inutilizzabile in questa situazione, poiché potrebbe richiedere l'inserimento della password. Pensandoci più attentamente, in realtà penso che l'intero concetto possa essere realizzato al meglio tramite un test per distro. Utilizzo a su -cmeno che non si esegua una sudistro disabilitata predefinita, nel qual caso si utilizza sudo su -c. Come altri hanno già detto, è meglio lasciare l'elevazione del superutente all'utente, considererei qualsiasi scorciatoia una comodità.
JM Becker,

1
@varesa: ho aggiornato lo script incollato, per ridurre la possibilità di utilizzare un non configurato sudo. Questo dovrebbe essere eseguito correttamente nella maggior parte delle distro, assumendo default su/ sudoconfigurazioni. So che un Ubuntu obsoleto, pre lsb_release, dovrebbe essere affrontato ... Ma questo è davvero solo un esempio e potrebbe ovviamente essere esteso.
JM Becker,
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.