GNU/Linux >> Linux Esercitazione >  >> Linux

5 nuove funzionalità di sudo che gli amministratori di sistema devono conoscere nel 2022

Quando vuoi concedere l'accesso amministrativo ad alcuni dei tuoi utenti controllando e controllando cosa fanno sui tuoi sistemi, usi sudo . Tuttavia, anche con sudo , ci sono alcuni problemi invisibili:pensa solo a fornire l'accesso alla shell. sudo recenti rilascia funzionalità aggiuntive che ti consentono di vedere questi problemi e persino di controllarli. Ad esempio, puoi attivare messaggi di registro più dettagliati e più facili da elaborare e registrare ogni comando eseguito in una sessione della shell.

Alcune di queste funzionalità sono nuove di zecca. Alcuni di essi si basano su funzionalità introdotte nella versione 1.9.0 o anche precedenti. Ad esempio, sudo potrebbe registrare tutto ciò che è successo su un terminale, anche nella versione 1.8. Tuttavia, il sistema memorizzava queste registrazioni localmente ed erano facili da eliminare, specialmente quelle in cui le registrazioni erano più utili:le sessioni di Shell. La versione 1.9.0 ha aggiunto la raccolta centralizzata delle registrazioni della sessione, quindi le registrazioni non possono essere eliminate dall'utente locale e le versioni recenti hanno aggiunto i relay, rendendo la raccolta ancora più solida.

Se conosci solo le basi di sudo o utilizzato solo la versione 1.8 in precedenza, consiglio di leggere il mio articolo precedente.

1. Registrazione in formato JSON

La prima nuova funzionalità che voglio introdurre è la registrazione in formato JSON. Sono un fanatico della registrazione (ho iniziato a lavorare su syslog-ng progetto dodici anni fa), e questa funzionalità è la prima introdotta dal mio articolo su Opensource.com. Quando abilitato, sudo registra molte più informazioni e lo fa in un modo più semplice da analizzare.

syslog tradizionale messaggi di sudo sono brevi e contengono solo la quantità minima di informazioni necessarie. Ciò è dovuto ai vincoli del vecchio syslog implementazioni:i messaggi di dimensioni superiori a 1k sono stati eliminati o troncati:

Jan 28 13:56:27 localhost.localdomain sudo[10419]: czanik : TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

syslog più recente le implementazioni possono gestire messaggi di dimensioni molto maggiori. syslog-ng accetta messaggi di registro fino a 64k di dimensione per impostazione predefinita (ma ovviamente può essere più piccolo o più grande, a seconda della configurazione effettiva).

Lo stesso evento contiene molte più informazioni se si accede in formato JSON. Più non significa più difficile da gestire:i messaggi in formato JSON sono più facili da analizzare da molte applicazioni software di gestione dei log. Ecco un esempio:

