GNU/Linux >> Znalost Linux >  >> Linux

Svázat připojení uživatele SFTP po použití chrootu

Tento článek je určen administrátorům nebo vývojářům.

Vázané připojení uživatele Secure File Transfer Protocol (SFTP), na kterém byla provedena operace chroot na vašich serverech Red Hat® Enterprise Linux® (RHEL®) a CentOS® 6 (OpenSSH je 4.9p1 nebo novější), vytváří následující podmínky:

  • Uživatel může používat pouze SFTP a nemá plný přístup k prostředí přes Secure Shell (SSH).
  • Uživatel je uvězněn ve svém domovském adresáři a nemá možnost se z něj dostat.
  • Z pohledu uživatele je jeho domovský adresář na serveru.
  • Toto připojení vazby je často potřeba pro vývojáře, kteří mohou potřebovat přístup k zápisu do jednoho (nebo více) kořenového adresáře nebo kořenových adresářů dokumentů Apache® nebo do jiného adresáře pro účely nahrávání nebo úpravy webového obsahu.

Tento článek popisuje, jak pomocí operace chroot nastavit domovský adresář pro uživatele a vytvořit v tomto domovském adresáři připojení k libovolnému externímu (kořenovému) adresáři, ke kterému potřebuje přístup. Připojení vazby je jediný způsob, jak poskytnout uživateli přístup k datům mimo jejich chroot adresář. Nemůžete do něj použít symbolický odkaz (symlink) na data mimo chrootdirectory (například ln -s /home/user/http /var/www/http ). Po operaci chroot nezná souborový systém žádná data mimo adresář chroot. Tento nedostatek znalostí porušuje symbolický odkaz. Alternativně můžete kořenový adresář dokumentu přesunout do domovského adresáře uživatele a poté jej symbolicky propojit do původního umístění (například ln -s /var/www/html /home/user1/html ).

Démon SSH (SSHD) nabízí některé dynamické proměnné v konfiguraci pro operaci chroot:

  • %u :uživatelské jméno přihlášeného uživatele
  • %h :$HOME přihlášeného uživatele

SSHD je velmi striktní ohledně toho, jak musíte nastavit oprávnění. Jedním z těchto omezení je, že uživatel nemůže zapisovat do nejvyšší úrovně chroot adresáře. Musíte zvolit vhodnou nejvyšší úroveň pro chroot adresář, jako jsou následující nastavení:

  • Nastavte ChrootDirectory na %h :Uživatel nemůže zapisovat do své domovské cesty. Potřebují buď podsložku, do které mohou zapisovat (například uploady), nebo připojení k jinému umístění, do kterého mohou zapisovat (například /var/www/html ).
  • Nastavte ChrootDirectory na /home/chroot :Uživatel může zapisovat do své domovské cesty, ale nejvyšší úroveň adresáře chroot je chráněna oprávněními systému souborů, nikoli vězením chroot.

První možnost používá chroot adresář k zaručení bezpečnosti namísto spoléhání se na oprávnění souborového systému. Druhá možnost umožňuje zápis do domovského adresáře, ale znamená, že chroot adresář je sdílen s ostatními uživateli a pouze oprávnění souborového systému brání zpřístupňování informací. Správná možnost závisí na vašich potřebách.

Navázat připojení uživatele SFTP po operaci chroot

Pomocí následujících kroků svázejte připojení uživatele:

  1. Vytvořte skupinu, do které přiřadíte každého uživatele, který potřebuje být uvězněn, do jejich domovského adresáře:

    # groupadd sftponly
    
  2. Vytvořte uživatele. Nastavte shell na /bin/false a přiřaďte uživatele do skupiny, kterou jste vytvořili výše:

    # mkdir -p /home/chroot/$NEWUSER
    # useradd -d /$NEWUSER -s /bin/false -G sftponly $NEWUSER    # Note: homedir is relative to the chroot
    # pass}wd $NEWUSER
    
  3. Aktualizujte /etc/ssh/sshd_config soubor:

    1. Zakomentujte následující řádek:

       Subsystem       sftp    /usr/libexec/openssh/sftp-server
      
    2. Na konec souboru přidejte následující řádky:

       Subsystem     sftp   internal-sftp
       Match Group sftponly
       ChrootDirectory /home/chroot   # OR     ChrootDirectory %h
       X11Forwarding no
       AllowTCPForwarding no
       ForceCommand internal-sftp
      
    3. Otestujte konfiguraci a poté znovu načtěte SSHD:

       # sshd -t
       # service sshd reload
      

