Hoe u SSH-gebruikers kunt beperken tot specifieke mappen op Ubuntu 24.04 (SFTP Chroot-handleiding)

Het verlenen van toegang aan een aannemer om een ​​paar bestanden te uploaden, mag die persoon niet automatisch een terminalsessie geven met zicht op de hele server. Op Ubuntu 24.04 LTS kan OpenSSH een account voor bestandsoverdracht beperken tot een gekozen map met behulp van een ChrootDirectoryregel en de ingebouwde internal-sftpserver. Het belangrijke onderscheid is dat dit een beperking is die alleen geldt voor SFTP , en niet zomaar een manier om een ​​volledig functionele, maar afgeschermde Bash-shell te bieden.

Deze handleiding legt uit wat de instellingen precies beschermen en beschrijft vervolgens een omkeerbare configuratie in acht stappen voor meerdere accounts, elk met een eigen map. De commando's gebruiken een voorbeeldaccount contractoren een voorbeeldhost server.example.com; vervang deze door uw eigen waarden. Dit zijn configuratievoorbeelden, geen gegarandeerde resultaten van een live servertest.

Welke soort beperking heb je nu eigenlijk nodig?

Drie besturingselementen worden vaak door elkaar gehaald. Linux-rechten bepalen welke bestanden een account kan lezen of wijzigen; het wijzigen van de thuismap van een account stelt een initiële locatie in; een chroot wijzigt de bestandssysteemroot die aan een proces wordt gepresenteerd. Ze zijn niet uitwisselbaar.

DoelGeschikt uitgangspuntBelangrijke beperking
Uploaden en downloaden is alleen mogelijk binnen een daarvoor bestemde map.ChrootDirectorymetForceCommand internal-sftpBiedt geen interactieve Linux-shell.
Sta een shell toe, maar beheer het lezen en schrijven.Unix-eigendom, groepen, ACL's en het principe van minimale bevoegdhedenEen gewone shellgebruiker kan nog steeds andere leesbare paden volgen.
Zorg voor een geïsoleerde commandoregelomgeving.Een zorgvuldig opgezette chroot of een container/VM met aparte beveiligingsinstellingen.Vereist aanzienlijk meer configuratie en isolatiebeoordeling.

Misvatting: het instellen /home/contractorvan de thuismap beperkt de gebruiker tot die map. Dat is niet het geval. Een normale shellgebruiker kan naar elke toegankelijke map elders op het bestandssysteem gaan. Als bestandsuitwisseling daadwerkelijk vereist is, kies dan voor de SFTP-only-methode hieronder in plaats van te proberen mappen te verbergen met de shellprompt.

OpenSSH-documentatie ChrootDirectory, Matchen ForceCommandin de officiële Ubuntu 24.04 sshd_config-handleiding .

Een directory jail die alleen SFTP ondersteunt, instellen in acht stappen.

Voordat u SSH op afstand wijzigt, moet u uw bestaande beheerderssessie openhouden en ervoor zorgen dat u console- of hersteltoegang hebt. Gebruik een apart account zonder beheerdersrechten voor overdrachten; plaats uw beheerdersaccount niet in de beperkte groep.

1. Controleer OpenSSH en bewaar een herstelsessie.

Installeer OpenSSH indien nodig op de server, controleer de service en sla de hoofdconfiguratie op. De officiële serverdocumentatie van Ubuntu ondersteunt deze service- en configuratiepaden.

sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.pre-sftp
Ubuntu-terminal met de uitvoer van het commando `systemctl status ssh` en details van de SSH-service.
Een terminalweergave van de SSH-servicestatus, handig om te controleren of OpenSSH beschikbaar is voordat toegangsregels worden gewijzigd.

Als je de machine alleen via SSH kunt beheren, sluit de huidige sessie dan niet af tijdens het bewerken of testen. Raadpleeg de configuratiehandleiding voor de Ubuntu OpenSSH-server voordat je de daemon wijzigt.

2. Maak een aparte gebruiker en SFTP-toegangsgroep aan.

