Synology GIT (SSH přes Public key)

Synology nedávno vydal balík GIT server pro své DiskStation NAS podporující DSM 5.x. Instalace ale není tak přímočará, jak by se mohlo zdát, protože GIT Server nemá (víceméně) žádný program pro nastavení a většinu je potřeba dělat přes konzoli.

Poznámka: V článku budu počítat s tím, že již umíte používat SSH a máte připravený privátní klíč. Návodů k tomu je celá řada.

Instalace

Nejprve jděte v DSM do Ovládací panely, Sdílení souborů, Uživatel, Rozšířené, Složka uživatele a zaškrtněte Povolit službu Složka uživatele. Pokud máte více disků, zvolte, na kterém budou vytvořeny.

SSH přístup

Pak jděte do Ovládací Panely, System, Terminál a SNMP, Terminál a zaškrtněte SSH (nebo Telnet, pokud víte proč).

Následně se pomocí Putty (nebo jiného nástroje) připojte k NAS jako root (heslo má stejné jako DSM admin), jděte do složky /etc/ssh/ a otevřete soubor sshd_config:

vi /etc/ssh/sshd_config

Stiskněte I (pro editaci) a smažte # z řádek:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile   .ssh/authorized_keys

Stiskněte ESC, pak klávesu „:“ (na české klávesnici SHIFT+.) a nakonec „w“, „q“ a ENTER.

Nyní jděte zpět do DSM do nastavení terminálu a zrušte SSH, klikněte na Použít, pak ho zase zaškrtněte a klikněte na Použít (tím vynutíte nové nastavení).

GIT složka a uživatel

Nyní musíte vytvořit sdílenou složku a uživatele, který do ní bude mít přístup. V DSM v Ovládacích panelech otevřete Sdílená složka a klikněte na Vytvořit. Zadejte jméno (např. git) a zvolte disk, kam chcete složku uložit. V oprávněních ponechte akorát „admin“ a všem ostatním uživatelům přístup zakažte.

Nyní klikněte v Ovládacích panelech na Uživatel a zvolte Vytvořit. Zadejte jméno (např. git), nechte mu vytvořit náhodné heslo (uživatel se nebude muset přímo přihlašovat – heslo tedy není důležité) a pod oprávněními mu zakažte vše kromě GIT složky (do té mu dejte právo číst a zapisovat).

Instalace GITu

V DSM jděte do Centrum balíčků a pod Nástroje najděte Git Server. Klikněte na instalovat a počkejte. Po instalaci zkontrolujte, zda je Stav: Spuštěno.

Poznámka: V nabídce nyní můžete otevřít aplikaci Git Server (pokud tam není, není server spuštěn), ale ta prakticky nic nenabízí – a to jediné, co nabízí, nefunguje příliš dobře – a tak ji nemá cenu používat. Pro jistotu v ní vůbec nic nedělejte – pouze byste si rozbili konfiguraci a zamezili GIT uživateli používat repozitáře!

Nastavení GIT uživatele

Přihlašte se přes SSH jako root a otevřete soubor passwd:

vi /etc/passwd

V novější verzi DSM, která nepovoluje přihlášení jako root, se musíte přihlásit jako admin a následně použít příkaz sudo -i. Také můžete předchozí příkaz uvést se SUDO:

sudo vi /etc/passwd

Najděte řádek příslušející požadovanému git uživateli (začíná jeho jménem) a stiskněte I. Pak přepište konec řádky (který bude nejspíše „/bin/nologin“) na:

:/bin/ash

Tím povolíte uživateli používat SSH. Pokud to nebude fungovat, zkuste „/bin/sh“ nebo „/bin/bash“.

Nyní jděte do složky uživatelů:

cd /var/services/homes/

a smažte složku git uživatele:

rm -rf git/

Následně tuto složku vytvořte jako odkaz na repozitář:

ln -s /volumeX/git git
chown -h git git
chown git git
chmod 755 git

„volumeX“ je disk, na kterém jste složku vytvořili (např. „volume1“), „git“ za „volumeX“ je jméno složky pro repozitář. U dalších příkazů je první „git“ jméno uživatele a to druhé je jméno právě vytvořeného odkazu (u posledního příkazu jsou místo jména uživatele jeho práva – jméno je odkaz). U chown s parametrem -h nastavujete vlastníka odkazu, zatímco u druhého nastavujete vlastníka odkazované složky (tedy repozitáře).

Alternativně můžete v souboru passwd přepsat složku uživatele přímo na repozitář. Rozdíl v tom ale není, a pokud něco nefunguje, je to spíše právy souborů než tím, že je složka uživatele odkaz.

Pokud již repozitář obsahuje soubory (např. repozitáře zkopírované z jiného serveru), musíte jim také nastavit vlastníka:

