Modul 3 · 3.1
Brukere, grupper og filrettigheter
Modul 3: Brukere, rettigheter og sudo · Lesetid: 12 minutter
Læringsmål: Etter denne leksjonen kan du opprette og se brukere og grupper, lese rettighetene til en fil eller mappe i ls -l, og sette dem riktig med chmod og chown uten å åpne alt for alle.
Nøkkelbegreper: root (UID 0), vanlig bruker, systembruker, /etc/passwd, /etc/shadow, gruppe, adduser, id, rwx, eier, gruppe, andre, oktal (644, 755, 600), chmod, chown, umask, setuid, 777
Alle er et nummer
Linux er fra starten bygget for flere brukere på én maskin. Hver prosess som kjører, kjører på vegne av en bruker, og hver fil har en eier. For systemet er en bruker først og fremst et nummer, UID:
- root har UID 0. Root kan gjøre alt: lese og endre alle filer, stoppe alle tjenester, opprette alle brukere. Det finnes ikke noe "er du sikker?".
- Vanlige brukere, som
anna, får på Debian og Ubuntu en UID fra 1000 og oppover. De kan skrive i sin egen hjemmemappe og ellers lite. - Systembrukere har et lavt nummer og vanligvis verken passord eller skall. Tjenester kjører under en slik bruker: nginx under
www-data, PostgreSQL underpostgres. Blir en slik tjeneste hacket, har inntrengeren bare rettighetene til den brukeren, ikke til root.
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 gruppene sudo og users.
Hvor brukerne ligger
Listen over brukere ligger i /etc/passwd, én linje per bruker:
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/bashFeltene, skilt med kolon: navn, x (passordet ligger et annet sted), UID, hovedgruppe, beskrivelse, hjemmemappe, skall. Hos www-data står skallet som /usr/sbin/nologin: innlogging er ikke mulig.
Selve passordene ligger, kryptert (hashet), i /etc/shadow. Den filen kan bare root lese. En ! eller * i starten av passordfeltet betyr: innlogging med passord er ikke mulig. Slik er root låst som standard på Ubuntu, og på Debian hvis du ikke oppga et root-passord under installasjonen.
Opprette brukere og grupper
På Debian og Ubuntu bruker du det brukervennlige 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 oppretter brukeren, en egen gruppe med samme navn og en hjemmemappe, og ber om et passord. Det enklere useradd finnes også (og er standardkommandoen på AlmaLinux og Rocky Linux), men gjør mindre uten valg: ikke noe passord, og på noen systemer ingen hjemmemappe.
En gruppe er en måte å gi rettigheter til flere brukere på en gang. Slik legger du en bruker til i en gruppe:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # det samme, fungerer overaltLegg merke til -a i usermod: uten -a erstatter du alle ekstra grupper for brukeren med bare denne ene. En ny gruppe gjelder først etter at du har logget inn på nytt.
Slik stenger du en konto uten å slette den (for eksempel for en tidligere kollega):
root@web1:~# usermod -L -e 1 jan-L låser passordet, -e 1 lar kontoen utløpe. Merk: et låst passord stopper ikke alltid en SSH-nøkkel. Fjern derfor også nøklene i /home/jan/.ssh/authorized_keys (leksjon 2.3); en utløpt konto (-e 1) avviser sshd derimot.
Lese rettigheter
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 blokken på ti tegn er nøkkelen til alt:
- Tegn 1: typen.
-er en vanlig fil,den mappe (directory),len snarvei (symlink). - Tegn 2 til 4: hva eieren kan gjøre.
- Tegn 5 til 7: hva gruppen kan gjøre.
- Tegn 8 til 10: hva andre (alle andre) kan gjøre.
Deretter kommer antall lenker, eieren, gruppen, størrelsen og datoen.
For en fil betyr bokstavene:
| Bokstav | Betydning for en fil |
|---|---|
r | lese |
w | endre |
x | kjøre som program eller skript |
Og for en mappe litt annerledes:
| Bokstav | Betydning for en mappe |
|---|---|
r | vise navnene på filene i mappen |
w | opprette, gi nytt navn til og slette filer i mappen |
x | gå inn i mappen og åpne filer i den |
Det siste overrasker mange. Uten x på en mappe kommer du ikke til filene i den, selv om filene selv er lesbare. Og den som har w på en mappe, kan slette filer i den, også når de tilhører noen andre.
I eksempelet: index.html kan alle lese; config.php (med databasepassordet) kan Anna lese og endre, gruppen www-data (altså webserveren) bare lese, og resten ingenting. I uploads kan webserveren skrive, for der havner opplastinger fra besøkende.
Rettigheter som tall
Rettigheter skrives ofte som tre sifre, det oktale tallet. Hver bokstav har en verdi: r = 4, w = 2, x = 1. Legg sammen per gruppe:
| Rettigheter | Tall | Bruk |
|---|---|---|
rw-r--r-- | 644 | vanlig fil som alle kan lese |
rw-r----- | 640 | fil for eier og gruppe, som en konfigurasjon med et passord |
rw------- | 600 | hemmelig fil, som authorized_keys eller en privat nøkkel |
rwxr-xr-x | 755 | mappe eller program som alle kan bruke |
rwx------ | 700 | privat mappe, som ~/.ssh |
Endre rettigheter: 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 endrer rettighetene, med et tall eller med bokstaver (u, g, o for eier, gruppe, andre; + eller - og bokstaven). chown eigenaar:groep endrer eier og gruppe; det kan bare root gjøre. Med -R virker begge på en hel mappe, og der går det ofte galt: chmod -R 644 på en mappe gjør alle undermapper ubrukelige, for mapper trenger x. For et helt tre bruker du heller find:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Aldri 777
"Det virket ikke, så jeg satte 777 på det." 777 betyr: alle på serveren kan lese, endre og kjøre dette. Går det noen gang galt med én tjeneste eller ett nettsted på serveren din, kan inntrengeren skrive overalt der det står 777, også i PHP-filene dine. Det egentlige problemet er nesten alltid eieren eller gruppen: gi webserveren akkurat den rettigheten den trenger via gruppen, og bare på mappen der den trengs.
Standardrettigheter og spesielle biter
Nye filer får rettighetene sine via umask. Med den vanlige umask-verdien 022 blir nye filer 644 og nye mapper 755. Du ser umask-verdien din med kommandoen umask.
Noen ganger ser du en s i stedet for en x, som hos /usr/bin/passwd (-rwsr-xr-x). Det er setuid-biten: programmet kjører med eierens rettigheter (root), også når en vanlig bruker starter det. Det trengs for noen få systemprogrammer, men sett det aldri selv på et skript. En uventet setuid-fil er et kjent tegn på innbrudd; med find / -perm -4000 -type f 2>/dev/null ser du alle sammen.
På AlmaLinux og Rocky Linux
adduser er der et annet navn for useradd; bruk useradd -m anna og deretter passwd anna. Grupper legger du til med usermod -aG. SELinux legger til et ekstra lag i tillegg til rettighetene i denne leksjonen: en fil med riktige rettigheter kan likevel bli avvist hvis den har feil SELinux-etikett (ls -Z viser den).
Oppsummering
- Hver bruker har en UID; root (0) kan gjøre alt, tjenester kjører under egne systembrukere uten skall.
- Brukere ligger i
/etc/passwd, passordhashene i/etc/shadow. Opprett brukere medadduserog legg til grupper medusermod -aG. ls -lviser type, rettigheter for eier, gruppe og andre, og deretter eier og gruppe. For en mappe betyrxå gå inn, ogwå opprette og slette filer.- Vanlige tall: 644 og 755 for offentlig, 640 for konfigurasjon med hemmeligheter, 600 og 700 for privat. Aldri 777.
- Bruk
findfor å sette rettigheter på et helt tre; følg med på setuid-filer.
Quiz
Oppgave
Oppgave Z3.1: Lese rettigheter. Åpne eksempelfilen rechten-1.txt: utdataene fra id for tre brukere og fra ls -l i en webmappe. Svar for hvert spørsmål hvem som kan gjøre hva (for eksempel: "kan webserveren endre config.php?", "hvilken fil har for vide rettigheter?", "hvilket tall hører til .env?"). Programmet sammenligner svarene dine med fasiten og forklarer for hvert spørsmål hvorfor.
Les mer
Stegene i disse artiklene gjelder for webhotellpakkene og VPS-ene til WebOké; hos andre leverandører fungerer det på lignende måte.
- Ingen tilgang (403): Du har ikke tilgang til / på denne serveren
- Logg inn på VPS-en din med SSH (og lag en SSH-nøkkel)
- I WordPress-kurset: leksjon 7.4 "Herd nettstedet: rettigheter, headere og sikkerhetsplugins"
- Debian-håndbok for adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debian-håndbok for chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