Een groep is handig wanneer je meer dan één beperkt account verwacht. In dit voorbeeld krijgt elk lid een aparte jail met behulp van het %utoken, dat OpenSSH uitbreidt naar de gebruikersnaam waarmee verbinding wordt gemaakt. Het is de bedoeling dat het home-pad zich binnen/upload de toekomstige chroot bevindt , dus maak geen map op hostniveau aan ./upload

sudo groupadd sftpclients
sudo adduser --home /upload --no-create-home --shell /usr/sbin/nologin contractor
sudo usermod -aG sftpclients contractor
id contractor

Het adduserproces kan u vragen een wachtwoord toe te wijzen. Op installaties waar SSH-wachtwoordverificatie is uitgeschakeld, dient u in plaats daarvan een openbare sleutel aan te maken en te autoriseren; schakel wachtwoordaanmeldingen niet globaal in, alleen om een ​​voorbeeld te volgen. De nologinshell is een extra beveiligingsmaatregel, maar het afgedwongen internal-sftpcommando zorgt ervoor dat deze configuratie alleen voor gegevensoverdracht geldt. Test de combinatie op uw eigen authenticatiestack.

Ubuntu-terminal toont de aanmaak van het aannemersaccount met het pad 'upload' (via de adduser-opdracht).
Het accountaanmaakcommando specificeert het beperkte account en een thuismap die beschikbaar zal zijn nadat de chroot is toegepast.

3. Maak een chroot-directory aan die eigendom is van de rootgebruiker.

Dit is waar veel handleidingen de mist in gaan. OpenSSH vereist dat elk onderdeel van het chroot-pad eigendom is van root en niet beschrijfbaar is door andere gebruikers of groepen. Zorg er nooit voor dat de root-directory van de jail zelf beschrijfbaar is voor het SFTP-account.

sudo install -d -o root -g root -m 0755 /srv/sftp
sudo install -d -o root -g root -m 0755 /srv/sftp/contractor
namei -l /srv/sftp/contractor

Controleer ook de bestaande /componenten /srv; de bovenstaande commando's herstellen niet automatisch onveilige machtigingen voor bovenliggende componenten. Als een component schrijfrechten heeft voor de groep of eigendom is van een gebruiker, corrigeer dan het eigenaarschap en de modus pas nadat u hebt gecontroleerd of andere applicaties ervan afhankelijk zijn.

Ubuntu-terminal toont de mappen /srv/sftp en /srv/sftp/contractor, beide eigendom van root, met de bijbehorende machtigingen.
De jail-directory en de bovenliggende directory worden weergegeven met root-eigendom, een voorwaarde die OpenSSH bij het opstarten van de sessie controleert.

4. Voeg een beschrijfbare subdirectory toe binnen de jail.

Het account kan naar een submap schrijven zonder de chroot-root te mogen wijzigen. Maak een map aan /srv/sftp/contractor/uploadvoor de daadwerkelijke bestanden van het account; vanuit SFTP zal dit er als volgt uitzien /upload: .

sudo install -d -o contractor -g contractor -m 0750 /srv/sftp/contractor/upload
sudo stat -c '%U:%G %a %n' /srv/sftp/contractor /srv/sftp/contractor/upload

Het verwachte eigenaarschap verschilt bewust: root:rootvoor de rootmap van de jail en contractor:contractorvoor de beschrijfbare uploadmap. Vermijd dit chmod 777, omdat het onnodige blootstelling zou veroorzaken en zou worden afgewezen als het op de rootmap van de jail zou worden toegepast.

Ubuntu-terminal toont een aparte uploadmap van een aannemer onder de SFTP-jail die eigendom is van de rootgebruiker.
De subdirectory voor uploads is beschrijfbaar voor het account met beperkte rechten, terwijl de omringende jail eigendom blijft van root.

5. Voeg een Match-regel toe aan sshd_config

