Cum să utilizați Shell restricționat pentru a limita ceea ce poate face un utilizator Linux

Publicat: 2022-01-29
O fereastră de terminal pe un sistem Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Un shell restricționat limitează ceea ce poate face un cont de utilizator pe Linux. Un utilizator cu restricții nu își poate schimba directorul și tu controlezi la ce comenzi au acces. Iată cum să configurați un shell restricționat pe Linux.

Cochilii restricționate

Un shell restricționat nu este un shell diferit. Este un mod diferit al unui shell standard. Bash, Korn, Fish și alte shell-uri pot fi pornite în modul shell restricționat. Vom folosi Bash în acest articol, dar aceleași principii se aplică și celorlalte shell-uri.

Deoarece shell-urile restricționate sunt doar un alt mod de a utiliza shell-ul standard, ele sunt ușor de configurat. Nu există nimic de instalat și sunt disponibile oriunde este Linux.

Shell-urile restricționate pot fi aplicate și scripturilor. Acest lucru asigură că orice daune pe care le-ar putea cauza dacă au fost scrise incorect este limitată la limitele lumii lor restricționate și că nu au acces la întregul computer.

Rețineți, totuși, că obuzele restricționate nu sunt complet rezistente la scăpare. Cineva cu suficiente cunoștințe poate scăpa de o cochilie restricționată. Sunt grozave pentru a pune limite sigure pentru un utilizator ocazional, dar nu vă bazați pe shell-uri restricționate pentru orice securitate reală a unui sistem de producție.

RELATE : Care este diferența dintre Bash, Zsh și alte shell-uri Linux?

Bash restricționat

Când rulați Bash ca un shell restricționat, utilizatorul are unele capabilități eliminate din ele. Mai exact, utilizatorul nu poate :

  • Folosiți cd pentru a schimba directorul de lucru.
  • Modificați valorile variabilelor de mediu $PATH , $SHELL , $BASH_ENV sau $ENV (dar pot citi valorile curente).
  • Citiți sau modificați opțiunile de mediu shell $SHELLOPTS .
  • Redirecționează rezultatul unei comenzi.
  • Invocați comenzi care necesită o cale pentru a le localiza. Adică, nu puteți lansa o comandă care are una sau mai multe bare oblice „ / ” în ea.
  • Invocați exec pentru a înlocui un alt proces pentru shell.
  • Utilizați oricare dintre funcțiile restricționate dintr-un script.
Publicitate

Puteți invoca un shell Bash restricționat folosind opțiunea -r (restricționată). Este interzisă încercarea de a efectua o sarcină simplă, cum ar fi schimbarea directorului de lucru. Un mesaj concis vă spune că cd -ul este restricționat.

 bash -r
 cd Documente 

Shell-ul Bash poate detecta, de asemenea, când a fost invocat folosind „rbash” în loc de „bash”. Acest lucru îl face să înceapă și ca un shell restricționat. Aceasta oferă o modalitate convenabilă de a seta shell-ul implicit pentru un anumit utilizator, pe care îl vom folosi în curând.

Dacă folosim comanda whereis pe Ubuntu pentru a căuta fișierele rbash , vom vedea că executabilul se află în directorul „usr/bin”. Pagina de manual este în directorul „/usr/share/man/man1”.

Utilizarea comenzii ls cu opțiunea -l (long) dezvăluie că rbash este de fapt o legătură simbolică către bash .

 unde este rbash
 ls -l /usr/bin/rbash 

Pe Manjaro și Fedora, a trebuit creată legătura simbolică rbash . Aceasta funcționează pe ambele distribuții:

 unde este rbash
 sudo ln -s /bin/bash /bin/rbash
 unde este rbash 

Publicitate

A doua oară când folosim comanda whereis , găsește rbash în directorul „/usr/bin”.

Restricționarea unui utilizator

Să creăm un nou cont de utilizator numit „Minnie”. Vom seta shell-ul lor să fie shell restricționat folosind opțiunea -s (shell) a comenzii useradd . De asemenea, vom seta parola contului folosind comanda passwd și vom crea un folder de acasă pentru ei.

Indicatorul -p (părinți) din comanda mkdir îi spune mkdir să creeze directorul țintă și orice directoare părinte pe care trebuie să le creeze, de asemenea. Deci, creând directorul „/home/minnie/bin”, creăm în același timp directorul „/home/minnie”.

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

Când minnie se conectează, va rula într-un shell restricționat.

 CD 

Ea nu poate invoca comenzi care trebuie să includă o bară oblică „ / “:

 /usr/bin/ping 

Cu toate acestea, ea poate executa în continuare comenzile care se găsesc în cale.

 ping 