Jan 28 13:58:20 localhost.localdomain sudo[10518]: @cee:{"sudo":{"accept":{"uuid":"616bc9efcf-b239-469d-60ee-deb5af8ce6","server_time":{"seconds":1643374700,"nanoseconds":222446715,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submit_time":{"seconds":1643374700,"nanoseconds":209935349,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submituser":"czanik","command":"/bin/bash","runuser":"root","runcwd":"/home/czanik","ttyname":"/dev/pts/0","submithost":"localhost.localdomain","submitcwd":"/home/czanik","runuid":0,"columns":118,"lines":60,"runargv":["/bin/bash"],"runenv":["LANG=en_US.UTF-8","HOSTNAME=localhost.localdomain","SHELL=/bin/bash","TERM=xterm-256color","PATH=/home/czanik/.local/bin:/home/czanik/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin","MAIL=/var/mail/root","LOGNAME=root","USER=root","HOME=/root","SUDO_COMMAND=/bin/bash","SUDO_USER=czanik","SUDO_UID=1000","SUDO_GID=1000"]}}}

Puoi abilitare i messaggi di registro in formato JSON in sudoers file:

Defaults log_format=json

Puoi saperne di più su come lavorare con i messaggi di registro in formato JSON da sudo dal mio blog syslog-ng.

2. Raccolta dei registri centralmente utilizzando sudo_logsrvd

Un'altra funzionalità relativa alla registrazione nella 1.9.4 sta raccogliendo tutti i sudo registra i messaggi (inclusi gli errori) utilizzando sudo_logsrvd . In precedenza, il sistema registrava sessioni riuscite solo quando sudo_logsrvd effettivamente fatto una registrazione. La registrazione viene ancora eseguita tramite syslog per impostazione predefinita alla fine.

Perché questo è importante? Prima di tutto, puoi raccogliere qualsiasi cosa relativa a sudo in un unico posto:sia le registrazioni della sessione che tutti i messaggi di registro corrispondenti. In secondo luogo, può anche garantire la corretta registrazione di tutti i sudo - eventi correlati, come sudo può rifiutarsi di eseguire comandi se sudo_logsrvd è inaccessibile.

Puoi abilitare la registrazione su sudo_logsrvd con la seguente impostazione in sudoers file (ovviamente sostituisci l'indirizzo IP):

Defaults log_servers=172.16.167.150

Se desideri messaggi di registro in formato JSON, hai bisogno della seguente impostazione in [eventlog] sezione del sudo_logsrvd configurazione:

log_format = json

Altrimenti, sudo_logsrvd usa il tradizionale sudo formato log con una semplice modifica:include anche informazioni sull'host da cui proviene il log:

Nov 18 12:40:16 centos8splunk.localdomain sudo[21028]:   czanik : 3 incorrect password attempts ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Nov 18 12:40:23 centos8splunk.localdomain sudo[21028]:   czanik : HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; TSID=00000A ; COMMAND=/bin/bash
Nov 18 12:40:30 centos8splunk.localdomain sudo[21028]:   czanik : command rejected by I/O plugin ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

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

3. Relè

Quando originariamente hanno introdotto sudo_logsrvd (versione 1.9.0) per la raccolta centralizzata delle registrazioni della sessione, i client potevano solo inviare le registrazioni direttamente. La versione 1.9.7 ha introdotto il concetto di relè. Con i relay, invece di inviare direttamente le registrazioni, puoi inviare le registrazioni a più livelli di host intermedi, che strutturano la tua rete.

Perché questo è importante? Innanzitutto, i relè consentono di raccogliere le registrazioni delle sessioni anche se l'host centrale non è disponibile a causa di problemi di rete o manutenzione. Per impostazione predefinita, sudo si rifiuta di eseguire quando non può inviare registrazioni, quindi i relay possono assicurarsi che tu possa usare sudo 24 ore su 24.

In secondo luogo, ti consente anche di avere controlli più severi sulla tua rete:invece di aprire il firewall per tutti gli host alla centrale sudo_logsrvd , devi solo consentire il passaggio.

Infine, ti consente di raccogliere le registrazioni delle sessioni da reti senza accesso diretto a Internet, come le reti private AWS, dove puoi installare sudo_logsrvd in modalità di inoltro sull'host gateway.

Quando usi i relè, configura il sudo client e la centrale sudo_logsrvd rimane lo stesso. Sull'host di inoltro, aggiungi la seguente riga a [relay] sezione di sudo_logsrvd.conf :

relay_host = 172.16.167.161

Se è noto che la connessione di rete verso il server centrale è problematica, puoi configurare l'inoltro per memorizzare le registrazioni prima di inoltrarle:

store_first = true

4. Sottocomandi di registrazione

Hai mai voluto sapere cosa succede all'interno di una sessione di shell avviata tramite sudo ? Sì, le registrazioni delle sessioni ci sono, ma guardare ore di registrazioni solo per vedere un paio di comandi eseguiti è noioso e un'enorme perdita di tempo. Fortunatamente, la versione 1.9.8 ha introdotto i sottocomandi di registrazione. Ora è sufficiente controllare regolarmente i messaggi di registro e guardare le registrazioni solo quando si verifica qualcosa di sospetto.

Non hai nemmeno bisogno di una regola per consentire l'accesso alla shell per avere l'accesso alla shell, basta accedere a un editor. La maggior parte degli editor può eseguire comandi esterni. Il mio editor preferito è JOE, e questo è ciò che puoi vedere quando lo avvio tramite sudo :

Aug 30 13:03:00 czplaptop sudo[10150]:   czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe

Niente di interessante, solo un editor, anche se sparo una shell ed elimino alcuni file e partizioni da quella shell. Ora vediamo cosa succede quando abiliti i sottocomandi di registrazione:

Aug 30 13:13:14 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/sh -c /bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/readlink /proc/10889/exe
[...]
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/sed -r s@/*:|([^\\]):@\1\n@g;H;x;s@/\n@\n@
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/tty
Aug 30 13:13:42 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/id
Aug 30 13:13:56 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/ls -A -N --color=none -T 0 /usr/share/syslog-ng/include/scl/

Ho omesso dozzine di righe per risparmiare spazio, ma puoi ancora vedere che ho avviato una shell e i comandi eseguiti da bash_profile sono disponibili anche nei log.

Puoi abilitare i sottocomandi di registrazione in sudoers file utilizzando la seguente impostazione:

Defaults log_subcmds

Nel tradizionale sudo logs, puoi vedere da sudo ID processo che questi registri provengono dallo stesso sudo sessione. Se attivi la registrazione in formato JSON, come mostrato in precedenza, sudo registra molte più informazioni nei registri, facilitandone l'analisi.

5. Sottocomandi di intercettazione

La registrazione dei sottocomandi rimuove la maggior parte delle aree problematiche nascoste da sudo , ma ci sono situazioni in cui non vuoi solo guardare cosa sta succedendo ma anche controllare il flusso degli eventi. Ad esempio, devi concedere l'accesso alla shell a un utente ma vuoi comunque impedire loro di eseguire un comando specifico. L'intercettazione è l'ideale in questi casi. Ci sono, ovviamente, alcune limitazioni, come non puoi limitare i comandi integrati delle shell.

Diciamo il who il comando è pericoloso. Puoi abilitare l'intercettazione in due passaggi:il primo lo abilita, il secondo lo configura. In questo caso, il mio utente non è autorizzato a eseguire who :

Defaults intercept
czanik ALL = (ALL) ALL, !/usr/bin/who

Ecco cosa succede quando avvio una sessione di shell di root tramite sudo e prova a eseguire who :

$ sudo -s
# who
Sorry, user czanik is not allowed to execute '/usr/bin/who' as root on czplaptop.
bash: /usr/bin/who: Permission denied

Puoi facilmente disabilitare del tutto le shell in esecuzione:

Defaults intercept
Cmnd_Alias SHELLS=/usr/bin/bash, /usr/bin/sh, /usr/bin/csh
czanik ALL = (ALL) ALL, !SHELLS

Tuttavia, significa anche che non puoi avviare sessioni di shell tramite sudo . Non solo, ma non puoi nemmeno eseguire comandi esterni dagli editor. Questo è ciò che accade quando provo ad avviare ls comando da vi :

$ sudo vi /etc/issue
Sorry, user czanik is not allowed to execute '/bin/bash -c /bin/ls' as root on czplaptop.
Cannot execute shell /bin/bash
Press ENTER or type command to continue

Qual ​​è il prossimo passo?

Spero che la lettura del mio articolo ti faccia venire voglia di provare queste nuove funzionalità da solo. Puoi installare l'ultimo sudo su molte distribuzioni Linux e varianti UNIX dal tuo gestore di pacchetti, oppure usa un programma di installazione binario disponibile sul sito Web di Sudo.

Questo articolo fornisce solo una panoramica delle nuove possibilità. Se vuoi saperne di più su queste funzionalità, visita il sito Web, che ospita pagine di manuale, e anche il blog Sudo.


Linux
  1. Nuove funzionalità in Fedora 26

  2. Nuove funzionalità in Ubuntu 17.04

  3. Cosa devono sapere gli amministratori di sistema sull'utilizzo di Bash

  4. Linux Mint 19 – Data di rilascio, nuove funzionalità e altro

  5. Le migliori pratiche di test di penetrazione che devi conoscere

9 Nuove funzionalità in Ubuntu 18.10 Cosmic Seppia

Compressione file Linux:tutto ciò che devi sapere

Cosa devi sapere su IPv6

Tutto ciò che devi sapere sul sistema operativo Linux Zorin

Tutto ciò che devi sapere sul sistema operativo Peppermint Linux

Rilascio del kernel Linux 5.0, nuove funzionalità e miglioramenti!