Sådan oprettes chroot-fængsler
udtrykket chroot-fængsel blev først brugt i 1992 i en artikel af en fremtrædende sikkerhedsforsker, Bill chroot, (hvilket er interessant, hvis du er i den slags ting, kan du finde artiklen her). Chroot-fængsler begyndte at dukke op i 2003 med applikationer som IRC og FTP. I 2005 introducerede Sun sin” containere ” – teknologi kaldet områder, hvilket igen var en forløber for begrebet navnerum, som er en kerneteknologi, der bruges sammen med containere.
grundlæggende om Chroot
Chroot tillader en administrator at kontrollere adgangen til en tjeneste eller et filsystem, mens han kontrollerer eksponeringen for det underliggende servermiljø. De to almindelige eksempler, du kan støde på, er under opstartssekvensen og” nødskallen ” på Red Hat/CentOS/Fedora-systemer og i Secure FTP (SFTP).
kommandoen ser sådan ud:
chroot <newroot> ]
i lighed med kommandoen sudo
ændrer kommandoen chroot
miljøet for følgende kommando. Med andre ord vil det ændre dig til newroot
– mappen og gør også denne mappe til “arbejdende” – mappen. command
udføres derefter på det sted, hvilket er nyttigt til ting som at redde et system, der ikke starter.
i modsætning til sudo
vil du være “i” mappen. Denne praksis er igen nyttig, hvis du starter fra eksterne medier, men har brug for at få adgang til et “lokalt” filsystem eller kommando for at udføre arbejde.
den anden almindelige anvendelse af chroot
er at begrænse en tjeneste eller bruger ved at bruge en indpakning til at skjule resten af filsystemet og derfor begrænse en fjernbrugers visning af andre brugeres data. En populær implementering ved hjælp af denne tilgang SFTP.
eksempel
før du begynder at arbejde gennem dette eksempel, skal du sørge for, at du har sikkerhedskopier. I dette tilfælde skal du sikkerhedskopiere /etc/ssh/sshd_config
filen, fordi du vil foretage ændringer til den ene specifikt:
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
For nu vil du kun begrænse SFTP-brugere til deres hjemmekataloger på serveren. Dette krav betyder, at du skal tilføje brugere og sætte dem i en gruppe:
# useradd -g sftpusers -s /sbin/nologin -p nick nick
Bemærk, at hvis du gør dette, tildeles nick
en konto uden login-skal. Denne teknik er både praktisk og en god sikkerhedspraksis: hvis han bare bruger SFTP, skal han ikke have loginrettigheder. Jeg vil diskutere at levere en shell til fjernbrugere i den næste artikel.
nu skal du fortælle ssh
– tjenesten, hvad du skal gøre, når SFTP-brugere logger ind. Åbn filen /etc/ssh/sshd_config
, og tilføj følgende i slutningen:
Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no
det er vigtigt, at du tilføjer disse indstillinger som et separat sæt poster, og at du bruger syntaksen Match
til at angive, at dette afsnit kun gælder for brugere i denne gruppe. Hvis du har foretaget ændringerne i de eksisterende poster, gælder de for alle SSH-brugere, hvilket kan ødelægge fjernadgang.
konfigurationslinjerne nedbrydes som følger:
-
ForceCommand
gørssh
vælg sin indbyggede facilitet til at levere SFTP-service (som du kan styre uafhængigt). -
ChrootDirectory
fortællersshd
hvor brugeren skal begrænses til. -
Subsystem sftp internal-sftp
fortællersshd
at indlæse den internesftp
service og gøre den tilgængelig.
du skal muligvis sørge for, at denne Subsystem
ikke allerede er defineret ved at kommentere denne linje tidligere i konfigurationsfilen:
# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server
når du har foretaget ændringerne og kontrolleret stavemåden, skal du fortsætte og gemme ændringerne. Genstart derefter sshd
:
# systemctl restart sshd
Test den nye bruger:
$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit
ups, hænge på bare et minut: det ser ud som du kan se alle de andre brugeres mapper samt. Du kan dog ikke navigere til disse mapper:
sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied
du kan dirigere den chrooted bruger til deres egen hjemmemappe ved at ændre ChrootDirectory
linjen i sshd_config
filen som denne:
ChrootDirectory /
denne hurtige ændring får det til at se ud til Nick, som om han er i sin egen hjemmekatalog, og han kan ikke se nogen anden brugers filer:
sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>
Hvor blev den af? Tjek dette ud:
# ls /home/nicktest.txt
Bemærk, at en chroot jail
ikke anses for at være en tilstrækkelig sikkerhedsbegrænsning i sig selv. Selvom det forhindrer en bruger i at skifte ud af en begrænset mappe, er der måder omkring dette (den generelle ide henvises til i chroot(2)
man – siden, som du bør se på, hvis du overvejer at bruge dette trick i en produktions-eller forretningskritisk kontekst.)
indpakning (for nu)
så du kan se, at chroot
kan være et ret nyttigt værktøj. I del 2 vil jeg se mere på at tildele specifikke mapper til brugere og give et shell-miljø til en fjernbruger uden at udsætte resten af serveren.
nyt til containere? Hent containerens Primer og lær det grundlæggende i containere.