Ombyggnad 2026/2027 pågår - döda länkar förekommer. Mer information

Skapa en SFTP-användare i Linux, inkl selinux-dansen

2026-09-02 på Anders Ytterströms webblogg

Jag har i dagarna funderat på hur man skapar en grupp användare som bara ska hämta och skicka filer med SFTP. Såhär görs det på en linuxserver med selinux. I exemplet används användarnamnet Rahvin.

Det finns två extra saker att tänka på, för ökad säkerhet:

Om det är en ny användare, skapa den.

useradd -m \
-d /srv/sftp/rahvin \
-s /sbin/lologin rahvin

Om användaren redan finns, degradera den.

mv /home/rahvin /srv/sftp/rahvin
usermod -d /srv/sftp/rahvin rahvin
usermod -s /sbin/nologin rahvin

Säkerhetställ filrättigheter:

chown -R rahvin:rahvin /srv/sftp/rahvin 
chmod 700 /srv/sftp/rahvin

... och för system med selinux, krävs också detta:

semanage fcontext -a -t user_home_dir_t '/srv/sftp/rahvin'
semanage fcontext -a -t user_home_t '/srv/sftp/rahvin(/.\*)?'
restorecon -Rv /srv/sftp

Extra: flytta beviljade SSH-nycklar till egen fil

Om hemkatalogen är flyttad till en filarea-katalog är det önskvärt att flytta beviljade SSH-nycklar bort från filarean, så att användarna inte riskerar att skriva över authorized_keys och tappa åtkomst.

Istället väljs följande struktur:

/etc
  /ssh
    /authorized_keys
      användare_1
      användare_2
      ...

Ändra först inställningen i SSH daemon config (/etc/ssh/sshd_config).

AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

Starta sedan om sshd.

systemctl restart sshd

Skapa sedan katalogen och lägg till kontextregler för nycklarna.

mkdir -p /etc/ssh/authorized_keys
semanage fcontext -a -t sshd_key_t '/etc/ssh/authorized_keys/.*'

Lägg sedan in nycklarna, och se till att de får rätt selinux-etiketter.

mv /srv/sftp/rahvin/.ssh/authorized_keys /etc/ssh/authorized_keys/rahvin
restorecon -v /etc/ssh/authorized_keys/*

Extra: använd chroot

Detta fungerar inte på Filezilla och respekteras inte av scp. Det fungerar dock utmärkt med sftp.

För ytterligare säkerhet, aktivera chroot. Detta kommer att göra så att användaren endast ser sin filareakatalog. Skapa först en grupp och lägg till användaren i den.

groupadd sftpusers
usermod -a -G sftpusers rahvin

Lägg därefter till nedanstående chroot-konfiguration.

cat <<END > /etc/ssh/sshd_config.d/99-sftpusers-chroot.conf
Match Group sftpusers
	ChrootDirectory /srv/sftp
	ForceCommand internal-sftp -d /%u
END

Aktivera även berörda selinux-flaggor.

setsebool -P ssh_chroot_rw_homedirs 1

Starta om sshd för att få ändringarna på plats.

systemctl restart sshd

Klart!

Rahvin kommer nu bara åt /srv/ftp/rahvin och kommer via de klienter som stöjder chroot bara att se sin egen katalog.

Upprepa nu detta för alla andra användare, eller skriv ett script. :)


Ovanstående inlägg publicerades 2026-09-02. Det går att prenumerera på denna webblogg. Härifrån är följande mål rekommenderade: