Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

Brugere, grupper og filrettigheder

Modul 3: Brugere, rettigheder og sudo · Læsetid: 12 minutter

Læringsmål: Efter denne lektion kan du oprette og se brugere og grupper, læse rettighederne for en fil eller mappe i ls -l og sætte dem rigtigt med chmod og chown uden at åbne for alt.

Centrale begreber: root (UID 0), almindelig bruger, systembruger, /etc/passwd, /etc/shadow, gruppe, adduser, id, rwx, ejer, gruppe, andre, oktal (644, 755, 600), chmod, chown, umask, setuid, 777

Alle er et nummer

Linux er fra starten bygget til flere brugere på én maskine. Hver proces, der kører, kører på vegne af en bruger, og hver fil har en ejer. For systemet er en bruger først og fremmest et nummer, UID:

  • root har UID 0. Root må alt: læse og ændre enhver fil, stoppe enhver tjeneste, oprette enhver bruger. Der er intet "er du sikker?".
  • Almindelige brugere, som anna, får på Debian og Ubuntu et UID fra 1000 og op. De må skrive i deres egen hjemmemappe og ellers ikke ret meget.
  • Systembrugere har et lavt nummer og som regel ingen adgangskode og ingen shell. Tjenester kører under sådan en bruger: nginx under www-data, PostgreSQL under postgres. Bliver sådan en tjeneste hacket, har indbrudstyven kun den brugers rettigheder, ikke roots.

Hvem du er, ser du med id:

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

Anna har UID 1000, en egen gruppe anna, og er også med i grupperne sudo og users.

Hvor brugerne står

Listen over brugere står i /etc/passwd, én linje pr. bruger:

anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bash

Felterne, adskilt af kolon: navn, x (adgangskoden står et andet sted), UID, primær gruppe, beskrivelse, hjemmemappe, shell. Hos www-data står /usr/sbin/nologin som shell: man kan ikke logge ind.

Selve adgangskoderne står krypteret (hashet) i /etc/shadow. Den fil kan kun root læse. Et ! eller * i starten af adgangskodefeltet betyder: man kan ikke logge ind med en adgangskode. Sådan er root som standard låst på Ubuntu, og på Debian hvis du ikke angav en root-adgangskode under installationen.

Opret brugere og grupper

På Debian og Ubuntu bruger du det venlige adduser:

root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...

adduser opretter brugeren, en egen gruppe med samme navn og en hjemmemappe, og beder om en adgangskode. Det mere grundlæggende useradd findes også (og er den almindelige kommando på AlmaLinux og Rocky Linux), men gør mindre uden tilvalg: ingen adgangskode og på nogle systemer ingen hjemmemappe.

En gruppe er en måde at give rettigheder til flere brugere på én gang. Tilføj en bruger til en gruppe:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # det samme, virker overalt

Læg mærke til -a ved usermod: uden -a erstatter du alle brugerens ekstra grupper med kun denne ene. En ny gruppe gælder først, når brugeren logger ind igen.

Luk en konto uden at slette den (for eksempel for en tidligere kollega):

root@web1:~# usermod -L -e 1 jan

-L låser adgangskoden, -e 1 lader kontoen udløbe. Bemærk: en låst adgangskode stopper ikke altid en SSH-nøgle. Fjern derfor også nøglerne i /home/jan/.ssh/authorized_keys (lektion 2.3); den udløbne konto (-e 1) afviser sshd derimod.

Læs rettigheder

anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna     www-data  1520 Nov  9 10:12 index.html
-rw-r----- 1 anna     www-data   412 Nov  9 10:14 config.php
drwxr-xr-x 2 anna     www-data  4096 Nov  9 10:15 images
drwxrwxr-x 2 www-data www-data  4096 Nov  9 10:20 uploads

Den første blok på ti tegn er nøglen til det hele:

  • Tegn 1: typen. - er en almindelig fil, d en mappe (directory), l en genvej (symlink).
  • Tegn 2 til 4: hvad ejeren må.
  • Tegn 5 til 7: hvad gruppen må.
  • Tegn 8 til 10: hvad andre (alle andre) må.

Derefter kommer antallet af links, ejeren, gruppen, størrelsen og datoen.

Bogstaverne betyder for en fil:

BogstavBetydning for en fil
rlæse
wændre
xkøre som program eller script

Og for en mappe lidt anderledes:

BogstavBetydning for en mappe
rse navnene på filerne i mappen
woprette, omdøbe og slette filer i mappen
xgå ind i mappen og åbne filer i den

Det sidste overrasker mange. Uden x på en mappe kan du ikke komme til filerne i den, heller ikke selvom de selv kan læses. Og den, der har w på en mappe, kan slette filer i den, også selvom de tilhører en anden.