Publicitate

Acesta nu este comportamentul la care te-ai fi așteptat și, cu siguranță, nu este ceea ce ne dorim. Pentru a înăspri și mai mult restricțiile, trebuie să schimbăm calea pe care shell-ul lui Minnie o va folosi pentru a căuta comenzi.

Înăsprirea Restricțiilor

Când am creat directorul principal al lui Minnie „/home/minnie”, am creat și un director „/home/minnie/bin”. Aici intervine acel director.

Vom edita fișierul „.bash_profile” al lui Minnie și vom stabili calea ei să indice numai acel director. De asemenea, vom restricționa fișierul „.bash_profile” al lui Minnie, astfel încât numai root să îl poată edita. Asta înseamnă că niciun alt utilizator nu poate edita acel fișier și schimba calea ei.

 sudo gedit /home/minnie/.bash_profile 

Fie editați „PATH=” existent, fie adăugați următoarea linie:

 PATH=$HOME/bin 

Salvați fișierul. Vom schimba proprietarul fișierului la root folosind comanda chown și vom schimba permisiunile fișierului folosind comanda chmod . Numai utilizatorul root va putea edita fișierul.

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

Data viitoare când utilizatorul minnie se conectează, calea ei indică către un singur folder.

Publicitate

Utilizatorul nostru restricționat minnie poate folosi numai comenzi încorporate Bash, cum ar fi echo , alias și logout . Ea nici măcar nu poate folosi ls !

 ls 

Va trebui să ne slăbim puțin stăpânirea dacă vrem ca ei să poată face ceva util. Vom crea câteva legături simbolice din directorul „bin” al lui minnie la comenzile pe care vrem să le poată folosi minnie.

 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/pinky /home/minnie/bin 

Când minnie se va conecta următoarea, va descoperi că poate folosi comenzile încorporate Bash, plus acele comenzi la care au fost legate.

 ls
 pinky dave
 timpul de funcționare 

Restricționarea utilizatorilor existenți

Am creat minnie ca utilizator nou. Pentru a schimba shell-ul unui utilizator existent, putem folosi opțiunea -s (shell) a comenzii usermod .

 sudo usermod -s /bin/rbash mary 

Puteți utiliza comanda less din fișierul „/etc/passwd” pentru a vedea rapid ce shell este setat ca shell implicit al utilizatorului.

 mai puțin /etc/passwd 

Putem vedea că utilizatorul Mary va folosi shell-ul restricționat când se va conecta următoarea.

Publicitate

Nu uitați să aplicați celelalte modificări pentru a restricționa variabila lor de mediu $PATH și să setați comenzile pe care doriți ca utilizatorul Mary să le poată executa.

Restricționarea scripturilor

Un utilizator obișnuit, fără restricții, poate lansa scripturi care sunt executate într-un shell restricționat. Copiați următoarele rânduri și lipiți-le într-un editor. Salvați fișierul ca „restricted.sh” și închideți editorul.

 #!/bin/bash

# scriptul începe în shell Bash normal
echo "## În modul nerestricționat! ##"

ecou
echo "Directorul curent: `pwd`"
echo „Se schimbă directorul”
cd /usr/share
echo "Acum în director: `pwd`"
echo „Se schimbă în directorul principal”
cd ~
echo "Acum în director: `pwd`"

# Setarea modului restricționat
set -r

ecou
echo "## În modul restricționat! ##"

ecou
echo "Directorul curent: `pwd`"
echo „Se schimbă directorul în /home/”
cd /acasă
echo "Încă în director: `pwd`"

ecou
echo „Încerc să pornesc un alt shell”
/bin/bash

ecou
echo „Încerc să redirecționez ieșirea comenzii”
ls -l $HOME > my_files.txt
cat my_files.txt
ecou

iesirea 0

Trebuie să folosim comanda chmod cu indicatorul +x (execute) pentru a face scriptul executabil.

 chmod +x restricted.sh 

Prima parte a scriptului rulează într-un shell normal.

 ./restricted.sh 

A doua porțiune a scriptului - bitul de după linia „set -r” - rulează într-un shell restricționat.

Niciuna dintre acțiunile încercate nu reușește în porțiunea restricționată a scriptului.

Publicitate

Un întreg script poate fi făcut să ruleze într-un shell restricționat adăugând -r la prima linie:

 !#/bin/bash -r

Amintește-ți de Houdini

Obuzele restricționate sunt utile, dar nu complet infailibile. Un utilizator suficient de calificat poate scăpa de ei. Dar atunci când sunt utilizate în mod judicios, sunt o modalitate utilă de a stabili un set de limitări pentru un anumit cont.