Hlavní navigace

lshell: bezpečný shell pro vaše uživatele

Adam Štrauch

Jen u mála serverů, které nejsou vaše a kde máte nějaký účet, dostanete plnohodnotný SSH přístup a tím pádem i důvěru jeho správce. Není jednoduché zpřístupnit celý souborový systém a udržovat správně nastavená práva. A tady přichází lshell, bezpečný shell držící uživatele v nastavených bariérách.

I když je většina shellů postavena co nejpohodlněji, bezpečnost nechávají raději na operačním systému, což je sice správné, ale ne vždy výhodou. Samozřejmě ve chvíli, kdy konfigurujete jednu službu za druhou a nevíte kam skočit dřív, by nějaký restriktivní shell způsobil maximálně vyhození monitoru z okna, ale na druhou stranu se může takový shell hodit čistě pro jednodušší práci se soubory uživatele v jeho adresáři a tady to je přesně to místo, kdy bychom mu měli umožnit spouštět jenom některé programy a příkazy, které uznáme za vhodné a ne všechny, co jsou v systému dostupné.

Restriktivních shellů moc není a abych řekl pravdu, tak znám dostatečně vybavený jenom jeden, a to lshell. Objevil ho jeden z našich čtenářů a upozornil na něj v diskusi pod článkem Jak nahradit FTP pomocí SFTP a zamknout uživatele. Článek rozebíral podobný problém, kdy cílem bylo přes openssh zpřístupnit SFTP, ale ne shell a navíc ještě v chrootu, aby uživatel necestoval mimo svůj domácí adresář.

Zpřístupnit uživatelům shell je trochu komplexnější problém, protože zde dochází ke spouštění programů a je potřeba nastavit limity tak, aby uživatel měl přístup jen k tomu, co potřebuje a nenarušoval klid ostatních. Přesně tohle lshell zvládá, a navíc nedovolí uživatelům spustit jejich vlastní skripty a programy, které neodsouhlasíte.

Lshell je napsaný v Pythonu a o bezpečnost se stará vlastními mechanismy. To mimo jiné znamená, že pokud v něm někdo najde chybu, dostane přístup k celému disku, i když samozřejmě s omezenými právy daného uživatele. Proto se určitě nespoléhejte na jednu ochranu a stejně jako v jiných případech, i zde počítejte s neočekávanými událostmi.

Instalace

Strašení bylo dost, pojďme si lshell nainstalovat a nakonfigurovat. Instalace není nějak složitá, v repositářích Debianu i v Ubuntu se lshell nachází, takže stačí spustit

# apt-get install lshell 

Na jiných systémech bude instalace obdobná nebo se dá použít přímá instalace skriptem setup.py. Shell je napsaný v Pythonu, takže pokud ho v systému nemáte (například nějaký malý router s OpenWRT), počítejte s touto závislostí.

Uživatelé, kteří budou mít lshell nastavený jako výchozí shell, by měli být ve skupině lshell, jinak nebude fungovat logování.

Konfigurace

Když je lshell na svém místě, přípraven stát se strážcem u brány k vašemu serveru, je čas podívat se na konfiguraci v souboru /etc/lshell.conf, kde se dá nastavit všechno, co souvisí s tím, co bude uživatel spouštět. Nejlepší bude rozebrat si konfigurační soubor pěkně po kouskách.

[global]
logpath         : /var/log/lshell/
loglevel        : 2
logfilename     : %y%m%d-%u 

V globální sekci konfiguračního souboru se nastavuje to nejdůležitější, logy. Do nich lshell zapisuje všechno dění, které se vymyká tomu, co jste uživatelům dovolili. Takže když se někdo snaží dostat, kam nemá, nebo spustit, co nemá, bude to zapsáno v logu a budete mít přehled o uživatelích, kteří nerespektují nastavená pravidla.

Výchozí nastavení by mohlo zbytečně zanášet adresář s logy, takže ho doporučuji trochu upravit a počeštit:

logfilename     : %m%y-%u 

Adresář s logy můžeme nechat jak je. Loglevel s hodnotou dvě nás bude informovat o přihlášení uživatele a o jeho prohřešcích. Při nastavení na hodnotu 1 najdeme v logu pouze prohřešky, 0 neloguje nic a 3 se chová shodně s 2.

[default]
allowed         : ['ls','echo','cd','ll','pwd','grep','|','vim'] 

