Skapa en SFTP-användare i Linux, inkl selinux-dansen
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:
- Att flytta hemkatalogen till att istället använda filarean, och ta bort dotfiles och konfiguration.
- Att tillämpa
chrootför att hamna på den plats på filsystemet där filerareor ligger. Funkar inte på alla SFTP-klienter.
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. :)