3 modulis · 3.1
Naudotojai, grupės ir failų teisės
3 modulis: Naudotojai, teisės ir sudo · Skaitymo laikas: 12 min.
Mokymosi tikslas: Po šios pamokos galėsite kurti ir peržiūrėti naudotojus bei grupes, skaityti failo ar katalogo teises ls -l išvestyje ir teisingai jas nustatyti su chmod ir chown, neatverdami visko visiems.
Pagrindinės sąvokos: root (UID 0), paprastas naudotojas, sisteminis naudotojas, /etc/passwd, /etc/shadow, grupė, adduser, id, rwx, savininkas, grupė, kiti, aštuntainis skaičius (644, 755, 600), chmod, chown, umask, setuid, 777
Kiekvienas yra numeris
Linux nuo pat pradžių buvo kuriama keliems naudotojams viename kompiuteryje. Kiekvienas veikiantis procesas veikia kurio nors naudotojo vardu, o kiekvienas failas turi savininką. Sistemai naudotojas pirmiausia yra numeris, UID:
- root turi UID 0. Root gali viską: skaityti ir keisti bet kurį failą, sustabdyti bet kurią paslaugą, sukurti bet kurį naudotoją. Jokio klausimo „ar tikrai?“ nėra.
- Paprasti naudotojai, pavyzdžiui,
anna, Debian ir Ubuntu sistemose gauna UID nuo 1000. Jie gali rašyti savo namų kataloge ir ne ką daugiau. - Sisteminiai naudotojai turi mažą numerį ir dažniausiai neturi nei slaptažodžio, nei apvalkalo (shell). Paslaugos veikia tokio naudotojo vardu: nginx veikia kaip
www-data, PostgreSQL kaippostgres. Jei tokia paslauga būtų nulaužta, įsilaužėlis turėtų tik to naudotojo teises, o ne root teises.
Kas Jūs esate, parodo id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Anna turi UID 1000, savo grupę anna ir taip pat priklauso grupėms sudo ir users.
Kur saugomi naudotojai
Naudotojų sąrašas yra faile /etc/passwd, po vieną eilutę kiekvienam naudotojui:
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/bashLaukai, atskirti dvitaškiais: vardas, x (slaptažodis saugomas kitur), UID, pagrindinė grupė, aprašymas, namų katalogas, apvalkalas. Prie www-data kaip apvalkalas nurodyta /usr/sbin/nologin: prisijungti neįmanoma.
Patys slaptažodžiai užšifruoti (maišos pavidalu) saugomi faile /etc/shadow. Šį failą gali skaityti tik root. Ženklas ! arba * slaptažodžio lauko pradžioje reiškia: prisijungti slaptažodžiu neįmanoma. Taip Ubuntu sistemoje root pagal numatytuosius nustatymus yra užrakintas, o Debian sistemoje taip yra tada, jei diegdami nenurodėte root slaptažodžio.
Naudotojų ir grupių kūrimas
Debian ir Ubuntu sistemose naudojama patogi komanda 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 sukuria naudotoją, to paties pavadinimo grupę, namų katalogą ir paprašo slaptažodžio. Yra ir žemesnio lygio useradd (AlmaLinux ir Rocky Linux sistemose tai įprasta komanda), tačiau be parinkčių ji padaro mažiau: nesukuria slaptažodžio, o kai kuriose sistemose ir namų katalogo.
Grupė leidžia suteikti teises keliems naudotojams vienu metu. Naudotojo įtraukimas į grupę:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # tas pats, veikia visurAtkreipkite dėmesį į -a prie usermod: be -a visas papildomas naudotojo grupes pakeisite tik šia viena. Nauja grupė įsigalioja tik prisijungus iš naujo.
Paskyros užrakinimas jos nepašalinant (pavyzdžiui, buvusio kolegos):
root@web1:~# usermod -L -e 1 jan-L užrakina slaptažodį, -e 1 padaro paskyrą nebegaliojančia. Dėmesio: užrakintas slaptažodis ne visada sustabdo SSH raktą. Todėl pašalinkite ir raktus iš /home/jan/.ssh/authorized_keys (pamoka 2.3); nebegaliojančios paskyros (-e 1) sshd neįleidžia.
Teisių skaitymas
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 uploadsPirmasis dešimties ženklų blokas yra viso to raktas:
- 1 ženklas: tipas.
-yra paprastas failas,dkatalogas (directory),lnuoroda (symlink). - 2-4 ženklai: ką gali savininkas.
- 5-7 ženklai: ką gali grupė.
- 8-10 ženklai: ką gali kiti (visi likę).
Toliau eina saitų skaičius, savininkas, grupė, dydis ir data.
Raidės failo atveju reiškia:
| Raidė | Reikšmė failui |
|---|---|
r | skaityti |
w | keisti |
x | vykdyti kaip programą ar scenarijų |
O katalogo atveju šiek tiek ką kita:
| Raidė | Reikšmė katalogui |
|---|---|
r | gauti kataloge esančių failų pavadinimus |
w | kurti, pervadinti ir šalinti failus kataloge |
x | įeiti į katalogą ir atidaryti jame esančius failus |
Paskutinis punktas daugelį nustebina. Be x kataloge nepasieksite jame esančių failų, net jei patys failai yra skaitomi. O tas, kas turi w katalogui, gali jame šalinti failus, net jei jie priklauso kitam.
Pavyzdyje: index.html gali skaityti visi; config.php (su duomenų bazės slaptažodžiu) Anna gali skaityti ir keisti, grupė www-data (taigi žiniatinklio serveris) tik skaityti, o kiti nieko. Į uploads žiniatinklio serveris gali rašyti, nes ten patenka lankytojų įkelti failai.
Teisės kaip skaičius
Teisės dažnai užrašomos trimis skaitmenimis, aštuntainiu skaičiumi. Kiekviena raidė turi vertę: r = 4, w = 2, x = 1. Sudėkite kiekvienai grupei:
| Teisės | Skaičius | Naudojimas |
|---|---|---|
rw-r--r-- | 644 | paprastas failas, kurį gali skaityti visi |
rw-r----- | 640 | failas savininkui ir grupei, pavyzdžiui, konfigūracija su slaptažodžiu |
rw------- | 600 | slaptas failas, pavyzdžiui, authorized_keys arba privatusis raktas |
rwxr-xr-x | 755 | katalogas ar programa, kuria gali naudotis visi |
rwx------ | 700 | privatus katalogas, pavyzdžiui, ~/.ssh |
Teisių keitimas: chmod ir 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 keičia teises skaičiumi arba raidėmis (u, g, o savininkui, grupei, kitiems; + arba - ir raidė). chown eigenaar:groep keičia savininką ir grupę; tai gali daryti tik root. Su -R abi komandos veikia visam katalogui, ir būtent čia dažnai suklystama: chmod -R 644 kataloge padaro visus pakatalogius nebenaudojamus, nes katalogams reikia x. Visam medžiui geriau naudokite 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 {} +Niekada 777
„Neveikė, tai nustačiau 777.“ 777 reiškia: kiekvienas serveryje gali tai skaityti, keisti ir vykdyti. Jei kada nors nepavyks apsaugoti bent vienos paslaugos ar svetainės Jūsų serveryje, įsilaužėlis galės rašyti visur, kur nustatyta 777, įskaitant Jūsų PHP failus. Tikroji problema beveik visada yra savininkas arba grupė: per grupę suteikite žiniatinklio serveriui tiksliai tas teises, kurių jam reikia, ir tik tame kataloge, kur jų reikia.
Numatytosios teisės ir specialieji bitai
Nauji failai teises gauna per umask. Esant įprastai umask reikšmei 022, nauji failai gauna 644, o nauji katalogai 755. Savo umask matysite su komanda umask.
Kartais vietoj x matysite s, pavyzdžiui, prie /usr/bin/passwd (-rwsr-xr-x). Tai setuid bitas: programa veikia su savininko (root) teisėmis, net jei ją paleidžia paprastas naudotojas. To reikia kelioms sistemos programoms, tačiau niekada nenustatykite jo patys scenarijui. Netikėtas setuid failas yra žinomas įsilaužimo požymis; su find / -perm -4000 -type f 2>/dev/null pamatysite juos visus.
AlmaLinux ir Rocky Linux sistemose
Ten adduser yra kitas useradd pavadinimas; naudokite useradd -m anna, o po to passwd anna. Grupės pridedamos su usermod -aG. SELinux prideda papildomą sluoksnį šalia šioje pamokoje aptartų teisių: failui su teisingomis teisėmis prieiga vis tiek gali būti atmesta, jei jam priskirta neteisinga SELinux žymė (ją parodo ls -Z).
Santrauka
- Kiekvienas naudotojas turi UID; root (0) gali viską, paslaugos veikia savo sisteminių naudotojų be apvalkalo vardu.
- Naudotojai saugomi
/etc/passwd, slaptažodžių maišos/etc/shadow. Naudotojus kurkite suadduser, o grupes pridėkite suusermod -aG. ls -lrodo tipą, savininko, grupės ir kitų teises, o po to savininką ir grupę. Katalogo atvejuxreiškia įėjimą, owfailų kūrimą ir šalinimą.- Įprasti skaičiai: 644 ir 755 viešiems failams, 640 konfigūracijai su paslaptimis, 600 ir 700 privatiems. Niekada 777.
- Teisėms visam medžiui nustatyti naudokite
find; stebėkite setuid failus.
Testas (quiz)
Užduotis
Užduotis Z3.1: Teisių skaitymas. Atidarykite pavyzdinį failą rechten-1.txt: jame yra id išvestis trims naudotojams ir ls -l išvestis žiniatinklio katalogui. Kiekvienam klausimui atsakykite, kas ką gali (pavyzdžiui: „ar žiniatinklio serveris gali keisti config.php?“, „kuris failas turi per plačias teises?“, „koks skaičius atitinka .env?“). Programa palygina Jūsų atsakymus su nustatytu raktu ir prie kiekvieno klausimo paaiškina, kodėl.
Skaitykite daugiau
Šiuose straipsniuose aprašyti veiksmai taikomi WebOké prieglobos planams ir VPS; pas kitus teikėjus viskas veikia panašiai.
- Draudžiama (403): Neturite leidimo pasiekti / šiame serveryje
- Prisijungimas prie VPS per SSH (ir SSH rakto sukūrimas)
- WordPress kurse: pamoka 7.4 „Svetainės sustiprinimas: teisės, antraštės ir saugumo įskiepiai“
- Debian vadovas adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debian vadovas chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
