Tutti sanno sudo , giusto? Questo strumento è installato per impostazione predefinita sulla maggior parte dei sistemi Linux ed è disponibile per la maggior parte delle varianti BSD e Unix commerciali. Tuttavia, dopo aver parlato con centinaia di sudo utenti, la risposta più comune che ho ricevuto è stata che sudo è uno strumento per complicarsi la vita.
C'è un utente root e c'è il su comando, quindi perché avere ancora un altro strumento? Per molti, sudo era solo un prefisso per i comandi amministrativi. Solo una manciata ha detto che quando hai più amministratori per lo stesso sistema, puoi usare sudo log per vedere chi ha fatto cosa.
Allora, cos'è sudo ? Secondo il sudo sito web:
"Sudo consente a un amministratore di sistema di delegare l'autorità dando a determinati utenti la possibilità di eseguire alcuni comandi come root o un altro utente fornendo al contempo una traccia di controllo dei comandi e dei relativi argomenti."
Per impostazione predefinita, sudo viene fornito con una semplice configurazione, un'unica regola che consente a un utente o un gruppo di utenti di fare praticamente qualsiasi cosa (ulteriori informazioni sul file di configurazione più avanti in questo articolo):
%wheel ALL=(ALL) ALL
In questo esempio, i parametri significano quanto segue:
- Il primo parametro definisce i membri del gruppo.
- Il secondo parametro definisce gli host su cui i membri del gruppo possono eseguire comandi.
- Il terzo parametro definisce i nomi utente sotto i quali il comando può essere eseguito.
- L'ultimo parametro definisce le applicazioni che possono essere eseguite.
Quindi, in questo esempio, i membri della ruota gruppo può eseguire tutte le applicazioni come tutti gli utenti su tutti gli host. Anche questa regola davvero permissiva è utile perché si traduce in registri di chi ha fatto cosa sulla tua macchina.
Alias
Altro sugli amministratori di sistema
- Abilita blog Sysadmin
- The Automated Enterprise:una guida alla gestione dell'IT con l'automazione
- eBook:Ansible Automation per SysAdmins
- Racconti dal campo:una guida per l'amministratore di sistema all'automazione IT
- eBook:una guida a Kubernetes per SRE e amministratori di sistema
- Ultimi articoli sull'amministratore di sistema
Ovviamente, una volta che non sarai solo tu e il tuo migliore amico ad amministrare una casella condivisa, inizierai a perfezionare le autorizzazioni. È possibile sostituire gli elementi nella configurazione precedente con elenchi:un elenco di utenti, un elenco di comandi e così via. Molto probabilmente copierai e incollerai alcuni di questi elenchi nella tua configurazione.
Questa situazione è dove gli alias possono tornare utili. Mantenere lo stesso elenco in più punti è soggetto a errori. Definisci un alias una volta e poi puoi usarlo molte volte. Pertanto, quando perdi la fiducia in uno dei tuoi amministratori, puoi rimuoverlo dall'alias e il gioco è fatto. Con più elenchi anziché alias, è facile dimenticare di rimuovere l'utente da uno degli elenchi con privilegi elevati.
Abilita funzionalità per un determinato gruppo di utenti
Il sudo comando viene fornito con un enorme set di impostazioni predefinite. Tuttavia, ci sono situazioni in cui vuoi sovrascrivere alcuni di questi. Questo è quando utilizzi i Predefiniti istruzione nella configurazione. Di solito, queste impostazioni predefinite vengono applicate a ogni utente, ma puoi restringere l'impostazione a un sottoinsieme di utenti in base a host, nome utente e così via. Ecco un esempio di cui la mia generazione di amministratori di sistema ama sentire parlare:insulti. Questi sono solo alcuni messaggi divertenti per quando qualcuno digita erroneamente una password:
czanik@linux-mewy:~> sudo ls
[sudo] password for root:
Hold it up to the light --- not a brain in sight!
[sudo] password for root:
My pet ferret can type better than you!
[sudo] password for root:
sudo: 3 incorrect password attempts
czanik@linux-mewy:~>
Poiché non tutti sono fan dell'umorismo degli amministratori di sistema, questi insulti sono disabilitati per impostazione predefinita. L'esempio seguente mostra come abilitare questa impostazione solo per i tuoi amministratori di sistema esperti, che sono membri della ruota gruppo:
Defaults !insults
Defaults:%wheel insults
Non ho abbastanza dita per contare quante persone mi hanno ringraziato per aver riportato questi messaggi.
Verifica del digest
Ci sono, ovviamente, funzioni più serie in sudo anche. Uno di questi è la verifica del digest. Puoi includere il riepilogo delle applicazioni nella tua configurazione:
peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd
In questo caso, sudo controlla e confronta il digest dell'applicazione con quello memorizzato nella configurazione prima di eseguire l'applicazione. Se non corrispondono, sudo rifiuta di eseguire l'applicazione. Sebbene sia difficile mantenere queste informazioni nella tua configurazione (non ci sono strumenti automatizzati per questo scopo), questi digest possono fornirti un ulteriore livello di protezione.
Registrazione della sessione
La registrazione della sessione è anche una caratteristica meno nota di sudo . Dopo la mia demo, molte persone lasciano il mio discorso con l'intenzione di implementarlo sulla loro infrastruttura. Come mai? Perché con la registrazione della sessione, vedi non solo il nome del comando, ma anche tutto ciò che è successo nel terminale. Puoi vedere cosa stanno facendo i tuoi amministratori anche se hanno accesso alla shell e i log mostrano solo che bash è avviato.
C'è una limitazione, attualmente. I record vengono archiviati localmente, quindi con autorizzazioni sufficienti, gli utenti possono eliminare le proprie tracce. Resta sintonizzato per le funzionalità in arrivo.
Plugin
A partire dalla versione 1.8, sudo modificato in un'architettura modulare basata su plug-in. Con la maggior parte delle funzionalità implementate come plug-in, puoi facilmente sostituire o estendere la funzionalità di sudo scrivendo il tuo. Sono già disponibili plug-in open source e commerciali per sudo .
Nel mio intervento, ho dimostrato la sudo_pair plug-in, disponibile su GitHub. Questo plugin è sviluppato in Rust, il che significa che non è così facile da compilare ed è ancora più difficile distribuire i risultati. D'altra parte, il plug-in fornisce funzionalità interessanti, richiedendo a un secondo amministratore di approvare (o negare) l'esecuzione di comandi tramite sudo . Non solo, ma le sessioni possono essere seguite sullo schermo e terminate in caso di attività sospette.
In una demo che ho fatto durante un recente discorso alla conferenza All Things Open, ho avuto il famigerato:
czanik@linux-mewy:~> sudo rm -fr /
comando visualizzato sullo schermo. Tutti stavano trattenendo il respiro per vedere se il mio laptop era andato distrutto, ma è sopravvissuto.
Registri
Come ho già detto all'inizio, la registrazione e gli avvisi sono una parte importante di sudo . Se non controlli il tuo sudo registra regolarmente, non vale molto la pena usare sudo . Questo strumento avvisa tramite e-mail degli eventi specificati nella configurazione e registra tutti gli eventi su syslog . I log di debug possono essere attivati e utilizzati per eseguire il debug di regole o segnalare bug.
Avvisi
Gli avvisi e-mail sono un po' antiquati ora, ma se usi syslog-ng per raccogliere i tuoi messaggi di log, il tuo sudo i messaggi di log vengono analizzati automaticamente. Puoi creare facilmente avvisi personalizzati e inviarli a un'ampia varietà di destinazioni, tra cui Slack, Telegram, Splunk o Elasticsearch. Puoi saperne di più su questa funzione dal mio blog su syslong-ng.com.
Configurazione
Abbiamo parlato molto di sudo funzionalità e ha visto anche alcune righe di configurazione. Ora, diamo un'occhiata più da vicino a come sudo è configurato. La configurazione stessa è disponibile in /etc/sudoers , che è un semplice file di testo. Tuttavia, non è consigliabile modificare direttamente questo file. Invece, usa visudo , poiché questo strumento esegue anche il controllo della sintassi. Se non ti piace vi , puoi cambiare l'editor da utilizzare puntando il puntatore sull'EDITOR variabile di ambiente a tua scelta preferita.
Prima di iniziare a modificare il sudo configurazione, assicurati di conoscere la password di root. (Sì, anche su Ubuntu, dove root non ha una password per impostazione predefinita.) Mentre visudo controlla la sintassi, è facile creare una configurazione sintatticamente corretta che ti blocchi fuori dal tuo sistema.
Quando hai una password di root a portata di mano in caso di emergenza, puoi iniziare a modificare la tua configurazione. Quando si tratta di sudoers file, c'è una cosa importante da ricordare:questo file viene letto dall'alto verso il basso e l'ultima impostazione vince. Ciò che questo fatto significa per te è che dovresti iniziare con impostazioni generiche e inserire eccezioni alla fine, altrimenti le eccezioni vengono sovrascritte dalle impostazioni generiche.
Puoi trovare un semplice sudoers file di seguito, basato su quello in CentOS, e aggiungi alcune righe di cui abbiamo discusso in precedenza:
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
Defaults:%wheel insults
Defaults !insults
Defaults log_output
Questo file inizia modificando una serie di impostazioni predefinite. Poi vengono le solite regole predefinite:la root utente e membri della ruota gruppo dispone delle autorizzazioni complete sulla macchina. Successivamente, abilitiamo gli insulti per la ruota gruppo, ma disabilitarli per tutti gli altri. L'ultima riga abilita la registrazione della sessione.
La configurazione di cui sopra è sintatticamente corretta, ma riesci a individuare l'errore logico? Sì, ce n'è uno:gli insulti sono disabilitati per tutti poiché l'ultima impostazione generica ha la precedenza sull'impostazione precedente, più specifica. Dopo aver cambiato le due linee, la configurazione funziona come previsto:Membri della ruota il gruppo riceve messaggi divertenti, ma il resto degli utenti non li riceve.
Gestione della configurazione
Una volta che devi mantenere i sudoers file su più macchine, molto probabilmente vorrai gestire la tua configurazione centralmente. Ci sono due principali possibilità open source qui. Entrambi hanno i loro vantaggi e svantaggi.
Puoi utilizzare una delle applicazioni di gestione della configurazione che utilizzi anche per configurare il resto della tua infrastruttura. Red Hat Ansible, Puppet e Chef hanno tutti moduli per configurare sudo . Il problema con questo approccio è che l'aggiornamento delle configurazioni è tutt'altro che in tempo reale. Inoltre, gli utenti possono ancora modificare i sudoer file in locale e modificare le impostazioni.
Il sudo lo strumento può anche memorizzare la sua configurazione in LDAP. In questo caso, le modifiche alla configurazione sono in tempo reale e gli utenti non possono scherzare con i sudoer file. D'altra parte, questo metodo ha anche dei limiti. Ad esempio, non puoi usare alias o usare sudo quando il server LDAP non è disponibile.
Nuove funzionalità
È disponibile una nuova versione di sudo giusto dietro l'angolo. La versione 1.9 includerà molte nuove interessanti funzionalità. Ecco le funzionalità pianificate più importanti:
- Un servizio di registrazione per raccogliere centralmente le registrazioni delle sessioni, che offre molti vantaggi rispetto all'archiviazione locale:
- È più conveniente cercare in un unico posto.
- Le registrazioni sono disponibili anche se la macchina del mittente è inattiva.
- Le registrazioni non possono essere eliminate da qualcuno che desidera eliminare le proprie tracce.
- Il controllo plug-in non aggiunge nuove funzionalità a sudoers , ma fornisce invece un'API per i plug-in per accedere facilmente a qualsiasi tipo di sudo registri. Questo plugin consente di creare log personalizzati da sudo eventi utilizzando i plug-in.
- L'approvazione abilita l'approvazione delle sessioni senza utilizzare plug-in di terze parti.
- E il mio preferito:il supporto Python per i plug-in, che ti consente di estendere facilmente sudo usando il codice Python invece di codificare nativamente in C.
Conclusione
Spero che questo articolo ti abbia dimostrato che sudo è molto più di un semplice prefisso. Ci sono tantissime possibilità per mettere a punto le autorizzazioni sul tuo sistema. Non puoi semplicemente perfezionare le autorizzazioni, ma anche migliorare la sicurezza controllando i digest. Le registrazioni delle sessioni ti consentono di controllare cosa sta succedendo sui tuoi sistemi. Puoi anche estendere la funzionalità di sudo usando i plugin, usando qualcosa già disponibile o scrivendo il tuo. Infine, dato l'elenco delle funzionalità imminenti, puoi vederlo anche se sudo ha decenni, è un progetto vivo e in continua evoluzione.
Se vuoi saperne di più su sudo , ecco alcune risorse:
-
Il sudo sito web
-
Il sudo blog
-
Seguici su Twitter