V sekci default najdeme vše, co se týká výchozích pravidel lshellu. Pokud chceme nastavit pravidla pro konkrétní uživatele, uděláme to v sekci s jejich názvem, jako třeba

[root]
allowed         : ['all'] 

kde uživateli root povolíme spouštět všechno, ale na ostatní se bude aplikovat výchozí politika.

Přejdeme k jednotlivým omezením. Parametrem allowed nastavujeme seznam povolených příkazů a programů (all povoluje vše). S tím také souvisí další parametry, které tento ještě upravují.

forbidden       : [';', '&','`','>','<', '$(', '${','|']
sudo_commands   : [''] 

Na prvním řádku jsou vypsané všechny znaky, které nejsou při zadávání povoleny. V tomto případě třeba nejde použít přesměrování standardního vstupu a výstupu nebo roura. Na dalším řádku se nachází seznam programů, které lze spustit jako root pomocí sudo.

Když uživatel udělá něco špatně, lshell ho o tom informuje a když překročí určitý počet prohřešků, tak ho to odpojí. Zde se nastavuje, kolik takových prohřešků bude.

warning_counter : 2 

Aliasy lshell také umí a uživatel je nemůže nějak ovlivnit.

aliases         : {'ll':'ls -l', 'vi':'vim'} 

Při přihlášení by mohli být někteří uživatelé lshellem zmateni, takže pomůže je o tom informovat.

intro           : "== Omezený shell. Zadej '?' nebo 'help' pro nápovědu. ==" 

Uživatel je držen v jeho domovském adresáři, ale můžete nastavit i další adresáře, do kterých bude mít přístup, aniž by to vyvolalo varování.

path            : ['/home/bla/','/etc'] 

Když nechceme, aby měl uživatel přístup do celého svého adresáře, ale jen třeba do jeho podadresáře, uděláme to pomocí tohoto parametru. Pokud chceme nastavit toto pravidlo ve výchozím chování, můžeme k tomu použít klíčové slovo %u, které bude ve výsledku nahrazeno uživatelským jménem.

home_path       : '/home/%u/' 

Tímto nastavíme systémovou proměnnou $PATH.

env_path        : ':/usr/local/bin:/usr/sbin' 

Když chce uživatel přenášet soubory přes SFTP/SCP, lshell ho umí omezit i v tomhle. Hodnota 1 podporu pro scp zapne a 0 vypne.

scp             : 1 

Je možné zakázat také pouze upload

scp_upload       : 0 

Nebo download.

scp_download     : 0 

SFTP je komplexnější než SCP a pokud se jím cítíte ohroženi, můžete ho uživatelům zakázat a nechat jim třeba jen SCP.

sftp            : 1 

Také spouštění programů přímo přes SSH (ssh uzivatel@server program) lze omezit třeba jen na výpis adresáře nebo zálohování přes rsync.

overssh         : ['ls', 'rsync'] 

Když uživatel spustí program nebo přístup, ke kterému nemá právo, se striktním nastavením bude zapsán v logu, dostane varování a samozřejmě se sníží počet varování do automatického odpojení.

strict          : 1 

Uživatele také můžeme donutit, aby soubory odeslané přes scp hrnul pouze do daného adresáře.

scpforce        : '/home/bla/uploads/' 

A nakonec nám zbývá nastavení historie, kde můžeme ovlivnit soubor, kam se má uložit, a její délku.

history_size     : 100
history_file     : "/home/%u/.lshell_history" 

Závěr

Lshell dává správcům serverů do ruky nástroj, který uživatelům umožní přístup přes SSH k jejich datům a zároveň je udrží od sebe dostatečně oddělené. Samozřejmě se na lshell musí pohlížet pouze jako na jednu vrstvu zabezpečení, protože když se v něm najde chyba, může se pak uživatel dostat i k něčemu, k čemu nemá. V takovém případě by ovšem měly zafungovat další ochrany, kterými by měl každý server disponovat.

Našli jste v článku chybu?

29. 10. 2010 3:07

Ako spomínaš, nie je vhodné povoliť v obmedzenom prístupe vi/vim. Pre tieto prípady existujú príkazy rvi/rvim, ktoré sú vlastne klasické vi/vim, ale neumožňujú spustiť shell.
@p. Štrauch, nemohli by ste upraviť článok a uviesť tam upozornenie na použitie vi?


1. 11. 2010 0:54

Vlado (neregistrovaný)

Na sprístupnenie samotného scp/sftp bez možnosti pracovať interaktívne nastavujem užívateľom ako shell scponly.

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu