hoe Linux chroot jails in te stellen

de term chroot jail werd voor het eerst gebruikt in 1992, in een artikel van een prominente security onderzoeker, Bill Cheswick, (wat interessant is als je van dat soort dingen houdt, kun je het artikel hier vinden). Chroot jails begon te verschijnen in 2003, met toepassingen zoals IRC en FTP. In 2005 introduceerde Sun zijn” Containers ” technologie genaamd Zones, die op zijn beurt een voorloper was van het concept van namespaces, een kerntechnologie die wordt gebruikt met containers.

chroot basics

Chroot stelt een beheerder in staat de toegang tot een service of bestandssysteem te beheren terwijl de blootstelling aan de onderliggende serveromgeving wordt gecontroleerd. De twee veelvoorkomende voorbeelden die je tegenkomt zijn tijdens de opstartvolgorde en de “emergency shell” op Red Hat/CentOS / Fedora systemen, en in Secure FTP (SFTP).

het commando ziet er zo uit:

chroot <newroot> ]

net als bij het commando sudo verandert het commando chroot de omgeving van het volgende commando. Met andere woorden, het zal je veranderen in de newroot directory, en maakt die directory ook de “werk” directory. De command wordt dan uitgevoerd op die locatie, wat handig is voor dingen als het redden van een systeem dat niet opstart.

in tegenstelling tot sudo wordt u “in” de map geplaatst. Deze oefening, nogmaals, is handig als je opstart van externe media, maar je moet toegang hebben tot een “lokaal” bestandssysteem of commando om werk te doen.

het andere veelgebruikte gebruik van chroot is het beperken van een service of gebruiker door een wrapper te gebruiken om de rest van het bestandssysteem te verbergen, waardoor de weergave van de gegevens van andere gebruikers op afstand wordt beperkt. Een populaire implementatie met behulp van deze aanpak SFTP.

voorbeeld

voordat u met dit voorbeeld begint, moet u ervoor zorgen dat u back-ups hebt. In dit geval maak je een back-up van het /etc/ssh/sshd_config bestand omdat je specifiek wijzigingen aanbrengt in dat bestand:

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

op dit moment beperkt u alleen SFTP-gebruikers tot hun persoonlijke mappen op de server. Deze eis betekent dat u gebruikers moet toevoegen en ze in een groep moet plaatsen:

# useradd -g sftpusers -s /sbin/nologin -p nick nick

merk op dat door dit te doen nick een account wordt toegewezen zonder login shell. Deze techniek is zowel praktisch als een goede beveiligingspraktijk: als hij alleen SFTP gebruikt, zou hij geen inlogrechten moeten hebben. Ik zal bespreken het verstrekken van een shell aan externe gebruikers in het volgende artikel.

nu moet u de ssh service vertellen wat u moet doen als SFTP-gebruikers inloggen. Open het /etc/ssh/sshd_config bestand en voeg het volgende toe aan het einde:

Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no

het is belangrijk dat u deze instellingen als een aparte set items toevoegt, en dat u de Match syntaxis gebruikt om aan te geven dat deze sectie alleen van toepassing is op gebruikers in deze groep. Als u de wijzigingen aan de bestaande ingangen aanbrengt, zullen ze van toepassing zijn op alle SSH-gebruikers, die de toegang op afstand kunnen verbreken.

de configuratie regels worden als volgt verdeeld:

  • de ForceCommand laat ssh zijn ingebouwde faciliteit kiezen om SFTP-service te bieden (die u onafhankelijk kunt bedienen).
  • ChrootDirectory vertelt sshd waar de gebruiker moet worden beperkt.
  • Subsystem sftp internal-sftp vertelt sshd om de interne sftp dienst te laden en beschikbaar te maken.

u moet er mogelijk voor zorgen dat deze Subsystem niet al gedefinieerd is door deze regel eerder in het configuratiebestand te commentaren:

# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server

zodra je de wijzigingen hebt gemaakt en de spelling hebt gecontroleerd, ga je gang en sla de wijzigingen op. Dan, herstarten sshd:

# systemctl restart sshd

Test de nieuwe gebruiker:

$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit

Oops, wacht even: het lijkt erop dat je ook alle directory’ s van andere gebruikers kunt zien. U kunt echter niet naar die mappen navigeren:

sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied

u kunt de gechrootde gebruiker naar zijn eigen persoonlijke map leiden door de ChrootDirectory regel in het sshd_config bestand te wijzigen zoals dit:

ChrootDirectory /

deze snelle verandering laat het lijken op Nick alsof hij in zijn eigen home directory, en hij zal niet in staat zijn om bestanden van een andere gebruiker te zien:

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>

Waar is het gebleven? Bekijk dit eens.:

# ls /home/nicktest.txt

merk op dat een chroot jail op zichzelf niet als een adequate beveiligingsbeperking wordt beschouwd. Hoewel het voorkomt dat een gebruiker uit een beperkte directory kan veranderen, zijn er manieren om dit te omzeilen (het algemene idee wordt genoemd in de chroot(2) manpage, waar u naar moet kijken als u overweegt deze truc te gebruiken in een productie – of bedrijfskritische context.)

inpakken (voor nu)

u kunt dus zien dat chroot een vrij nuttig hulpmiddel kan zijn. In deel 2 zal ik meer kijken naar het toewijzen van specifieke mappen aan gebruikers, en het aanbieden van een shell-omgeving aan een externe gebruiker zonder de rest van de server bloot te stellen.

nieuw in containers? Download de Containers Primer en leer de basisprincipes van Linux containers.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.