Come utilizzare la shell con restrizioni per limitare ciò che un utente Linux può fare

Pubblicato: 2022-01-29
Una finestra di terminale su un sistema Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Una shell con restrizioni limita ciò che un account utente può fare su Linux. Un utente con restrizioni non può cambiare la propria directory e tu controlli a quali comandi ha accesso. Ecco come configurare una shell con restrizioni su Linux.

Conchiglie limitate

Una shell con restrizioni non è una shell diversa. È una modalità diversa di una shell standard. Le conchiglie Bash, Korn, Fish e altre possono essere avviate in modalità shell limitata. Useremo Bash in questo articolo, ma gli stessi principi si applicano alle altre shell.

Poiché le shell limitate sono solo un altro modo di utilizzare la shell standard, sono facili da configurare. Non c'è niente da installare e sono disponibili ovunque sia Linux.

Le shell limitate possono essere applicate anche agli script. Ciò garantisce che qualsiasi danno che possono causare se sono stati scritti in modo errato è limitato ai confini del loro mondo limitato e che non hanno accesso all'intero computer.

Tieni presente, tuttavia, che i proiettili limitati non sono completamente a prova di fuga. Qualcuno con una conoscenza sufficiente può sfuggire a un guscio limitato. Sono ottimi per porre limiti di sicurezza a un utente occasionale, ma non si basano su shell limitate per la sicurezza del mondo reale su un sistema di produzione.

CORRELATI: Qual è la differenza tra Bash, Zsh e altre shell Linux?

Bash limitato

Quando esegui Bash come shell con restrizioni, all'utente vengono rimosse alcune funzionalità. In particolare, l'utente non può :

  • Usa cd per cambiare la directory di lavoro.
  • Modificare i valori delle variabili ambientali $PATH , $SHELL , $BASH_ENV o $ENV (ma possono leggere i valori correnti).
  • Leggere o modificare le opzioni ambientali della shell $SHELLOPTS .
  • Reindirizzare l'output di un comando.
  • Richiama i comandi che richiedono un percorso per individuarli. Cioè, non puoi emettere un comando che contiene una o più barre " / ".
  • Richiama exec per sostituire un processo diverso per la shell.
  • Utilizzare una delle funzioni limitate in uno script.
Annuncio pubblicitario

Puoi invocare una shell Bash limitata usando l'opzione -r (limitata). È vietato tentare di eseguire un'operazione semplice come modificare la directory di lavoro. Un messaggio conciso ti dice che cd è limitato.

 bash -r
 cd documenti 

La shell Bash può anche rilevare quando è stata invocata usando "rbash" invece di "bash". Questo fa sì che inizi anche come shell con restrizioni. Questo fornisce un modo conveniente per impostare la shell predefinita per un particolare utente, che useremo presto.

Se utilizziamo il comando whereis su Ubuntu per cercare i file rbash , vedremo che l'eseguibile si trova nella directory "usr/bin". La pagina man si trova nella directory “/usr/share/man/man1”.

L'uso del comando ls con l'opzione -l (long) rivela che rbash è in realtà un collegamento simbolico a bash .

 dov'è rbash
 ls -l /usr/bin/rbash 

Su Manjaro e Fedora è stato necessario creare il collegamento simbolico rbash . Funziona su entrambe le distribuzioni:

 dov'è rbash
 sudo ln -s /bin/bash /bin/rbash
 dov'è rbash 

Annuncio pubblicitario

La seconda volta che utilizziamo il comando whereis , trova rbash nella directory "/usr/bin".

Limitazione di un utente

Creiamo un nuovo account utente chiamato "Minnie". Imposteremo la loro shell come shell con restrizioni usando l'opzione -s (shell) del comando useradd . Imposteremo anche la password dell'account utilizzando il comando passwd e creeremo una cartella home per loro.

Il flag -p (genitori) nel comando mkdir dice a mkdir di creare la directory di destinazione e anche tutte le directory principali che deve creare. Quindi, creando la directory "/home/minnie/bin", creiamo contemporaneamente la directory "/home/minnie".

 sudo useradd minnie -s /bin/rbash
 sudo passwd minnie
 sudo mkdir -p /home/minnie/bin 

Quando Minnie accede, funzionerà in una shell con restrizioni.

 cd 

Non può invocare comandi che devono includere una barra " / ":

 /usr/bin/ping 

Tuttavia, può ancora eseguire i comandi che si trovano nel percorso.

 ping 

Annuncio pubblicitario

Non è il comportamento che ti saresti aspettato, e di certo non è quello che vogliamo. Per rafforzare ulteriormente le restrizioni, dobbiamo cambiare il percorso che la shell di Minnie utilizzerà per cercare i comandi.