Open het bestand /etc/ssh/sshd_configen voeg het volgende blok toe aan het einde, na alle bestaande instructies en Matchblokken. Gebruik een teksteditor zoals sudoeditof sudo nano. Controleer Matcheerst de bestaande regels: als meerdere overeenkomende blokken hetzelfde trefwoord toewijzen, gebruikt OpenSSH de eerst toepasselijke instantie. Ubuntu verwerkt ook bestanden onder /etc/ssh/sshd_config.d/een vroege Include; regels daar kunnen de prioriteit beïnvloeden.

Match Group sftpclients
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp -d /upload
    PermitTTY no
    DisableForwarding yes

Match Groupricht zich op leden van sftpclients. ChrootDirectoryplaatst elke gebruiker onder /srv/sftp/USERNAME. ForceCommand internal-sftp -d /uploadvoert een in-process SFTP-service uit en start in de beschrijfbare directory. PermitTTY novoorkomt toewijzing van terminals, terwijl DisableForwarding yesde SSH-doorstuurfunctie voor overeenkomende verbindingen wordt uitgeschakeld.

Behoud de globale Subsystem sftpinstructie die Ubuntu al biedt, tenzij je een aparte reden hebt om deze te wijzigen; de geforceerde interne SFTP-opdracht vereist geen vervanging van die globale regel. Voeg geen extra globale instructie toe Match Allom een ​​codeblok af te sluiten zonder te begrijpen wat de gevolgen daarvan zijn.

GNU nano-editor met een Match Group SFTP-regel met ChrootDirectory- en ForceCommand-instellingen.
Een voorwaardelijk OpenSSH-configuratieblok groepeert de directorybeperking en het SFTP-only commando samen.

6. Controleer de syntaxis en de geldende instellingen voordat u opnieuw laadt.

Het succesvol parsen bewijst niet dat de jail-rechten correct zijn, noch dat het beoogde account aan het beleid voldoet. Voer beide controles expliciet uit.

sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T -C user=contractor,host=localhost,addr=192.0.2.10 | grep -E '^(chrootdirectory|forcecommand|permittty|disableforwarding) '
namei -l /srv/sftp/contractor

De juiste configuratie moet het beoogde chroot-pad, de geforceerde SFTP-opdracht, de uitgeschakelde TTY-toewijzing en de doorstuurbeperkingen specificeren. Het voorbeeldadres 192.0.2.10dient alleen ter documentatie; als u adresafhankelijke Matchregels hebt, vervang dit dan door het werkelijke bronadres van de client. De -T -Cconfiguratie is gedocumenteerd in de Ubuntu 24.04 sshd-handleiding .

Als de validatie mislukt, corrigeer dan de configuratie voordat u SSH opnieuw laadt. Als de effectieve waarden onverwacht zijn, controleer dan de opgenomen codefragmenten en de volgorde van de bestaande voorwaardelijke blokken, en niet alleen de laatst bewerkte regels.

7. Herlaad SSH en behoud uw beheerdersrechten.

Na succesvolle controles herlaadt u de SSH-service, zodat nieuwe verbindingen het aangepaste beleid gebruiken. Houd de huidige beheerdersverbinding actief terwijl u een tweede terminal opent om te controleren of normale beheerderstoegang nog steeds werkt.

sudo systemctl reload ssh
sudo systemctl status ssh --no-pager
Ubuntu-terminal met weergave van SSH-servicebeheeropdrachten en de status van de actieve SSH-service.
Het venster voor SSH-servicebeheer laat zien hoe de status van de service na een configuratiewijziging kan worden gecontroleerd.

Een volledige herstart kan ook wijzigingen doorvoeren, maar een herlaadactie heeft de voorkeur wanneer dit wordt ondersteund en u onnodige onderbrekingen wilt voorkomen. De uitvoer van serviceopdrachten en logberichten variëren per host, dus controleer het daadwerkelijke resultaat in plaats van ervan uit te gaan dat een succesvolle terugkeer naar de prompt toegang garandeert.

8. Test toegestane overdrachten en geblokkeerde shelltoegang

