hur man ställer in Linux chroot jails
termen chroot jail användes först 1992, i en artikel av en framstående säkerhetsforskare, Bill Cheswick, (vilket är intressant om du är i den typen av saker, du kan hitta artikeln här). Chroot fängelser började visas 2003, med applikationer som IRC och FTP. 2005 introducerade Sun sin” Containers ” – teknik som heter Zones, som i sin tur var en föregångare till begreppet namnområden, vilket är en kärnteknik som används med containrar.
grunderna i Chroot
Chroot tillåter en administratör att styra åtkomsten till en tjänst eller ett filsystem samtidigt som exponeringen för den underliggande servermiljön kontrolleras. De två vanliga exemplen du kan stöta på är under startsekvensen och” emergency shell ” På Red Hat/CentOS/Fedora-system och i Secure FTP (SFTP).
kommandot ser ut så här:
chroot <newroot> ]
på samma sätt som kommandot sudo
ändrar kommandot chroot
miljön för följande kommando. Med andra ord kommer det att ändra dig till katalogen newroot
, och gör också den katalogen till “arbetskatalogen”. command
körs sedan på den platsen, vilket är användbart för saker som att rädda ett system som inte startar.
till skillnad från sudo
kommer du att vara “i” katalogen. Denna praxis är återigen användbar om du startar från externa medier men behöver komma åt ett “lokalt” filsystem eller kommando för att göra arbete.
den andra vanliga användningen av chroot
är att begränsa en tjänst eller användare genom att använda ett omslag för att dölja resten av filsystemet, vilket begränsar en fjärranvändares syn på andra användares data. En populär implementering med denna metod SFTP.
exempel
innan du börjar arbeta igenom det här exemplet bör du se till att du har säkerhetskopior. I det här fallet säkerhetskopierar du filen /etc/ssh/sshd_config
eftersom du kommer att göra ändringar i den specifikt:
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
för tillfället begränsar du bara SFTP-användare till sina hemkataloger på servern. Detta krav innebär att du måste lägga till användare och lägga dem i en grupp:
# useradd -g sftpusers -s /sbin/nologin -p nick nick
Observera att om du gör detta tilldelas nick
ett konto utan inloggningsskal. Denna teknik är både praktisk och en bra säkerhetspraxis: om han bara använder SFTP, borde han inte ha inloggningsbehörigheter. Jag kommer att diskutera att ge ett skal till fjärranvändare i nästa artikel.
nu måste du berätta för tjänsten ssh
vad du ska göra när SFTP-användare loggar in. Öppna filen /etc/ssh/sshd_config
och Lägg till följande i slutet:
Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no
det är viktigt att du lägger till dessa inställningar som en separat uppsättning poster och att du använder syntaxen Match
för att indikera att det här avsnittet endast gäller användare i den här gruppen. Om du gjorde ändringarna i de befintliga posterna skulle de gälla för alla SSH-användare, vilket kan bryta fjärråtkomst.
konfigurationslinjerna bryts ned enligt följande:
-
ForceCommand
görssh
Välj sin inbyggda anläggning för att tillhandahålla SFTP-tjänst (som du kan styra självständigt). -
ChrootDirectory
berättarsshd
var Användaren ska begränsas till. -
Subsystem sftp internal-sftp
berättarsshd
för att ladda den internasftp
– tjänsten och göra den tillgänglig.
du kan behöva se till att denna Subsystem
inte redan är definierad genom att kommentera den här raden tidigare i konfigurationsfilen:
# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server
när du har gjort ändringarna och kontrollerat stavningen, fortsätt och spara ändringarna. Starta sedan om sshd
:
# systemctl restart sshd
testa den nya användaren:
$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit
oj, hänga på bara en minut: det ser ut som du kan se alla andra användares kataloger samt. Du kan dock inte navigera till dessa kataloger:
sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied
du kan styra den chrooted användaren till sin egen hemkatalog genom att ändra raden ChrootDirectory
i filen sshd_config
så här:
ChrootDirectory /
denna snabba förändring gör att det ser ut till Nick som om han är i sin egen hemkatalog, och han kommer inte att kunna se någon annan användares 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>
Vart tog den vägen? Kolla in det här:
# ls /home/nicktest.txt
Observera att en chroot jail
inte anses vara en tillräcklig säkerhetsbegränsning i sig. Även om det hindrar en användare från att byta ut en begränsad katalog, finns det sätt runt detta (den allmänna tanken hänvisas till i mansidan chroot(2)
, som du bör titta på om du funderar på att använda detta trick i ett produktions – eller affärskritiskt sammanhang.)
omslag (för nu)
så kan du se att chroot
kan vara ett ganska användbart verktyg. I del 2 ser jag mer på att tilldela specifika kataloger till användare och tillhandahålla en skalmiljö till en fjärranvändare utan att exponera resten av servern.
ny till containrar? Ladda ner Containers Primer och lär dig grunderna i Linux containers.