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
laatssh
zijn ingebouwde faciliteit kiezen om SFTP-service te bieden (die u onafhankelijk kunt bedienen). -
ChrootDirectory
verteltsshd
waar de gebruiker moet worden beperkt. -
Subsystem sftp internal-sftp
verteltsshd
om de internesftp
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.