Inasprimento delle restrizioni

Quando abbiamo creato la directory home di minnie “/home/minnie”, abbiamo anche creato una directory “/home/minnie/bin”. È qui che entra in gioco quella directory.

Modificheremo il file ".bash_profile" di minnie e imposteremo il suo percorso in modo che punti solo a quella directory. Limiteremo anche il file ".bash_profile" di Minnie in modo che solo root possa modificarlo. Ciò significa che nessun altro utente può modificare quel file e cambiare il suo percorso.

 sudo gedit /home/minnie/.bash_profile 

Modifica il "PATH =" esistente o aggiungi la seguente riga:

 PERCORSO=$HOME/bin 

Salva il file. Cambieremo il proprietario del file in root usando il comando chown e cambieremo i permessi del file usando il comando chmod . Solo l'utente root potrà modificare il file.

 sudo chown root:root /home/minnie/.bash_profile
 sudo chmod 755 /home/minnie/.bash_profile
 ls -l /home/minnie/.bash_profile 

La prossima volta che l'utente minnie accede, il suo percorso punta a una singola cartella.

Annuncio pubblicitario

Il nostro utente limitato Minnie può utilizzare solo comandi integrati di Bash come echo , alias e logout . Non può nemmeno usare ls !

 ls 

Dovremo allentare un po' la nostra stretta mortale se vogliamo che siano in grado di fare qualcosa di utile. Creeremo dei collegamenti simbolici dalla directory "bin" di Minnie ai comandi che vogliamo che Minnie sia in grado di usare.

 sudo ln -s /bin/ls /home/minnie/bin
 sudo ln -s /bin/top /home/minnie/bin
 sudo ln -s /bin/uptime /home/minnie/bin
 sudo ln -s /bin/mignolo /home/minnie/bin 

Quando Minnie accederà, scoprirà di poter usare i comandi integrati di Bash, oltre a quelli a cui sono stati collegati.

 ls
 mignolo dave
 tempo di attività 

Limitare gli utenti esistenti

Abbiamo creato minnie come nuovo utente. Per cambiare la shell di un utente esistente, possiamo usare l'opzione -s (shell) del comando usermod .

 sudo usermod -s /bin/rbash mary 

È possibile utilizzare il comando less nel file "/etc/passwd" per vedere rapidamente quale shell è impostata come shell predefinita dell'utente.

 meno /etc/passwd 

Possiamo vedere che l'utente mary utilizzerà la shell con restrizioni al prossimo accesso.

Annuncio pubblicitario

Ricordarsi di applicare le altre modifiche per limitare la loro variabile di ambiente $PATH e di impostare i comandi che si desidera che l'utente mary sia in grado di eseguire.

Script restrittivi

Un utente normale e senza restrizioni può avviare script che vengono eseguiti in una shell con restrizioni. Copia le seguenti righe e incollale in un editor. Salva il file come "restricted.sh" e chiudi l'editor.

 #!/bin/bash

# lo script si avvia nella normale shell di Bash
echo "## In modalità UNrestricted! ##"

eco
echo "Cartella corrente: `pwd`"
echo "Cambia directory"
cd /usr/condividi
echo "Ora nella directory: `pwd`"
echo "Passaggio alla home directory"
cd ~
echo "Ora nella directory: `pwd`"

# Impostazione della modalità limitata
impostare -r

eco
echo "## In modalità limitata! ##"

eco
echo "Cartella corrente: `pwd`"
echo "Cambia directory in /home/"
cd/casa
echo "Ancora nella directory: `pwd`"

eco
echo "Tentativo di avviare un'altra shell"
/bin/bash

eco
echo "Tentativo di reindirizzamento dell'output del comando"
ls -l $HOME > i miei_file.txt
gatto i miei_file.txt
eco

uscita 0

Dobbiamo usare il comando chmod con il flag +x (execute) per rendere eseguibile lo script.

 chmod +x limited.sh 

La prima parte dello script viene eseguita in una normale shell.

 ./limitato.sh 

La seconda parte dello script, il bit dopo la riga "set -r", viene eseguita in una shell ristretta.

Nessuna delle azioni tentate riesce nella parte limitata dello script.

Annuncio pubblicitario

Un intero script può essere eseguito in una shell con restrizioni aggiungendo -r alla prima riga:

 !#/bin/bash -r

Ricorda Houdini

Le shell limitate sono utili, ma non del tutto infallibili. Un utente sufficientemente esperto potrebbe essere in grado di evitarli. Ma se usati con giudizio, sono un modo utile per stabilire una serie di limitazioni per un particolare account.