Maak vanaf een andere computer verbinding als de gebruiker met beperkte rechten. Gebruik de daadwerkelijke hostnaam van de server en een geschikt testbestand. De eerste SFTP-directory moet zijn /uploaden de chroot-root moet verschijnen als /in plaats van het hostpad /srv/sftp/contractor.

sftp contractor@server.example.com
sftp> pwd
sftp> cd /
sftp> ls
sftp> cd /upload
sftp> put sample.txt
sftp> cd /etc
sftp> exit

Het uploaden van een onschadelijk testbestand zou toegestaan ​​moeten zijn /upload. Toegang tot de daadwerkelijke root van de host /etczou niet mogelijk moeten zijn: de chroot definieert een andere root en /etczou alleen toegankelijk zijn als je opzettelijk een dergelijke map binnen de jail hebt aangemaakt of zichtbaar hebt gemaakt. De exacte foutmelding van de client is niet relevant.

SFTP-terminalsessie met een virtuele rootmap, een uploadmap en een navigatiepoging.
De SFTP-opdrachtprompt illustreert het bladeren door een beperkt bestandssysteem in plaats van het bestandssysteem van de host.
ssh contractor@server.example.com

Er mag geen reguliere interactieve SSH-shell worden geopend voor dit account. In plaats daarvan kan de verbinding worden verbroken of een protocolgerelateerd bericht weergeven; vertrouw niet op een exacte formulering. Als er toch een shell wordt geopend, beschouw de configuratie dan als onveilig en controleer het groepslidmaatschap, Matchde prioriteit en de effectieve sshd -T -Cuitvoer opnieuw voordat u het account gebruikt.

De Ubuntu-terminal toont een poging tot SSH-verbinding die wordt verbroken in plaats van een interactieve shell te tonen.
Een poging tot terminalverbinding illustreert de shelltoegangscontrole die wordt uitgevoerd nadat SFTP-only-beperkingen zijn ingeschakeld.

Wat als je SSH-publieke sleutels gebruikt?

Authenticatie met publieke sleutels werkt met een SFTP-jail, maar het plaatsen van de home-directory van een gebruiker op hostniveau /uploadbetekent dat het standaardpad ~/.ssh/authorized_keysmogelijk niet buiten de jail bestaat. Een praktisch alternatief is om SSH een door root beheerd sleutelbestand te laten lezen voordat de chroot wordt gestart. Voeg dit toe binnen hetzelfde Match Group sftpclientsblok als u kiest voor gecentraliseerde sleutelopslag:

    AuthorizedKeysFile /etc/ssh/authorized_keys/%u

Maak vervolgens /etc/ssh/authorized_keys/contractoreen bestand aan met de geautoriseerde publieke sleutel van de aannemer, met root-eigendom en zonder schrijfrechten voor de groep of het publiek. Bijvoorbeeld, nadat u een gecontroleerd bestand met de publieke sleutel veilig contractor.pubnaar een administratieve stagingdirectory hebt gekopieerd:

sudo install -d -o root -g root -m 0755 /etc/ssh/authorized_keys
sudo install -o root -g root -m 0644 contractor.pub /etc/ssh/authorized_keys/contractor
sudo /usr/sbin/sshd -t

Kopieer geen privésleutel naar de server. De instellingen voor het sleutelpad, de standaardverificatie-instellingen en de accountcontroles zijn afhankelijk van uw bestaande SSH-beleid; controleer de toegang via de publieke sleutel voordat u een reeds werkende verificatiemethode uitschakelt.

Veelvoorkomende fouten en wat ze betekenen