I eksemplet: index.html må alle læse; config.php (med databaseadgangskoden) må Anna læse og ændre, gruppen www-data (altså webserveren) kun læse, og resten ingenting. I uploads må webserveren skrive, for der havner uploads fra besøgende.

Rettigheder som tal

Rettigheder skrives ofte som tre cifre, det oktale tal. Hvert bogstav har en værdi: r = 4, w = 2, x = 1. Læg sammen pr. gruppe:

RettighederTalBrug
rw-r--r--644almindelig fil, som alle må læse
rw-r-----640fil til ejer og gruppe, som en konfiguration med en adgangskode
rw-------600hemmelig fil, som authorized_keys eller en privat nøgle
rwxr-xr-x755mappe eller program, som alle må bruge
rwx------700privat mappe, som ~/.ssh

Ændr rettigheder: chmod og chown

anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.php

chmod ændrer rettighederne, med et tal eller med bogstaver (u, g, o for ejer, gruppe, andre; + eller - og bogstavet). chown eigenaar:groep ændrer ejer og gruppe; det må kun root. Med -R virker begge på en hel mappe, og det er tit her, det går galt: chmod -R 644 på en mappe gør alle undermapper ubrugelige, for mapper har brug for x. Brug hellere find til et helt træ:

root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +

Aldrig 777

"Det virkede ikke, så jeg satte bare 777 på." 777 betyder: alle på serveren må læse, ændre og køre dette. Går det en dag galt med én tjeneste eller ét website på din server, kan indbrudstyven skrive overalt, hvor der står 777, også i dine PHP-filer. Det egentlige problem er næsten altid ejeren eller gruppen: giv webserveren præcis den rettighed, den har brug for, via gruppen, og kun på den mappe, hvor det er nødvendigt.

Standardrettigheder og særlige bits

Nye filer får deres rettigheder via umask. Med den almindelige umask 022 bliver nye filer 644 og nye mapper 755. Du ser din umask med kommandoen umask.

Nogle gange ser du et s i stedet for et x, som ved /usr/bin/passwd (-rwsr-xr-x). Det er setuid-bitten: programmet kører med ejerens rettigheder (root), også når en almindelig bruger starter det. Det er nødvendigt for nogle få systemprogrammer, men sæt det aldrig selv på et script. En uventet setuid-fil er et kendt tegn på indbrud; med find / -perm -4000 -type f 2>/dev/null ser du dem alle.

På AlmaLinux og Rocky Linux

adduser er der et andet navn for useradd; brug useradd -m anna og derefter passwd anna. Grupper tilføjer du med usermod -aG. SELinux tilføjer et ekstra lag ud over rettighederne i denne lektion: en fil med de rigtige rettigheder kan alligevel blive afvist, hvis den har den forkerte SELinux-label (ls -Z viser den).

Opsummering

  • Hver bruger har et UID; root (0) må alt, tjenester kører under egne systembrugere uden shell.
  • Brugere står i /etc/passwd, adgangskodehashene i /etc/shadow. Opret brugere med adduser og tilføj grupper med usermod -aG.
  • ls -l viser typen, rettigheder for ejer, gruppe og andre, og derefter ejer og gruppe. For en mappe betyder x at gå ind og w at oprette og slette filer.
  • Almindelige tal: 644 og 755 til offentligt, 640 til konfiguration med hemmeligheder, 600 og 700 til privat. Aldrig 777.
  • Brug find til at sætte rettigheder på et helt træ; hold øje med setuid-filer.

Quiz

1. Hvad betyder -rw-r----- for en fil med ejer anna og gruppe www-data?



2. Hvad sker der, hvis en mappe har rettighederne drw-r--r-- (altså intet x nogen steder)?



3. Du kører usermod -G www-data anna (uden -a). Hvad er konsekvensen?



4. Et plugin kan ikke skrive i /var/www/example.com/uploads. Hvad er den bedste løsning?



5. Hvorfor kører nginx under brugeren www-data og ikke under root?



Opgave

Opgave Z3.1: Læs rettigheder. Åbn eksempelfilen rechten-1.txt: outputtet af id for tre brugere og af ls -l i en webmappe. Besvar for hvert spørgsmål, hvem der må hvad (for eksempel: "kan webserveren ændre config.php?", "hvilken fil har for vide rettigheder?", "hvilket tal hører til .env?"). Programmet sammenligner dine svar med den faste nøgle og forklarer for hvert spørgsmål hvorfor.

Opgave Z3.1: Læs rettigheder

Fil til denne opgave: rechten-1.txt










Det, du udfylder, og hvad vi finder, gemmer vi ikke. Din browser husker dine svar, og om du har bestået opgaven. Er du logget ind, gemmer vi kun, at du (næsten) bestod opgaven, i Mine kurser; der kan du også slette det.

Læs mere

Trinene i disse artikler gælder for WebOkés hostingpakker og VPS'er; hos andre udbydere fungerer det på lignende måde.

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…