#howto - Installazione ed utilizzo di doas

Scritto da il
Redatto da
doas
ubuntu
archlinux
fedora

Uno dei primi comandi che impariamo sui nostri terminali da utenti linux è sudo, ovvero super user do (alcuni lo traducono anche con substitute user do) che serve fondamentalmente a digitare comandi impersonificando un altro utente in maniera temporanea (per comportamento predefinito, generalmente lo si usa per impersonificare l’utente root). Ma esistono alternative a questo comando? Ecco a voi doas.

Cos’è e a cosa serve doas

Sviluppato nel 2015, doas è un alternativa di sudo utilizzata in ambiente UNIX/BSD sotto licenza ISC (Internet Systems Consortium) con lo scopo di creare uno strumento più sicuro e semplice.

Al tempo in cui scrivo, doas è ancora supportato da aggiornamenti frequenti, l’ultima release è stata rilasciata qualche settimana fa sul suo repository principale.

Perché non usare sudo? La controversia dei bug

Ogni qualvolta esce fuori una nuova vulnerabilità in un generico software è prassi comune iniziare a domandarsi perché si sta utilizzando quel software e non un altro che magari non ha lo stesso numero di falle. sudo non è immune da queste chiacchiere da bar (purtroppo).

Voglio spendere qualche minuto del vostro tempo in un ragionamento che potrebbe guidarvi su quelle che sono le vostre scelte in questo ambito.

Una delle ultime vulnerabilità di gran peso su sudo è stata la CVE-2021-3156, anche chiamata Barone Samedì (corretta poi nella versione 1.9.5p2 di sudo); proprio in corrispondenza di tale scoperta ho letto molti commenti del tipo:

L’ennesima dimostrazione di quanto sia poco sicuro sudo, usiamo doas

Ragionamenti di questo tipo su un software open source sono, a mio parere, totalmente insensati: neanche gli helloworld sono esenti da falle idealmente, ogni software che scriviamo è purtroppo soggetto a tutta una serie di considerazioni che sono impossibili da tenere conto mentre lo stiamo scrivendo e questo non ci deve impedire di portarlo a termine, di utilizzarlo o di considerarlo come mediamente sicuro. Ed è proprio in questo contesto che l’open source si distingue dagli altri modelli di pubblicazione del software: più occhi son puntati sul codice sorgente del nostro operato, più falle e problematiche verranno corrette. In sintesi il fatto che venga trovata e corretta una falla non è motivo di allontanarsi da un software, ma è anzi motivo di avvicinarsi ad esso ed essere ancora più sicuri di utilizzarlo.

Ovviamente questo ragionamento non è assoluto, lo sviluppo sul software preso in considerazione deve essere attivo, non sottovalutare le issue aperti dagli utenti e deve essere progettato in maniera da considerare che la maggior parte della sua vita sarà quella di essere sottoposto a modifiche (quindi facilmente riscrivibile nei suoi singoli moduli).

Ma allontanarsi da un software quando viene scoperto un nuovo bug, scusatemi il francesismo, è una boiata.

Installare doas

doas è disponibile su linux tramite il porting OpenDoas, e si può installare tramite il repository di github:

git clone https://github.com/Duncaen/OpenDoas 
cd OpenDoas 
./configure 
make install

configure

Soffermiamoci però sulla terza istruzione, il ./configure: questo script fa un controllo di tutte le dipendenze installate o meno sulla vostra distribuzione, ogni riga formata così:

Checking for nomesoftware ...         yes.

se tutte le righe riportano la dicitura yes siete apposto, altrimenti potreste non essere in grado di installare il software. Non dovrebbero esserci in realtà problemi di sorta, il repository si porta alcune dipendenze tipiche da installare, ma se l’istruzione di make dovesse fallire, installate le varie dipendenze della lista fino a che non risulta soddisfatta la make, aiutandovi ad esempio con il vostro package manager.

Le dipendenze controllate sono le seguenti:

explicit_bzero
strlcat
strlcpy
errc
verrc
setprogname
readpassphrase
strtonum
reallocarray
execvpe
setresuid
setresgid
setreuid
setregid
closefrom
sysconf
dirfd
fcntl_h
F_CLOSEM
dirent_h
sys_ndir_h
sys_dir_h
ndir_h
login_cap_h
pam_appl_h

