Come usare Run0 in Linux

Una fotografia che mostra un primo piano dello schermo di un laptop.

Run0 è un programma innovativo per l’escalation dei privilegi per le distribuzioni Linux basate su Systemd. Fornisce un’alternativa leggera e “senza configurazione” alle tradizionali app di escalation come sudo e doas. Qui ti mostriamo le basi dell’utilizzo di Run0 per eseguire comandi sul tuo sistema Linux.

Indice

  • Come eseguire programmi come un utente diverso
  • Come passare alla shell di un utente diverso
  • Come personalizzare la sessione corrente di Run0
  • Come raggruppare le sessioni di Run0
  • Come eseguire comandi su contenitori Systemd utilizzando Run0

Prima di ciò, potresti voler scoprire cos’è Run0 e come si differenzia da sudo.

Come eseguire programmi come un utente diverso

Uno degli usi più comuni per le app di escalation dei privilegi è eseguire comandi come utente root. A questo proposito, accedere all’utente root in Run0 richiede di aggiungere run0 davanti al comando che desideri eseguire. Ad esempio, il seguente comando crea una nuova cartella in una directory accessibile solo da root:

run0 mkdir/etc/maketecheasier

Questo porterà a un prompt di password CLI o a una piccola finestra GUI che chiede la password dell’utente corrente.

Uno screenshot che mostra il prompt di password per Run0.

Simile a sudo e doas, Run0 può anche passare a un utente non root quando esegue comandi. Per fare ciò, aggiungi il flag --user seguito dal nome dell’utente con cui desideri eseguire il comando:

run0 --user=alice /home/alice/alice-program.sh

Fornisci la password per l’utente a cui stai passando, quindi premi Invio.

Come passare alla shell di un utente diverso

Un altro aspetto chiave di un’app di escalation dei privilegi è la sua capacità di portare l’utente a una shell root. Questo ti dà la possibilità di interagire con il tuo sistema come utente root ed eseguire comandi più complessi dalla CLI.

In Run0, puoi farlo eseguendo il programma senza argomenti aggiuntivi.

Proprio come con l’esecuzione di programmi come root, è anche possibile utilizzare Run0 con il flag --user per avviare una sessione shell come un utente specifico:

run0 --user=alice

Inoltre, run0 ti consente di creare sessioni shell con permessi di gruppo temporanei per utenti non root. Questo è utile se desideri accedere a cartelle bloccate dietro un certo utente e gruppo senza passare a root.

Ad esempio, il seguente comando concede all’utente “alice” accesso temporaneo al gruppo “www-data”:

run0 --user=alice --group=www-data

Puoi anche utilizzare il flag --chdir per forzare un cambio di directory quando passi a una nuova sessione shell:

run0 --user=alice --chdir=/home/alice/Documents

Buono a sapersi: scopri di più sul tuo sistema Linux esplorando come cambiare ricorsivamente i permessi dei file nel tuo filesystem.

Come personalizzare la sessione corrente di Run0

Il principale punto di forza di Run0 è che non utilizza setuid (SUID) per gestire le azioni dell’utente super. Invece, si basa su systemd-run che crea TTY pseudo-isolati per eseguire comandi come root.

Una conseguenza di questo approccio è che Systemd tratta ogni shell di Run0 come un’unità discreta che funziona sotto il gestore di servizi. Questo ti consente di personalizzare il processo della tua shell root, a differenza delle tradizionali app di escalation dei privilegi.

Per aggiungere un’etichetta alla tua shell root, utilizza il flag --unit seguito dal nome che desideri utilizzare:

run0 --unit=maketecheasier

Puoi anche aggiungere una descrizione personalizzata alla tua shell root aggiungendo il flag --description:

run0 --unit=maketecheasier --description="ciao, mondo!"

Controlla di aver applicato correttamente i tuoi dettagli elencando il nome personalizzato della tua shell root utilizzando systemctl:

systemctl list-units maketecheasier.service

Un terminale che mostra i dettagli dell'unità Systemd personalizzata.

Per impostazione predefinita, Run0 cambia il colore dello sfondo della tua shell root in rosso. Sebbene questo sia un utile indicatore visivo, può essere distraente se stai utilizzando un tema chiaro sul tuo sistema.

Per cambiare questo, utilizza il flag --background seguito da un valore tra 40-49:

run0 --unit=maketecheasier --background=42

Infine, puoi anche regolare il “livello di gentilezza” della tua shell root. Questo è un valore compreso tra -20 e 19 che determina se il tuo kernel darà priorità al tuo processo rispetto ad altri.

Per dare alla tua shell root la massima priorità, utilizza il flag --nice con il valore “-20”:

run0 --nice=-20

Nota: il flag --nice funziona anche per i singoli comandi Run0. Ad esempio, puoi utilizzare run0 --nice=-20 vim per eseguire Vim con una priorità CPU più alta.

Come raggruppare le sessioni di Run0

Oltre a poter personalizzare ogni shell root di Linux, puoi anche utilizzare Run0 per raggrupparle insieme in un slice di Systemd. Questo è un costrutto speciale che consente alla tua macchina di regolare la domanda di risorse per i processi senza influenzare il resto del tuo sistema.

Per creare una shell root su un slice diverso, esegui il flag --slice seguito dal nome dello slice a cui desideri passare:

run0 --slice=maketecheasier

Nota: puoi fornire un nuovo nome sul flag --slice per creare un nuovo slice di Systemd.

Conferma che la tua nuova sessione sta funzionando sotto il tuo nuovo slice elencando i processi al suo interno:

systemctl status maketecheasier.slice

Un terminale che mostra i dettagli del slice Systemd personalizzato.

Puoi anche utilizzare il flag --slice-inherit per raggruppare il tuo nuovo slice insieme allo slice da cui proviene Run0. Questo è utile se hai già raggruppato le tue shell nei rispettivi slice e desideri solo aggiungere una nuova shell:

run0 --slice=maketecheasier --slice-inherit

Come eseguire comandi su contenitori Systemd utilizzando Run0

Systemd-nspawn è un programma speciale che può creare e gestire contenitori Linux leggeri simili a Docker. Essendo parte della suite Systemd, puoi anche utilizzare Run0 per eseguire comandi nei tuoi contenitori nspawn dalla tua macchina host.

Inizia elencando i contenitori Systemd-nspawn disponibili nel tuo sistema:

machinectl list

Un terminale che mostra un elenco dei contenitori Systemd-nspawn disponibili.

Esegui il seguente comando per creare una cartella all’interno della directory radice del tuo contenitore:

run0 run0 --machine=maketecheasier --user=root mkdir/hello-world

Nota: attualmente c’è un bug in Run0 in cui non riesce a elevare i privilegi quando viene eseguito con il flag --machine. Puoi risolvere questo aggiungendo un secondo comando run0 per forzare un’elevazione dei privilegi.

È anche possibile passare alla shell root del tuo contenitore utilizzando Run0:

run0 run0 --machine=maketecheasier --user=root

Conferma che ora stai eseguendo all’interno del tuo contenitore stampando il nome host della tua sessione terminale:

echo$HOSTNAME

Un terminale che mostra il processo di passaggio dal sistema locale al contenitore Systemd-nspawn.

Imparare a usare Run0 per eseguire e gestire comandi root in Linux è solo la punta dell’iceberg quando si tratta di app di escalation dei privilegi. Approfondisci il mondo complesso esaminando le differenze tra su, sudo e sudo -s.

Crediti immagine: Xavier Cee tramite Unsplash. Tutte le modifiche e gli screenshot di Ramces Red.