Modul 3 · 3.1
Uporabniki, skupine in pravice datotek
Modul 3: Uporabniki, pravice in sudo · Čas branja: 12 minut
Učni cilj: Po tej lekciji boste znali ustvariti in pregledati uporabnike in skupine, prebrati pravice datoteke ali mape v ls -l ter jih z chmod in chown pravilno nastaviti, ne da bi vse odprli na stežaj.
Ključni pojmi: root (UID 0), navaden uporabnik, sistemski uporabnik, /etc/passwd, /etc/shadow, skupina, adduser, id, rwx, lastnik, skupina, ostali, osmiški zapis (644, 755, 600), chmod, chown, umask, setuid, 777
Vsak je številka
Linux je bil že od začetka zasnovan za več uporabnikov na enem računalniku. Vsak proces, ki teče, teče v imenu nekega uporabnika, in vsaka datoteka ima lastnika. Za sistem je uporabnik predvsem številka, UID:
- root ima UID 0. Root sme vse: brati in spreminjati vsako datoteko, ustaviti vsako storitev, ustvariti vsakega uporabnika. Vprašanja "ali ste prepričani" ni.
- Navadni uporabniki, kot je
anna, na Debianu in Ubuntuju dobijo UID od 1000 naprej. Pisati smejo v svojo domačo mapo, sicer pa le malo. - Sistemski uporabniki imajo nizko številko in običajno nimajo ne gesla ne lupine. Storitve tečejo pod takim uporabnikom: nginx pod
www-data, PostgreSQL podpostgres. Če kdo vdre v tako storitev, ima vsiljivec le pravice tega uporabnika, ne pa pravic uporabnika root.
Kdo ste, vidite z ukazom id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Anna ima UID 1000, lastno skupino anna, poleg tega pa je še v skupinah sudo in users.
Kje so zapisani uporabniki
Seznam uporabnikov je v /etc/passwd, ena vrstica na uporabnika:
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/bashPolja, ločena z dvopičji, so: ime, x (geslo je shranjeno drugje), UID, glavna skupina, opis, domača mapa, lupina. Pri www-data je kot lupina navedeno /usr/sbin/nologin: prijava ni mogoča.
Sama gesla so shranjena šifrirana (zgoščena) v /etc/shadow. To datoteko lahko bere samo root. Znak ! ali * na začetku polja za geslo pomeni: prijava z geslom ni mogoča. Tako je root na Ubuntuju privzeto zaklenjen, na Debianu pa takrat, ko ob namestitvi niste vnesli gesla za root.
Ustvarjanje uporabnikov in skupin
Na Debianu in Ubuntuju uporabite prijazni ukaz 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 ustvari uporabnika, lastno skupino z enakim imenom in domačo mapo ter vpraša za geslo. Obstaja tudi nižjenivojski useradd (na AlmaLinuxu in Rocky Linuxu je to običajen ukaz), ki pa brez možnosti naredi manj: ne nastavi gesla, na nekaterih sistemih pa ne ustvari niti domače mape.
Skupina je način, kako dodeliti pravice več uporabnikom hkrati. Uporabnika dodate v skupino tako:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # enako, deluje povsodBodite pozorni na -a pri usermod: brez -a vse dodatne skupine uporabnika zamenjate samo s to eno. Nova skupina začne veljati šele po ponovni prijavi.
Račun zaprete, ne da bi ga izbrisali (na primer račun nekdanjega sodelavca), takole:
root@web1:~# usermod -L -e 1 jan-L zaklene geslo, -e 1 pa računu nastavi potek veljavnosti. Pozor: zaklenjeno geslo ne ustavi vedno ključa SSH. Zato odstranite tudi ključe v /home/jan/.ssh/authorized_keys (lekcija 2.3); račun s pretečeno veljavnostjo (-e 1) pa sshd zavrne.
Branje pravic
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 uploadsPrvi blok desetih znakov je ključ do vsega:
- Znak 1: vrsta.
-je navadna datoteka,dmapa (imenik),lbližnjica (simbolna povezava). - Znaki od 2 do 4: kaj sme lastnik.
- Znaki od 5 do 7: kaj sme skupina.
- Znaki od 8 do 10: kaj smejo ostali (vsi drugi).
Sledijo število povezav, lastnik, skupina, velikost in datum.
Pri datoteki črke pomenijo:
| Črka | Pomen pri datoteki |
|---|---|
r | branje |
w | spreminjanje |
x | izvajanje kot program ali skripta |
Pri mapi pa nekaj malo drugačnega:
| Črka | Pomen pri mapi |
|---|---|
r | izpis imen datotek v mapi |
w | ustvarjanje, preimenovanje in brisanje datotek v mapi |
x | vstop v mapo in odpiranje datotek v njej |
Zadnje marsikoga preseneti. Brez x na mapi ne pridete do datotek v njej, tudi če so same po sebi berljive. Kdor ima w na mapi, lahko v njej datoteke briše, tudi če so last nekoga drugega.
V primeru: index.html lahko berejo vsi; config.php (z geslom za podatkovno bazo) lahko Anna bere in spreminja, skupina www-data (torej spletni strežnik) jo lahko samo bere, ostali pa nič. V uploads sme spletni strežnik pisati, saj tja pridejo datoteke, ki jih naložijo obiskovalci.
Pravice kot številka
Pravice se pogosto zapišejo s tremi števkami, kot osmiško število. Vsaka črka ima svojo vrednost: r = 4, w = 2, x = 1. Vrednosti seštejete za vsako skupino posebej:
| Pravice | Številka | Uporaba |
|---|---|---|
rw-r--r-- | 644 | navadna datoteka, ki jo lahko berejo vsi |
rw-r----- | 640 | datoteka za lastnika in skupino, na primer konfiguracija z geslom |
rw------- | 600 | skrivna datoteka, na primer authorized_keys ali zasebni ključ |
rwxr-xr-x | 755 | mapa ali program, ki ga lahko uporabljajo vsi |
rwx------ | 700 | zasebna mapa, na primer ~/.ssh |
Spreminjanje pravic: chmod in 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 spremeni pravice, s številko ali s črkami (u, g, o za lastnika, skupino, ostale; + ali - in črka). chown eigenaar:groep spremeni lastnika in skupino; to sme le root. Z -R oba delujeta na celotni mapi, in prav tu gre pogosto kaj narobe: chmod -R 644 na mapi naredi vse podmape neuporabne, saj mape potrebujejo x. Za celotno drevo raje uporabite 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 {} +Nikoli 777
"Ni delovalo, zato sem nastavil 777." 777 pomeni: vsakdo na strežniku lahko to bere, spreminja in izvaja. Če gre kdaj na Vašem strežniku narobe le ena storitev ali eno spletno mesto, lahko vsiljivec piše povsod, kjer je nastavljeno 777, tudi v Vaše datoteke PHP. Pravi problem je skoraj vedno lastnik ali skupina: spletnemu strežniku prek skupine dodelite natanko tisto pravico, ki jo potrebuje, in samo na mapi, kjer jo potrebuje.
Privzete pravice in posebni biti
Nove datoteke dobijo pravice prek umask. Z običajnim umask 022 dobijo nove datoteke 644, nove mape pa 755. Svoj umask vidite z ukazom umask.
Včasih namesto x vidite s, na primer pri /usr/bin/passwd (-rwsr-xr-x). To je bit setuid: program teče s pravicami lastnika (root), tudi če ga zažene navaden uporabnik. Nekaj sistemskih programov to potrebuje, vendar ga sami nikoli ne nastavite na skripto. Nepričakovana datoteka s setuid je znan znak vdora; z find / -perm -4000 -type f 2>/dev/null jih vidite vse.
Na AlmaLinuxu in Rocky Linuxu
adduser je tam drugo ime za useradd; uporabite useradd -m anna in nato passwd anna. Skupine dodajate z usermod -aG. SELinux doda poleg pravic iz te lekcije še dodatno plast: datoteka s pravilnimi pravicami je lahko vseeno zavrnjena, če ima napačno oznako SELinux (ls -Z jo prikaže).
Povzetek
- Vsak uporabnik ima UID; root (0) sme vse, storitve tečejo pod lastnimi sistemskimi uporabniki brez lupine.
- Uporabniki so zapisani v
/etc/passwd, zgoščena gesla v/etc/shadow. Uporabnike ustvarite zadduser, skupine dodajate zusermod -aG. ls -lprikaže vrsto, pravice lastnika, skupine in ostalih ter nato lastnika in skupino. Pri mapixpomeni vstop,wpa ustvarjanje in brisanje datotek.- Običajne številke: 644 in 755 za javno, 640 za konfiguracijo s skrivnostmi, 600 in 700 za zasebno. Nikoli 777.
- Za nastavljanje pravic na celotnem drevesu uporabite
find; bodite pozorni na datoteke s setuid.
Kviz
Naloga
Naloga Z3.1: Branje pravic. Odprite primer datoteke rechten-1.txt: izpis ukaza id za tri uporabnike in izpis ls -l v spletni mapi. Pri vsakem vprašanju odgovorite, kdo sme kaj (na primer: "ali lahko spletni strežnik spremeni config.php?", "katera datoteka ima preširoke pravice?", "katera številka ustreza .env?"). Program primerja Vaše odgovore s fiksnim ključem in pri vsakem vprašanju razloži, zakaj.
Za nadaljnje branje
Koraki v teh člankih veljajo za gostovalne pakete in VPS-je WebOké; pri drugih ponudnikih deluje podobno.
- Prepovedano (403): nimate dovoljenja za dostop do strežnika »/«.
- Prijava v VPS prek SSH (in ustvarjanje ključa SSH)
- V tečaju WordPress: lekcija 7.4 "Utrjevanje spletnega mesta: pravice, glave in varnostni vtičniki"
- Priročnik Debian za adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Priročnik Debian za chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