Update

ATTENZIONE:

Uno strumento di amministrazione del sistema deve essere sempre aggiornato. Compilare un pacchetto da soli non dà questa garanzia, quindi ogni tanto verificate aggiornamenti con una git pull

Archlinux

Gli user di archlinux possono installare opendoas direttamente con pacman:

pacman -S opendoas

NIXOS

Cercando in rete pare che ci siano testimonianze del fatto che doas non funzioni a dovere su NIXOS per problemi legati al pam (la configurazione delle libreria di autenticazione di sistema)

Configurazione di doas

Il file di configurazione principale di doas è /etc/doas.conf, possiamo editarlo direttamente con il nostro editor preferito, supponiamo nano:

nano /etc/doas.conf 

Il file inizialmente sarà vuoto, da creare.

Per abilitare un determinato utente ad eseguire comandi impersonificandone un altro bisogna scrivere:

permit <nomeutente> as <utentedaimpersonificare>

ad esempio per abilitare come root:

permit <nomeutente> as root

per dare accessi di root al nostro utente.

Più genericamente potete garantire tutti i ermessi all’utente wheel ( genericamente il gruppo di utenti che sono abilitati ad usare sudo)

permit :wheel 

Assicuratevi che il file abbia gruppo e permessi di root:

chown root:root /etc/doas.conf 

Se avete finito di modificare il file, è buona norma togliere i permessi di scrittura e lettura a tutti:

chmod 0400 /etc/doas.conf

Quindi verificate che il file non abbia errori di scrittura:

doas -C /etc/doas.conf && echo "il file non contiene errori" || echo "ops... rileggi il file"

Copiate quindi le configurazioni di pam:

cp /etc/pam.d/sudo /etc/pam.d/doas

Se non doveste avere questo file (magari non avete proprio installato sudo, in quei pochi sistemi che permettono di scegliere liberamente cosa installare) il mio file di pam contiene queste informazioni, che potete copiare manualmente:

#%PAM-1.0
auth            include         system-auth
account         include         system-auth
session         include         system-auth

Uso

Quindi proviamo ad usarlo:

echo "ciao da doas" | doas tee /etc/ciao 

quindi:

cat /etc/ciao 

Se in output abbiamo:

ciao da doas 

Abbiamo impostato tutto correttamente (potete eliminare il file di test con: doas rm /etc/ciao)

Trick

Ecco a voi qualche consiglio per un utilizzo quotidiano di doas

sudo alias

Siete sicuramente ancora troppo abituati ad utilizzare sudo, potrebbe aiutarvi impostare un alias nel vostro file rc:

alias sudo="doas "

Per farla più simpatica, potreste anche pensare di scrivere su uno script simile:

#!/bin/bash
echo "eh-eh-eh, ancora sudo usiamo qua? passa a doas"
doas "$@"

e far puntare l’alias allo script

Abilitare solo specifici comandi o utenti

Il file di configurazione di doas permette configurazioni molto dettagliate, la sintassi completa per ogni riga è:

permit|deny [options] identity [as target] [cmd command [args ...]]

Abilitiamo un determinato utente ad esempio all’esecuzione di doas solo con il comando tee:

permit nomeutente as root cmd tee

Oppure neghiamo i permessi ad uno specifico utente e solo per uno specifico comando (ad esempio sempre tee):

deny nomeutente as root cmd tee

Potete specificare insieme all’utente il gruppo (o solo il gruppo) scrivendolo dopo il carattere :. Ad esempio abilitiamo i permessi a tutti gli utenti del gruppo wheel, ma non paperino, perché lui ci sta antipatico:

permit :wheel
deny paperino

nopass

Aggiungendo alle righe di doas.conf l’opzione nopass, potete evitare di inserire la password per fare accesso:

permit nopass :wheel

Pensate che non sia una buona idea dal punto di vista della sicurezza? Concordo con voi, ma che ne pensate di limitare questo comportamento solo a quando ad esempio aggiornare il sistema o installare pacchetti? ecco un esempio su pacman:

permit :wheel

permit nopass :wheel cmd pacman
history_edu Revisioni