Cum să utilizați Shell restricționat pentru a limita ceea ce poate face un utilizator Linux
Publicat: 2022-01-29Un 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.
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
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
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.
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.
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.
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.