SymptoomMeest waarschijnlijke oorzaakVolgende controle
SFTP verbreekt de verbinding onmiddellijk na authenticatie.Een onderdeel van het chroot-pad is beschrijfbaar of niet in het bezit van root; of de vereiste startdirectory ontbreekt.Voer de servicelogboeken uit namei -l /srv/sftp/contractor, controleer ze en bekijk ze./upload
De gebruiker maakt verbinding, maar kan niet uploaden.De beschrijfbare submap heeft een onjuiste eigenaar of modus.Controleer statde uitvoer op de uploadsubmap; wijzig de jail-root niet naar gebruikerseigendom.
De SSH-shell opent nog steedsGroep komt niet overeen of een eerdere SSH-regel is van toepassingRen id contractorensshd -T -C
Aanmelden met openbare sleutel wordt geweigerd.Het bestand met geautoriseerde sleutels bevindt zich niet op het geconfigureerde pad of de machtigingen ervan voldoen niet aan de validatie-eisen.Controleer AuthorizedKeysFilede sleutelplaatsing, het eigenaarschap van bestanden en het SSH-logboek.
Een oudere SCP-client faalt.Het verwacht het oude SCP-protocol, waarvoor een externe shell nodig is.Gebruik SFTP of een SCP-client die SFTP gebruikt, nietscp -O

Controleer de logbestanden met sudo journalctl -u ssh -n 80 --no-pager. De exacte foutmelding hangt af van de PAM-instellingen, de SSH-configuratie, de toegang tot het bestandssysteem en de authenticatiemethode. OpenSSH 9.0 en nieuwer gebruiken scpstandaard SFTP voor standaardoverdrachten, terwijl de legacy-modus een shell vereist, zoals uitgelegd in de Ubuntu 24.04 scp-handleiding .

Kun je een interactieve SSH-shell beperken tot één map?

Niet met een wijziging van de thuismap of het bovenstaande voorbeeld met alleen SFTP. OpenSSH ChrootDirectorykan ook worden gebruikt voor shellsessies, maar de jail moet een bruikbare shell, de bijbehorende gedeelde bibliotheken en benodigde apparaatknooppunten bevatten, evenals eventuele commando-afhankelijkheden. Het veilig opzetten van die omgeving vereist meer dan het toevoegen van één regel in het configuratiebestand sshd_config. Het is gemakkelijk om een ​​kwetsbare of misleidende configuratie te creëren, vooral wanneer er willekeurige shellcommando's of mounts bij betrokken zijn.

Als een gebruiker daadwerkelijk interactieve commando's nodig heeft, geef dan eerst precies aan welke commando's en bestanden hij of zij vereist. Gebruik voor een beperkte set commando's op afstand of een speciaal applicatie-eindpunt. Overweeg voor grotere, onafhankelijke omgevingen een container of virtuele machine met expliciete bestandssysteemkoppelingen, toegangsrechten en netwerkbeperkingen. Een chroot-omgeving alleen is geen vervanging voor volledige systeemisolatie, en noch chroot, noch Unix-bestandsrechten bieden bescherming tegen een gebruiker met toegangsrechten die het onderliggende systeem kan wijzigen.

Beveiligingschecklist voordat toegang wordt verleend

  • Het overschrijvingsaccount is geen beheerder en behoort alleen tot de noodzakelijke groepen.
  • Elk onderdeel dat naar de jail leidt, is eigendom van root en kan niet door groepen of de rest van de wereld worden beschreven.
  • De beschrijfbare uploadlocatie bevindt zich binnen de jail, niet in de rootmap van de jail zelf.
  • De beoogde gebruiker komt overeen met ChrootDirectory, ForceCommand internal-sftp, en heeft het doorsturen uitgeschakeld in de effectieve configuratie.
  • Een daadwerkelijke SFTP-upload lukt, een poging om toegang te krijgen tot bestanden die alleen op de host beschikbaar zijn, mislukt en normale SSH-shelltoegang wordt geblokkeerd.
  • Back-up, retentie, quota's, monitoring en accountintrekking worden afzonderlijk beheerd; een directory jail implementeert deze beleidsregels niet automatisch.

Raadpleeg voor meer technische details de Ubuntu 24.04 OpenSSH-configuratiehandleiding en de Ubuntu SFTP-serverhandleiding . Deze instructies zijn gericht op Ubuntu 24.04 LTS; pakketbuilds en bestaande SSH-codefragmenten kunnen het daadwerkelijke gedrag beïnvloeden, dus de uiteindelijke autoriteit ligt bij de configuratie en de daadwerkelijke verbindingstests op uw eigen host.