chown -R git git/*

Parametrem -R a hvězdičkou říkáte, že se mají zpracovat všechny soubory ve složce. První „git“ je jméno uživatele, to druhé je jméno vytvořeného odkazu.

Nyní jděte do složky repozitáře a vytvořte podsložku „.ssh“:

cd git
mkdir .ssh
chown git .ssh
chmod 700 .ssh

Vytvořte soubor „authorized_keys“ a vložte do něj veřejný klič:

cd .ssh
touch authorized_keys
chown git authorized_keys
chmod 600 authorized_keys
vi authorized_keys

Veřejný klíč musí vypadat následovně:

ssh-rsa AAAA....XXXX nějaký komentář

nebo

ssh-rsa AAAA....XX== nějaký komentář

a musí být na jednom řádku.

Přihlášení uživatele

Nyní můžete zkusit přihlásit uživatele přes SSH pomocí soukromého klíče (private key) – pokud se zobrazí „Using username git. Authenticating with public key.“ tak je vše v pořádku. Pokud se naopak zobrazí žádost o heslo „git@diskstation’s password:“ tak jste udělali něco špatně. Zkontrolujte hlavně vlastníka (git) a práva všech výše uvedených složek (odkaz a repozitář 755, .ssh 700 a keys 600)!

Pokud se uživatel přihlásí s použitím klíče, ale pak se hned zase odhlásí a nebo se zobrazí chyba „Permition denied“, zkontrolujte nastavení v souboru „/etc/passwd“ (cesta do domovské složky a k bin/ash – příp. zkuste alternativy sh nebo bash).

Vytvoření repozitáře

Repozitář musíte opět vytvářet přes SSH, ale nyní se již stačí připojit jako GIT uživatel – který se hlásí pomocí klíče a jeho domovská složka je složka s repozitáři, takže je to bez zdržování.

Repozitář vytvoříte těmito příkazy:

mkdir myProject
cd myProject
git --bare init
cd ..
chown -R git myProject
chmod -R 744 myProject

myProject je jméno repozitáře a „git“ v příkazu chown je jméno GIT uživatele – tento příkaz je potřeba, pokud se hlásíte jako root; pokud jste použili přímo GIT uživatele, bude již automaticky vlastníkem.

Klonování a Pushování

Nyní již můžete ve svém oblíbeném GIT programu (např. GitExtensions) nastavit repozitář na adresu:

ssh://git@diskstation/~/myProject

„git“ je jméno GIT uživatele, „diskstation“ je adresa NASu a „myProject“ je jméno repozitáře.

Test přístupu

Pokud se vám nedaří repozitář naklonovat nebo pushnout, můžete zkusit, co server vrací jako odpověď na git dotaz. Najděte nebo nainstalujte SSH a zadejte příkaz:

ssh git@diskstation git-receive-pack '~/myProject'

Na tento příkaz by měl server odpovědět:

1234abcd...ef refs/heads/master report-status delete-refs ... agent=git/X.Y.Z
0000

První čtyři znaky jsou délka řádku (proto poslední řádek obsahuje 0000 protože je prázdný). V prvním řádku je pak hash a jméno nejnovějšího commitu, seznam podporovaných příkazů a končí specifikací verze GIT (agent=git/X.Y.Z). Další řádky pak mohou obsahovat hashe a jména všech větví v repozitáři. Pokud server vrátí něco jiného (např. chybu nebo dotaz na heslo), není to platná GIT odpověď a váš klient odmítne komunikovat. Pak musíte podle chyby dohledat, jak problém vyřešit. Poznámka: server může vrátit dotaz na heslo jednoduše proto, že váš SSH příkaz nepodporuje přihlášení přes privátní klíč. V takovém případě zkuste naopak přihlášení přes PUTTY, které ho podporuje:

plink git@diskstation git-receive-pack '~/myProject'

Přístup s heslem

Pokud potřebujete vytvořit repozitář, do kterého se bude možno připojit pomocí hesla (protože máte nějakou speciální aplikaci, která privátní klíče nepodporuje), doporučuji vytvořit nového uživatele pro daný repozitář, abyste předešli riziku prozrazení přistupu ke všem GIT repozitářům. U přístupu přes heslo je potřeba pamatovat na to, že heslo se bude posílat v čitelné podobě a přístup tedy není nijak zabezpečen!!!

V DSM vytvořte nového uživatele (např. „pubgit“) a přiřaďte mu heslo, které bude používat pro GIT repozitář (jelikož není nijak bezpečné, může to být klidně „pubgit“ nebo „heslo“). V průvodci zakažte přístup ke všem složkám a službám. Následně mu nastavte v /etc/passwd přístup na /bin/ash. Podle výše uvedeného postupu vytvořte nový repozitář, který mu bude patřit:

cd /volumeX/git/
mkdir pub.git
cd pub.git
git --bare init
cd ..
chown -R pubgit pub.git
chmod -R 744 pub.git

Nyní jděte do HOME složky a změňte domovskou složku nového uživatele na vytvořený repozitář:

cd /var/services/homes
rm -r pubgit
ln -s /volumeX/git/pub.git pubgit
chown -h pubgit pubgit
chown pubgit pubgit
chmod 755 pubgit
chown -R pubgit pubgit/*

Nyní můžete přistupovat k repozitáři přes adresu ssh://pubgit:heslo@diskstation/~ (kde heslo je heslo uživatele a diskstation je adresa serveru). Pozor ale na to, že tato adresa je určena jen pro specifické programy, které vyžadují heslo. Naopak programy jako Git Extensions neumí heslo v adrese použít a zobrazí chybu fatal: protocol error: bad line length character:, za kterou budou následovat první 4 znaky ze jména uživatele (to proto, že se Synology ptá na SSH heslo místo aby poslalo odpověď).

Poznámka: Pokud později změníte heslo pro daného uživatele přes DSM (příkaz passwd nefunguje), budete muset znovu nastavit přistup v /etc/passwd.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..