it-swarm-eu.dev

Jak mohu chrootovat sftp pouze pro SSH do svých domovů?

Chci poskytnout klientovi přístup k mému serveru, ale chci omezit tyto uživatele na jejich domovské adresáře. Připojím se k libovolným souborům, které chci vidět.

Vytvořil jsem uživatele s názvem bob a přidal jsem ho do nové skupiny s názvem sftponly. Mají domovský adresář na /home/bob. Změnil jsem jejich Shell na /bin/false k zastavení přihlášení SSH. Zde je jejich /etc/passwd řádek:

bob:x:1001:1002::/home/bob:/bin/false

Také jsem změnil /etc/ssh/sshd_config zahrnout následující:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

Když se pokusím přihlásit jako oni, tady je to, co vidím

$ sftp [email protected]
[email protected]'s password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

Pokud komentuji řádek ChrootDirectory, mohu SFTP dovnitř, ale pak mají volný obrat přes server. Zjistil jsem, že ChrootDirectory /home funguje, ale stále jim poskytuje přístup do jakéhokoli domovského adresáře. Výslovně jsem se pokusil ChrootDirectory /home/bob ale to také nefunguje.

Co dělám špatně? Jak mohu omezit bob na /home/bob/?

----UPRAVIT-----

Dobře, tak jsem se jen podíval na /var/log/auth.log a viděl jsem to:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

Nejsem si úplně jistý, co se tam děje, ale naznačuje to, že se v uživatelském adresáři něco děje. Zde je ls -h /home výstup:

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob
132
Oli

Celá tato bolest je způsobena několika bezpečnostními problémy, jako popsáno zde . Adresář chroot musí vlastnit root a nemůže to být žádný přístup ke skupinovému zápisu. Půvabný. Takže v podstatě musíte svůj chroot proměnit v přidržovací buňku a uvnitř , které můžete mít svůj upravitelný obsah.

Sudo chown root /home/bob
Sudo chmod go-w /home/bob
Sudo mkdir /home/bob/writable
Sudo chown bob:sftponly /home/bob/writable
Sudo chmod ug+rwX /home/bob/writable

A bam, můžete se přihlásit a napsat /writable.

125
Oli

Chcete-li chroot SFTP adresáře, musíte

  1. Vytvořte uživatele a vynuťte root, aby byl jeho vlastníkem

    Sudo mkdir /home/john
    useradd -d /home/john -M -N -g users john
    Sudo chown root:root /home/john
    Sudo chmod 755 /home/john
    
  2. Změňte umístění subsystému na /etc/ssh/sshd_config:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    a vytvořte sekci uživatele na konci souboru (ssh může umřít respawning, pokud je umístěn za Subsystem řádek):

    Match User john
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
61
josircg

Celý den jsem se snažil získat síťový podíl na mé malině. Chtěl jsem uživatele uzamknout, aby nemohl procházet celý souborový systém, žádný přístup k ssh přihlášení a chtěl jsem mít přístup k zápisu do síťové sdílené položky.

A takhle to fungovalo:

Nejprve jsem vytvořil uživatele:

Sudo useradd netdrive

Poté upravil /etc/passwd a ujistil se, že má /bin/false pro uživatele, takže řádek byl:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

Upravil jsem /etc/ssh/sshd_config zahrnout:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

Změnil vlastníka a oprávnění domovského adresáře:

Sudo chown root:root /home/netdrive/
Sudo chmod 755 /home/netdrive/

Dobře, po tom všem jsem se dokázal připojit pomocí sshfs, ale v režimu jen pro čtení. Co jsem musel udělat, abych získal zapisovatelnou složku:

Sudo mkdir -p /home/netdrive/home/netdrive/
Sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
Sudo chmod 755 /home/netdrive/home/netdrive/

To bylo ono, fungovalo to bez jakýchkoli dalších změn. Všimněte si, že mám pouze zapisovatelná oprávnění k uživatel, nikoli k skupině tolik jiných řešení online. Bez problémů jsem byl schopen vytvářet/mazat/upravovat/přejmenovávat soubory/složky.

Při přístupu pomocí uživatele sshfs s uživatelem netdrive kvůli konfiguraci chrootu bych viděl pouze věci uložené uvnitř serveru /home/netdrive/ adresář, perfektní. Opakované /home/netdrive/home/netdrive/ Struktura adresáře je to, co mi umožnilo pracovat s čistým zapisovatelným řešením chroot ssh.

Nyní vysvětlím níže uvedené problémy:

Pravděpodobně byste neměli provádět následující odstavce:

Poté, co jsem se podíval na výše uvedená řešení (a mnoho dalších na síti, které dokonce používaly acl (seznamy řízení přístupu)) Pořád jsem to nemohl uvést do provozu, protože to, co jsem udělal dál, bylo:

Následující práce NE práce pro mě:

Sudo mkdir /home/netdrive/writable/
Sudo chown netdrive:netdrive /home/netdrive/writable/
Sudo chmod 755 /home/netdrive/writable/

Protože uživatel netdrive stále nebyl schopen zapsat do toho /home/netdrive/writable/ adresář, přestože vlastní složku a má oprávnění. Pak jsem udělal: Sudo chmod 775/home/netdrive/writable/A teď jsem mohl vytvořit adresář a smazat ho, ale nemohl jsem ho upravit, protože byl vytvořen bez skupinově zapisovatelných oprávnění. Zde z toho, co jsem viděl na síti, lidé používají k opravě acl. Ale nebyl jsem s tím spokojený, protože jsem musel nainstalovat acl, poté nakonfigurovat připojovací body atd. Také nemám ponětí, proč bych potřeboval skupina povolení k zápisu do složka vlastněná stejným uživatelem.

Zdá se, že z nějakého důvodu vytvoření /home/netdrive/home/netdrive a udělením vlastnictví poslední složce netdrive jsem dokázal, aby všechno fungovalo bez zasílání zpráv s oprávněními skupina.

6
mihai.ile

Sledoval jsem tento článek, ale nefungovalo to. Začalo to fungovat poté, co jsem provedl tuto změnu (doporučeno v odpovědích výše):

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Plus vytvořil kořenový domovský adresář, pod kterým jsem měl uživatelsky zapisovatelný podadresář (jak je popsáno výše).

Nová a užitečná věc, kterou chci k této odpovědi přidat, je, že konfiguraci můžete zjednodušit zadáním% h jako domovského adresáře uživatele:

ChrootDirectory %h

Objevil jsem to díky this link.

2
user109764