Laat een reactie achter

Hoe converteer je driefasige spanning, stroomsterkte, kW, kVA en arbeidsfactor?

Hoe converteer je driefasige spanning, stroomsterkte, kW, kVA en arbeidsfactor?

Leer de formules voor gebalanceerde driefasenstroom en converteer stap voor stap lijnspanning, stroomsterkte, kW, kVA en arbeidsfactor, met een uitgewerkt voorbeeld en controlelimieten.

Beperk het CPU- en geheugengebruik van een commando met Ubuntu cgroups.

Beperk het CPU- en geheugengebruik van een commando met Ubuntu cgroups.

Voer een workload uit binnen een systemd-scope met CPUQuota en MemoryMax, en controleer vervolgens de limieten via cgroup v2.

Versleutel de upstream DNS van Pi-hole op Ubuntu Server 24.04

Versleutel de upstream DNS van Pi-hole op Ubuntu Server 24.04

Configureer dnscrypt-proxy als de lokale DoH-brug van Pi-hole op Ubuntu 24.04, met een listener die alleen lokaal toegankelijk is, selectie van de resolver en controles voordat er van DNS-server wordt gewisseld.

Zorg dat touchpad-gebaren werken in Ubuntu 24.04 op Wayland.

Zorg dat touchpad-gebaren werken in Ubuntu 24.04 op Wayland.

Controleer de touchpad-instellingen van Ubuntu, bevestig Wayland en test de ingebouwde veegbewegingen van GNOME voordat je problemen met apps of hardware oplost.

Bouw een Debian 12 RAID 1-spiegel met mdadm

Bouw een Debian 12 RAID 1-spiegel met mdadm

Maak en verifieer een RAID 1-data-array met twee schijven voor Debian 12, formatteer deze veilig en configureer deze om na een herstart te assembleren en te mounten.

Versleutel de swap-partitie van Debian 12 met een nieuwe sleutel bij elke opstart.

Versleutel de swap-partitie van Debian 12 met een nieuwe sleutel bij elke opstart.

Stel willekeurige-sleutelversleuteling in voor een bestaande Debian 12-swappartitie, controleer de actieve dm-crypt-mapping en begrijp de afweging tussen slaapstand en beveiliging.

Hoe u SSH-gebruikers kunt beperken tot specifieke mappen op Ubuntu 24.04 (SFTP Chroot-handleiding)

Hoe u SSH-gebruikers kunt beperken tot specifieke mappen op Ubuntu 24.04 (SFTP Chroot-handleiding)

Beperk Ubuntu 24.04 SSH-accounts tot aangewezen SFTP-mappen met chroot, de juiste machtigingen, Match-regels en veilige tests, zonder shell-toegang te verlenen.

Ontgrendel Ubuntu's APT-vergrendeling veilig en voltooi de update.

Ontgrendel Ubuntu's APT-vergrendeling veilig en voltooi de update.

Zoek uit welk proces de dpkg-frontendvergrendeling van Ubuntu beheert, laat het pakketproces voltooien en herstel onderbroken installaties zonder vergrendelingsbestanden te verwijderen.

Geautomatiseerde Btrfs-snapshots instellen op Ubuntu Desktop

Geautomatiseerde Btrfs-snapshots instellen op Ubuntu Desktop

Stel geplande Btrfs-systeemsnapshots in op Ubuntu Desktop met Timeshift, controleer de indeling van de Ubuntu-subvolumes, kies de bewaartermijn en begrijp welke gegevens niet door snapshots worden beschermd.

Hoe migreer je Debian 12 naar Testing zonder afhankelijkheden te verbreken?

Hoe migreer je Debian 12 naar Testing zonder afhankelijkheden te verbreken?

Plan een veilige migratie van Debian 12 naar Testing: voer de upgrade uit via Stable, maak een back-up, maak de APT-bronnen schoon, simuleer wijzigingen in afhankelijkheden en controleer wat er is veranderd.