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

Adam Štrauch 29. 10. 2010

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.

widgety

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?
DigiZone.cz: Přelaďte si Šlágr TV u Skylinku

Přelaďte si Šlágr TV u Skylinku

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

120na80.cz: Tipy jak zvládnout školku

Tipy jak zvládnout školku

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

DigiZone.cz: Sat novinky: NASA Ultra HD (4K)

Sat novinky: NASA Ultra HD (4K)

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

Lupa.cz: Adblock Plus začal prodávat reklamy

Adblock Plus začal prodávat reklamy

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře