Základní zabezpečení git serveru

Pokud provozujete vlastní git server, možná jste se někdy sebe sami ptali, jak zvýšit jeho bezpečnost.

Jedním ze základních prvků je samozřejmě správně nastavený firewall. Tento lze realizovat například pomocí iptables.

Druhým stavebním prvkem je pak korektní nastavení přihlašovacích údajů pro uživatele. Jsou zde opět dvě možnosti – vyžadovat silné heslo, nebo vyžadovat klíč pro přihlášení.

V tuto chvíli je možné systém považovat za zabezpečený, existují zde ovšem další kroky, pomocí kterých můžeme zabezpečení systému ještě trochu zvýšit. Pokud realizujete pouze git server, je možné všem uživatelům omezit přístup k shellu. Díky tomuto dodatečnému omezení můžeme potenciálnímu útočníku zabránit v páchání dalších škod.

Níže popsaný postup se skládá ze dvou kroků. Prvním krokem je změna výchozího shellu pro uživatele. Tuto změnu je nutné provést jako superuživatel editací souboru /etc/passwd. Každý řádek v tomto souboru reprezentuje jednoho uživatele v systému. Každý řádek pak obsahuje řadu hodnot oddělených dvojtečkami. Výchozí shell pro uživatele je uveden na poslední pozici tohoto seznamu.

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

Výše zobrazený řádek je již upravený pro potřeby tohoto návodu.  V případě, že jste ještě žádné úpravy v tomto souboru nedělali, budete zde mít s největší pravděpodobností hodnotu /bin/bash, případně podobnou.

Po uložení této změny se již můžete pokusit o přihlášení ke git serveru pomocí výše nastaveného uživatelského jména.

martin@m-linux $ ssh git@xxx.xxx.xxx.xxx

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: .......... from xxx.xxx.xxx.xxx
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to xxx.xxx.xxx.xxx closed.

Vaše přihlášení nicméně selže stejně jako v příkladu výše. Pozornému čtenáři jistě neunikne řádek, na kterém se píše, že pro daného uživatele neexistuje adresář ~/git-shell-commands.

Druhým krokem nastavení je právě vytvoření adresáře git-shell-commands v domovské složce uživatele. Jedná se o adresář, který git-shell vyžaduje ke svému korektnímu fungování. Pokud existuje, git-shell povolí uživateli vykonávat příkazy, které jsou zde přítomny. Pokud je  adresář prázdný, je přihlášenému uživateli povoleno vykonat pouze příkaz exit, který slouží k ukončení aktuálního sezení.

martin@m-linux $ ssh git@xxx.xxx.xxx.xxx

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: ................ from xxx.xxx.xxx.xxx
git> 
git> ls
unrecognized command 'ls'
git>

Jak je možné vidět, po přihlášení uživatelem je spuštěn pouze omezený git-shell. Tento nedovolí vykonávat ani základní příkazy, jako ls, cd, neboť nejsou povoleny.

Pro povolení některých příkazů je vhodné vytvořit například symbolický link na binární soubory v systému. Množství povolených příkazů by nicméně mělo zůstat co nejmenší.

Zdroje:

https://git-scm.com/docs/git-shell

 


Posted

in

by