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ör ssh Välj sin inbyggda anläggning för att tillhandahålla SFTP-tjänst (som du kan styra självständigt).
  • ChrootDirectory berättar sshd var Användaren ska begränsas till.
  • Subsystem sftp internal-sftp berättar sshd för att ladda den interna sftp – 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.

Lämna ett svar

Din e-postadress kommer inte publiceras.