Modul 3 · 3.1
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 underpostgres. 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/bashFelterne, 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 overaltLæ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 uploadsDen første blok på ti tegn er nøglen til det hele:
- Tegn 1: typen.
-er en almindelig fil,den mappe (directory),len 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:
| Bogstav | Betydning for en fil |
|---|---|
r | læse |
w | ændre |
x | køre som program eller script |
Og for en mappe lidt anderledes:
| Bogstav | Betydning for en mappe |
|---|---|
r | se navnene på filerne i mappen |
w | oprette, omdøbe og slette filer i mappen |
x | gå 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:
| Rettigheder | Tal | Brug |
|---|---|---|
rw-r--r-- | 644 | almindelig fil, som alle må læse |
rw-r----- | 640 | fil til ejer og gruppe, som en konfiguration med en adgangskode |
rw------- | 600 | hemmelig fil, som authorized_keys eller en privat nøgle |
rwxr-xr-x | 755 | mappe eller program, som alle må bruge |
rwx------ | 700 | privat 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.phpchmod æ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 medadduserog tilføj grupper medusermod -aG. ls -lviser typen, rettigheder for ejer, gruppe og andre, og derefter ejer og gruppe. For en mappe betyderxat gå ind ogwat oprette og slette filer.- Almindelige tal: 644 og 755 til offentligt, 640 til konfiguration med hemmeligheder, 600 og 700 til privat. Aldrig 777.
- Brug
findtil at sætte rettigheder på et helt træ; hold øje med setuid-filer.
Quiz
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.
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.
- Forbidden (403): Du har ikke adgang til / på denne server
- Log ind på din VPS med SSH (og opret en SSH-nøgle)
- Gratis WordPress-kursus 7.4: At hærde webstedet: rettigheder, headers og sikkerhedsplugins
- Debian-manual adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debian-manual chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
- Sådan læser og indstiller du filrettigheder på din VPS
