Come utilizzare la shell con restrizioni per limitare ciò che un utente Linux può fare
Pubblicato: 2022-01-29Una 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.
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
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
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.
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.
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.
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.