Nastavte domovský adresář uživatele po operaci chroot

  1. Pokud je ChrootDirectory /home/chroot , spusťte následující příkazy:

     # chmod 711 /home/chroot            # This prevents chrooted users from seeing other chrooted users' homedirs
     # chmod 755 /home/chroot/$NEWUSER
     # chown $NEWUSER:sftponly /home/chroot/$NEWUSER
    
  2. Pokud je ChrootDirectory %h , spusťte následující příkaz:

     # chown root:root /home/chroot/$NEWUSER
    

Vytvořte připojení k jakékoli cestě mimo chroot adresář, který uživatel potřebuje přístup

  1. Přidejte následující řádek do /etc/fstab soubor:

     /var/www/html   /home/chroot/$NEWUSER/www        none    bind    0 0`
    
  2. Připojte adresář:

     # mkdir /home/chroot/$NEWUSER/www
     # mount /home/chroot/$NEWUSER/www
    

Aktualizovat oprávnění

Aktualizujte oprávnění systému souborů u adresářů, ke kterým uživatel přistupuje. Vezměte v úvahu ostatní uživatele, kteří mají aktuálně přístup pro čtení/zápis, abyste se ujistili, že jejich oprávnění neúmyslně neodeberete. Tento krok můžete dokončit několika různými způsoby, například změnou vlastnictví uživatele, změnou vlastnictví nebo oprávnění skupiny nebo přidáním seznamů řízení přístupu k souborům (FACL).

Následující příklad ukazuje příkazy pro přidávání FACL:

     # setfacl -Rm u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/
     # setfacl -Rm d:u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/

Možné problémy

Mohou nastat následující problémy.

Oprávnění k adresáři

Oprávnění k adresáři mohou způsobit následující problémy:

  • Vestavěná funkce chroot protokolu SFTP je velmi přísná, pokud jde o oprávnění. Pokud oprávnění nejsou dostatečně zabezpečena, zobrazí se při pokusu o přihlášení následující chyba:

        root@ftp01[ ~ ]# sftp $NEWUSER@localhost
        Connecting to localhost...
        chroottest@localhost's password:
        Write failed: Broken pipe
        Couldn't read packet: Connection reset by peer
    
  • Možná se budete moci přihlásit, ale nemůžete nahrávat soubory. V tomto případě se zobrazí následující chyba:

        sftp> put test
        Uploading test to /$NEWUSER/test
        Couldn't get handle: Permission denied
        In both cases the problem is directory permissions.  Here's what a known-good directory structure looks like:
        root@ftp01[ ~ ]# ls -ld / /home /home/chroot /home/chroot/$NEWUSERdrwxr-xr-x. 28 root     root     4096 Aug 22 10:31 /
        drwxr-xr-x. 18 root     root     4096 Oct 10 10:49 /home
        drwx--x--x   3 root     root     4096 Oct 10 10:49 /home/chroot
        drwxr-xr-x   3 $NEWUSER $NEWUSER 4096 Oct 10 11:40 /home/chroot/$NEWUSER
        root@ftp01[ ~ ]#
    

SCP nefunguje

Tento typ uživatele pracuje pouze s SFTP a nepracuje s jinými protokoly (např. vzdálený shell (RSH), secure include protect (SCP) nebo File Transfer Protocol (FTP)).


Linux
  1. Jak nastavit linuxové chroot vězení

  2. Připojení vzdáleného adresáře pomocí SSHFS v Debianu Jessie

  3. Kopírovat soubory upravené po určitém datu pomocí přepínačů Cp?

  1. Bind mounts v Linuxu

  2. Jak bezpečně přenášet soubory pomocí sftp (včetně příkladů)

  3. Proč se připojení připojení souboru po odpojení nezdaří pomocí ENOENT?

  1. Bind Mount?

  2. Ssh – Omezení uživatele Ssh/scp/sftp na adresář?

  3. Chroot SFTP – Umožňuje uživateli povolit zápis do aktuálního (chroot) adresáře