Modul 3 · 3.1
Användare, grupper och filrättigheter
Modul 3: Användare, rättigheter och sudo · Lästid: 12 minuter
Lärandemål: Efter den här lektionen kan du skapa och granska användare och grupper, läsa rättigheterna för en fil eller mapp i ls -l och ställa in dem rätt med chmod och chown utan att öppna allt på vid gavel.
Nyckelbegrepp: root (UID 0), vanlig användare, systemanvändare, /etc/passwd, /etc/shadow, grupp, adduser, id, rwx, ägare, grupp, övriga, oktalt (644, 755, 600), chmod, chown, umask, setuid, 777
Alla är ett nummer
Linux är från början byggt för flera användare på en och samma maskin. Varje process som körs, körs för en användares räkning, och varje fil har en ägare. För systemet är en användare framför allt ett nummer, UID:
- root har UID 0. Root får göra allt: läsa och ändra varje fil, stoppa varje tjänst, skapa varje användare. Det finns inget "är du säker?".
- Vanliga användare, som
anna, får på Debian och Ubuntu ett UID från 1000 och uppåt. De får skriva i sin egen hemkatalog och i övrigt inte mycket. - Systemanvändare har ett lågt nummer och oftast inget lösenord och inget skal. Tjänster körs under en sådan användare: nginx under
www-data, PostgreSQL underpostgres. Blir en sådan tjänst hackad har inkräktaren bara den användarens rättigheter, inte roots.
Vem du är 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 grupp anna och är dessutom med i grupperna sudo och users.
Var användarna finns
Listan över användare finns i /etc/passwd, en rad per användare:
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/bashFälten, åtskilda med kolon: namn, x (lösenordet ligger någon annanstans), UID, primär grupp, beskrivning, hemkatalog, skal. För www-data står /usr/sbin/nologin som skal: det går inte att logga in.
Själva lösenorden ligger krypterade (hashade) i /etc/shadow. Den filen kan bara root läsa. Ett ! eller * i början av lösenordsfältet betyder: inloggning med lösenord är inte möjlig. Så är root som standard låst på Ubuntu, och på Debian om du inte angav något root-lösenord vid installationen.
Skapa användare och grupper
På Debian och Ubuntu använder du det vänliga 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 skapar användaren, en egen grupp med samma namn och en hemkatalog, och frågar efter ett lösenord. Det enklare useradd finns också (och är det vanliga kommandot på AlmaLinux och Rocky Linux), men gör mindre utan flaggor: inget lösenord, och på vissa system ingen hemkatalog.
En grupp är ett sätt att ge rättigheter till flera användare på en gång. Lägg till en användare i en grupp:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # samma sak, fungerar överalltLägg märke till -a i usermod: utan -a ersätter du alla användarens extra grupper med bara den här. En ny grupp gäller först när användaren loggar in igen.
Spärra ett konto utan att ta bort det (till exempel för en före detta kollega):
root@web1:~# usermod -L -e 1 jan-L låser lösenordet, -e 1 låter kontot gå ut. Obs: ett låst lösenord stoppar inte alltid en SSH-nyckel. Ta därför också bort nycklarna i /home/jan/.ssh/authorized_keys (lektion 2.3); ett utgånget konto (-e 1) nekas däremot av sshd.
Läsa rättigheter
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 uploadsDet första blocket på tio tecken är nyckeln till allt:
- Tecken 1: typen.
-är en vanlig fil,den mapp (katalog),len genväg (symlänk). - Tecken 2 till 4: vad ägaren får göra.
- Tecken 5 till 7: vad gruppen får göra.
- Tecken 8 till 10: vad övriga (alla andra) får göra.
Sedan kommer antalet länkar, ägaren, gruppen, storleken och datumet.
För en fil betyder bokstäverna:
| Bokstav | Betydelse för en fil |
|---|---|
r | läsa |
w | ändra |
x | köra som program eller skript |
Och för en mapp något helt annat:
| Bokstav | Betydelse för en mapp |
|---|---|
r | lista namnen på filerna i mappen |
w | skapa, byta namn på och ta bort filer i mappen |
x | gå in i mappen och öppna filer i den |
Det sista överraskar många. Utan x på en mapp kommer du inte åt filerna i den, även om filerna själva är läsbara. Och den som har w på en mapp kan ta bort filer i den, även om de tillhör någon annan.
I exemplet: index.html får alla läsa; config.php (med databaslösenordet) får Anna läsa och ändra, gruppen www-data (alltså webbservern) bara läsa och övriga ingenting. I uploads får webbservern skriva, eftersom besökarnas uppladdningar hamnar där.
Rättigheter som tal
Rättigheter skrivs ofta som tre siffror, det oktala talet. Varje bokstav har ett värde: r = 4, w = 2, x = 1. Lägg ihop per grupp:
| Rättigheter | Tal | Användning |
|---|---|---|
rw-r--r-- | 644 | vanlig fil som alla får läsa |
rw-r----- | 640 | fil för ägare och grupp, till exempel en konfiguration med ett lösenord |
rw------- | 600 | hemlig fil, som authorized_keys eller en privat nyckel |
rwxr-xr-x | 755 | mapp eller program som alla får använda |
rwx------ | 700 | privat mapp, som ~/.ssh |
Ändra rättigheter: chmod och 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 ändrar rättigheterna, med ett tal eller med bokstäver (u, g, o för ägare, grupp, övriga; + eller - och bokstaven). chown eigenaar:groep ändrar ägare och grupp; det får bara root göra. Med -R verkar båda på en hel mapp, och där går det ofta fel: chmod -R 644 på en mapp gör alla undermappar oanvändbara, eftersom mappar behöver x. Använd hellre find för ett helt träd:
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 fungerade inte, så jag satte 777 på det." 777 betyder: alla på servern får läsa, ändra och köra det här. Går det någon gång fel med en enda tjänst eller webbplats på din server kan inkräktaren skriva överallt där det står 777, även i dina PHP-filer. Det verkliga problemet är nästan alltid ägaren eller gruppen: ge webbservern exakt den rättighet den behöver via gruppen, och bara på den mapp där den behövs.
Standardrättigheter och specialbitar
Nya filer får sina rättigheter via umask. Med den vanliga umasken 022 blir nya filer 644 och nya mappar 755. Du ser din umask med kommandot umask.
Ibland ser du ett s i stället för ett x, som hos /usr/bin/passwd (-rwsr-xr-x). Det är setuid-biten: programmet körs med ägarens rättigheter (root), även när en vanlig användare startar det. Det behövs för några systemprogram, men sätt den aldrig själv på ett skript. En oväntad setuid-fil är ett känt tecken på intrång; med find / -perm -4000 -type f 2>/dev/null ser du alla.
På AlmaLinux och Rocky Linux
adduser är där ett annat namn för useradd; använd useradd -m anna och sedan passwd anna. Grupper lägger du till med usermod -aG. SELinux lägger till ett extra lager utöver rättigheterna i den här lektionen: en fil med rätt rättigheter kan ändå nekas om den har fel SELinux-etikett (ls -Z visar den).
Sammanfattning
- Varje användare har ett UID; root (0) får göra allt, tjänster körs under egna systemanvändare utan skal.
- Användarna finns i
/etc/passwd, lösenordshasharna i/etc/shadow. Skapa användare medadduseroch lägg till grupper medusermod -aG. ls -lvisar typ, rättigheter för ägare, grupp och övriga, och därefter ägare och grupp. För en mapp betyderxgå in ochwskapa och ta bort filer.- Vanliga tal: 644 och 755 för offentligt, 640 för konfiguration med hemligheter, 600 och 700 för privat. Aldrig 777.
- Använd
findför att sätta rättigheter på ett helt träd; håll koll på setuid-filer.
Quiz
Uppgift
Uppgift Z3.1: Läsa rättigheter. Öppna exempelfilen rechten-1.txt: utdata från id för tre användare och från ls -l i en webbmapp. Svara för varje fråga på vem som får göra vad (till exempel: "kan webbservern ändra config.php?", "vilken fil har för generösa rättigheter?", "vilket tal motsvarar .env?"). Programmet jämför dina svar med den fasta nyckeln och förklarar varför för varje fråga.
Läs mer
Stegen i de här artiklarna gäller för WebOkés webbhotellspaket och VPS:er; hos andra leverantörer fungerar det på liknande sätt.
- Förbjudet (403): Du har inte behörighet att komma åt / på den här servern
- Logga in på din VPS med SSH (och skapa en SSH-nyckel)
- I WordPress-kursen: lektion 7.4 "Härda webbplatsen: rättigheter, headers och säkerhetstillägg"
- Debians manual för adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debians manual för chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
