Guide för SFTP-server med s.k. chroot-jail:
Guiden är skriven/testad på en Ubuntu server (16.04 LTS), men bör funka lika väl på en vanlig Ubuntu Desktop om man så vill.
**************
Noteringar:
Kom ihåg att Linux ÄR case-sensitive, dvs. systemet gör skillnad på versaler och gemener.
Så om guiden förklarar ett kommando ex. sudo apt install openssh-server måste det skrivas exakt så; t.ex. fungerar inte sudo apt install OpenSSH-Server -det sista kommer inte att fungera!
apt vs. apt-get
'apt' är ett front-end till 'apt-get' så du kan använda vilket som när du utför kommandona i Ubuntu Linux.
Guiden antar att användaren med sudo-rättigheter heter 'sudokonto' -du använder givetvis det konto som du själv skapat när du installerade servern.
'sudokonto' är bara ett namnexempel för denna guide.
Guiden antar att användaren som skall hamna i chroot-jailet är 'testkonto' -du väljer ett eget namn för användaren på ditt system.
'testkonto' är bara ett namnexempel för denna guide.
/sftp/users är bara ett exempel, du kan lägga mappen för jailet vart som helst, t.ex. annan disk, så länge endast root-kontot har exklusiv åtkomst till toppnivån av filsystemet. (Här kan man inte tänka helt i Windows banor)
**************
Installera openssh-server: (detta är nödvändigt för att kunna använda sig av ssh/sftp mot servern)
sudo apt install openssh-server
****************
Nedan steg, att byta ssh port, är frivilligt men helt klart rekommenderat om du skall ha servern exponerad mot internet:
-Främsta anledningen till att du vill göra detta är p.g.a. botnets och annat mög som skannar nät och ip-adresser efter default porten för ssh (22), om den ser att porten är öppen kan den påbörja lösenordsattacker mot porten, har något konto på servern ett riktigt enkelt lösenord så kan det bli knäckt relativt snabbt.
Byt standard SSH-port:
sudo nano /etc/ssh/sshd_config
-Byt portnummer där det står "Port 22" till det portnummer du vill använda för ssh (e.g. 2222)
-Kör sedan:
sudo service ssh restart
När du sedan ansluter mot servern via ssh/sftp kommer du att få utföra nedan kommando, då porten nu är bytt till '2222'.
ssh -p 2222 sudokonto@192.168.10.xxx
****************
Steg 1:
Skapa en serverfolder, ett användarkonto och ett 'chroot-jail' för användaren:
För att nedan instruktioner skall fungera måste root-kontot äga alla ovanliggande mappar/mappnivåer, du kan inte låta andra grupper/användare ha skrivrättigheter ovan själva mappen som är bas för jailet, om du har det resulterar det i en "broken pipe":
I nedan exempel måste alltså root vara ägaren samt vara det enda konto med 'write access' till /sftp/users
Skapa en folder-struktur som skall användas som chroot-jail:
sudo mkdir /sftp/
sudo mkdir /sftp/users/
sudo mkdir /sftp/users/testuser
Skapa en användare som skall ha sin hemkatalog (startpunkt) under ovan uppskapad mapp. Användaren kommer alltså vid SFTP-inloggning att hamna i mappen: /sftp/users/testuser
sudo useradd -d /sftp/users/testuser -M -N -g users testuser
Ge root ägandeskap över ovanliggande mappar/mappnivåer:
sudo chown root:root /sftp/users/testuser
Ge fulla rättigheter åt ägare (root) läs/skrivrättigheter till grupp (root) samt ge läs/skrivrättigheter till övriga i mappen 'testuser'
sudo chmod 755 /sftp/users/testuser
skapa ett lösenord för användaren (om det inte redan är gjort)
sudo passwd testuser
Steg 2:
Nästa steg är att konfigurera sshd_config filen för att göra ett chroot-jail:
Byt subsystem i /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Kommentera bort 'Subsystem sftp /usr/lib/openssh/sftp-server' likt nedan och lägg till 'Subsystem sftp internal-sftp'
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
...skapa en användarsektion för 'testuser' längst ned i filen: (kort beskrivning av vad nedan sektion gör är att den matchar användarkontot som försöker logga på och tvingar det att ansluta i sftp-läge i mappen som du definierar '/sftp/users/testuser' (vilket också är dess hemkatalog) server blockerar försök att ansluta via ssh (kommandotolk) för användarkontot samt blockerar grafisk tunnling via X11, vidare tillåter den inte att användaren går högre upp i filträdet än katalogen för sökvägen som definierats.
Match User testuser
ChrootDirectory /sftp/users/testuser
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Spara och stäng filen sshd_config genom tangentkombinationen: Ctrl+X
nano komer fråga dig om du vill spara ändringar gjorda till filen, svara Y
Bekräfta Y genom ett Enter-slag.
Starta om ssh-servertjänsten:
sudo service ssh restart
Servern skall nu vara igång med chroot-jail aktivt. Det skadar aldrig att vara säker så man kan försöka att ansluta till servern via ssh ex. putty eller via annan unix/linux terminal, detta skall inte gå alls.
Enbart SFTP anslutning skall beviljas från servern ex. via FileZilla eller Kodi.
Värt att nämna är att du i FileZilla behöver specificera sftp://<serveradress> om du bytt standardporten för ssh.
*Ytterligare värt att notera: användaren 'testuser' kan ej skapa mappar under /sftp/users/testuser så om du vill ge användar kontot rättigheter till det måste du skapa en mapp för användaren där ex. upload som i det fallet skulle bli: /sftp/users/testuser/upload
sudo mkdir /sftp/users/testuser/upload
Därefter måste du ge användaren ägandeskap till mappen:
sudo chown testuser:users
..samt rättighet att läsa/skriva i den t.ex:
sudo chmod 600 /sftp/users/testuser/upload
En bra chart för att se vad chmod kan åstadkomma finner du här:
http://wiki.kartbuilding.net/index.php/Chmod
Edit, har snyggat till guiden med lite markeringar och annat, samt rättat en tankevurpa gällande uppskapandet av chroot folder-strukturen.