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.