OpenSSH je mocný nástroj umožňující primárně vzdálený bezpečný přístup na shell serveru, sekundárně také přenos dat (SCP, SFTP), TCP forward, X forward a mnoho dalších funkcí. Ve starších verzích byla konfigurace jednotná pro celý server, od verze 4.9p1 (je již v aktuálních distribucích RHEL 6, CentOS 6, Debian Squeeze) je nově možné nastavovat mnoho voleb pro jednotlivé uživatele, skupiny uživatelů a sítě. Této nové možnosti využijeme pro jeden z nejčastějších požadavků na OpenSSH na serveru, jako náhradu prastarého nebezpečného FTP (který loni oslavil 40 let).
Pomocí nové direktivy Match (Match User
, Match Group
, Match Host
a Match Address
) lze nastavovat tyto parametry specificky pro danou skupinu:
AllowAgentForwarding, AllowTcpForwarding, Banner, ChrootDirectory, ForceCommand, GatewayPorts, GSSAPIAuthentication, HostbasedAuthentication, KbdInteractiveAuthentication, KerberosAuthentication, KerberosUseKuserok, MaxAuthTries, MaxSessions, PubkeyAuthentication, AuthorizedKeysCommand, AuthorizedKeysCommandRunAs, PasswordAuthentication, PermitEmptyPasswords, PermitOpen, PermitRootLogin, RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset, X11Forwarding and X11UseLocalHost
V tomto článku budeme chtít nahradit staré FTP, z čehož plynou požadavky:
- Povolit uživateli přístup do adresáře s daty.
- Uzamknout jej, aby nemohl brouzdat po celém fs.
- Nebude mít povolen přístup na shell.
- Přístup pomocí hesla.
Nastavení SFTP pro vybrané uživatele
Nastavení konfiguračního souboru /etc/ssh/sshd_config
:
Subsystem sftp internal-sftp Match User user1, user2 ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no PasswordAuthentication yes
Uživatelé user1 a user2 se budou moci přihlásit heslem (PasswordAuthentication yes
), nebudou si moci nastavit TCPForward (AllowTcpForwarding no
), připojí se pouze protokolem SFTP (ForceCommand internal-sftp
— místo shellu definovaného v /etc/passwd
se po přihlašení spustí tento příkaz).
Pokud jsou uživatelé ve speciální skupině (třeba po předchozím ftp přístupu), lze s výhodou použít Match Group
.
Poznámka k chrootu
Volba ChrootDirectory %h
uzamyká uživatele v jeho home adresáři (%h
). Chroot adresář musí mít (z bezpečnostních důvodů) vlastníka roota a uživatelé tam nesmějí mít zápis (chown root.root; chmod 755
). V praxi to znamená, že je třeba (v chroot adresáři) vytvořit adresář (například pro web), kam již uživatelé práva zápisu mít mohout. Stejný postup se týká například také vsftpd.
skoda ze sem na tohle neprisel uz davno, dik.
Rád jsem pomohl.
mám pocit že na toto téma napsal Petr Krčmář kdysi celkem dobrý článek na root :
http://www.root.cz/clanky/jak-nahradit-ftp-pomoci-sftp-a-zamknout-uzivatele/
K tomu jeste selinux a je to dokonale
Omezení na vlastnictví chroot adresáře rootem může být v řadě případů problematické, případně můžeme potřebovat uživatelům zpřístupnit více různých adresářů, ale ne celý FS. Úspěšně používám řešení, kdy vytvořím např. /var/lib/sftp-chroot vlastněný rootem, a v něm přes ‚mount -o bind‘ vytvořím „stínovou strukturu“ přístupných adresářů – např. /home, /srv/data a další. Sshd se pak nastaví stejně jako v článku, jen:
ChrootDirectory /var/lib/sftp-chroot
Někdy by stačilo nastavit chroot např. na celý /home, ale tam se projevuje drobný problém s výchozím adresářem, kdy se sshd pokouší po přihlášení udělat cd např. do ‚/home/home/user‘.