Salt la conținut

Setări cookie-uri

Alegeți pentru fiecare tip ce cookie-uri permiteți. Puteți modifica oricând alegerea prin Setări cookie-uri, în partea de jos a fiecărei pagini. Declarație de confidențialitate

Necesare

Mereu active

Necesare pentru autentificare, pentru păstrarea coșului și pentru a vă reține alegerile. Acestea sunt mereu active.

Ce cookie-uri?
  • weboke_sessie, weboke_klant, weboke_remember: sesiunea și menținerea autentificării
  • weboke_basket: coșul de cumpărături
  • wkBtwIncl: afișarea prețurilor cu sau fără TVA
  • wok_cookies: alegerea privind cookie-urile, 12 luni

Măsoară ce reclamă duce la o vizită sau o comandă, ca să nu plătim pentru reclame care nu aduc nimic.

Ce cookie-uri?
  • Google Ads prin Google Tag Manager (_gcl_au, _gcl_aw), până la 90 de zile
  • OpenAI Ads, reclame în ChatGPT
  • wok_aff: prin ce partener ați ajuns la noi (program de afiliere), 60 de zile

4,6

Țară și limbă

Fiecare țară are propriul site, cu prețurile și TVA-ul pentru țara respectivă.

Vedeți

Utilizatori, grupuri și permisiuni de fișiere

Modulul 3: Utilizatori, permisiuni și sudo · Timp de citire: 12 minute

Obiectivul lecției: După această lecție veți putea crea și vizualiza utilizatori și grupuri, veți putea citi permisiunile unui fișier sau ale unui director în ls -l și le veți putea seta corect cu chmod și chown, fără a deschide totul pentru toată lumea.

Noțiuni cheie: root (UID 0), utilizator obișnuit, utilizator de sistem, /etc/passwd, /etc/shadow, grup, adduser, id, rwx, proprietar, grup, ceilalți, octal (644, 755, 600), chmod, chown, umask, setuid, 777

Fiecare este un număr

Linux a fost construit de la început pentru mai mulți utilizatori pe aceeași mașină. Fiecare proces care rulează, rulează în numele unui utilizator, iar fiecare fișier are un proprietar. Pentru sistem, un utilizator este în primul rând un număr, UID-ul:

  • root are UID 0. Root poate face orice: poate citi și modifica orice fișier, poate opri orice serviciu, poate crea orice utilizator. Nu există nicio întrebare de tipul "sunteți sigur?".
  • Utilizatorii obișnuiți, precum anna, primesc pe Debian și Ubuntu un UID începând de la 1000. Ei pot scrie în propriul director personal și în rest pot face puține lucruri.
  • Utilizatorii de sistem au un număr mic și, de regulă, nu au nici parolă, nici shell. Serviciile rulează sub un astfel de utilizator: nginx sub www-data, PostgreSQL sub postgres. Dacă un astfel de serviciu este compromis, atacatorul are doar permisiunile acelui utilizator, nu pe cele ale lui root.

Cine sunteți vedeți cu id:

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

Anna are UID 1000, un grup propriu anna și face parte și din grupurile sudo și users.

Unde se află utilizatorii

Lista utilizatorilor se află în /etc/passwd, câte o linie pentru fiecare utilizator:

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/bash

Câmpurile, separate prin două puncte, sunt: numele, x (parola se află în altă parte), UID-ul, grupul principal, descrierea, directorul personal și shell-ul. La www-data, shell-ul este /usr/sbin/nologin: autentificarea nu este posibilă.

Parolele propriu-zise se află, criptate (sub formă de hash), în /etc/shadow. Acest fișier poate fi citit doar de root. Un ! sau * la începutul câmpului parolei înseamnă: autentificarea cu parolă nu este posibilă. Astfel, root este blocat implicit pe Ubuntu, iar pe Debian este blocat dacă nu ați introdus o parolă pentru root la instalare.

Crearea utilizatorilor și a grupurilor

Pe Debian și Ubuntu folosiți comanda prietenoasă 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 creează utilizatorul, un grup propriu cu același nume și un director personal și vă cere o parolă. Există și comanda de nivel mai scăzut useradd (care pe AlmaLinux și Rocky Linux este comanda obișnuită), dar fără opțiuni face mai puțin: nu setează o parolă, iar pe unele sisteme nu creează un director personal.

Un grup este o modalitate de a acorda permisiuni mai multor utilizatori deodată. Adăugarea unui utilizator într-un grup:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # la fel, funcționează peste tot

Atenție la -a din usermod: fără -a înlocuiți toate grupurile suplimentare ale utilizatorului cu doar acesta. Un grup nou se aplică abia după o nouă autentificare.

Blocarea unui cont fără a-l șterge (de exemplu, al unui fost coleg):

root@web1:~# usermod -L -e 1 jan

-L blochează parola, -e 1 face ca acel cont să expire. Atenție: o parolă blocată nu oprește întotdeauna o cheie SSH. Prin urmare, eliminați și cheile din /home/jan/.ssh/authorized_keys (lecția 2.3); un cont expirat (-e 1) este însă refuzat de sshd.

Citirea permisiunilor

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 uploads

Primul bloc de zece caractere este cheia pentru tot:

  • Caracterul 1: tipul. - este un fișier obișnuit, d un director (directory), l o scurtătură (symlink).
  • Caracterele 2-4: ce poate face proprietarul.
  • Caracterele 5-7: ce poate face grupul.
  • Caracterele 8-10: ce pot face ceilalți (toți ceilalți).

Urmează apoi numărul de legături, proprietarul, grupul, dimensiunea și data.

La un fișier, literele înseamnă:

LiterăSemnificație la un fișier
rcitire
wmodificare
xexecutare ca program sau script

Iar la un director, ceva puțin diferit:

LiterăSemnificație la un director
rlistarea numelor fișierelor din director
wcrearea, redenumirea și ștergerea fișierelor din director
xintrarea în director și deschiderea fișierelor din el

Ultimul punct îi surprinde pe mulți. Fără x pe un director nu puteți ajunge la fișierele din el, chiar dacă acestea pot fi citite. Iar cine are w pe un director poate șterge fișiere din el, chiar dacă aparțin altcuiva.

În exemplu: index.html poate fi citit de oricine; config.php (care conține parola bazei de date) poate fi citit și modificat de Anna, grupul www-data (adică serverul web) îl poate doar citi, iar ceilalți nu au niciun drept. În uploads serverul web poate scrie, deoarece acolo ajung fișierele încărcate de vizitatori.

Permisiunile ca număr

Permisiunile sunt adesea scrise ca trei cifre, numărul octal. Fiecare literă are o valoare: r = 4, w = 2, x = 1. Adunați valorile pentru fiecare grup:

PermisiuniNumărUtilizare
rw-r--r--644fișier obișnuit pe care oricine îl poate citi
rw-r-----640fișier pentru proprietar și grup, de exemplu o configurație cu o parolă
rw-------600fișier secret, precum authorized_keys sau o cheie privată
rwxr-xr-x755director sau program pe care îl poate folosi oricine
rwx------700director privat, precum ~/.ssh

Modificarea permisiunilor: chmod și 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.php

chmod modifică permisiunile, cu un număr sau cu litere (u, g, o pentru proprietar, grup și ceilalți; + sau - urmat de literă). chown eigenaar:groep modifică proprietarul și grupul; acest lucru îl poate face doar root. Cu -R, ambele comenzi acționează asupra unui întreg director, și tocmai aici apar des greșeli: chmod -R 644 pe un director face toate subdirectoarele inutilizabile, deoarece directoarele au nevoie de x. Pentru un arbore întreg folosiți mai degrabă 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 {} +

Niciodată 777

"Nu funcționa, așa că am pus 777." 777 înseamnă: oricine de pe server poate citi, modifica și executa acest fișier. Dacă vreodată un singur serviciu sau un singur site de pe serverul dumneavoastră este compromis, atacatorul poate scrie oriunde este setat 777, inclusiv în fișierele dumneavoastră PHP. Adevărata problemă este aproape întotdeauna proprietarul sau grupul: acordați serverului web, prin grup, exact dreptul de care are nevoie și doar pe directorul unde este necesar.

Permisiuni implicite și biți speciali

Fișierele noi își primesc permisiunile prin umask. Cu valoarea uzuală umask 022, fișierele noi devin 644, iar directoarele noi 755. Vă vedeți valoarea umask cu comanda umask.

Uneori vedeți un s în locul unui x, ca la /usr/bin/passwd (-rwsr-xr-x). Acesta este bitul setuid: programul rulează cu permisiunile proprietarului (root), chiar dacă îl pornește un utilizator obișnuit. Acest lucru este necesar pentru câteva programe de sistem, dar nu îl setați niciodată dumneavoastră pe un script. Un fișier setuid neașteptat este un semn cunoscut al unei intruziuni; cu find / -perm -4000 -type f 2>/dev/null le vedeți pe toate.

Pe AlmaLinux și Rocky Linux

Acolo, adduser este un alt nume pentru useradd; folosiți useradd -m anna și apoi passwd anna. Grupurile se adaugă cu usermod -aG. SELinux adaugă un nivel suplimentar pe lângă permisiunile din această lecție: un fișier cu permisiunile corecte poate fi totuși refuzat dacă are o etichetă SELinux greșită (ls -Z o afișează).

Rezumat

  • Fiecare utilizator are un UID; root (0) poate face orice, iar serviciile rulează sub utilizatori de sistem proprii, fără shell.
  • Utilizatorii se află în /etc/passwd, hash-urile parolelor în /etc/shadow. Creați utilizatori cu adduser și adăugați grupuri cu usermod -aG.
  • ls -l afișează tipul, permisiunile proprietarului, ale grupului și ale celorlalți, apoi proprietarul și grupul. La un director, x înseamnă intrarea în director, iar w crearea și ștergerea fișierelor.
  • Numere uzuale: 644 și 755 pentru conținut public, 640 pentru configurații cu secrete, 600 și 700 pentru conținut privat. Niciodată 777.
  • Folosiți find pentru a seta permisiunile pe un arbore întreg; fiți atent la fișierele setuid.

Test (quiz)

1. Ce înseamnă -rw-r----- la un fișier cu proprietarul anna și grupul www-data?



2. Ce se întâmplă dacă un director are permisiunile drw-r--r-- (adică niciun x)?



3. Executați usermod -G www-data anna (fără -a). Care este consecința?



4. Un plugin nu poate scrie în /var/www/example.com/uploads. Care este cea mai bună soluție?



5. De ce rulează nginx sub utilizatorul www-data și nu sub root?



Exercițiu

Exercițiul Z3.1: Citirea permisiunilor. Deschideți fișierul de exemplu rechten-1.txt: rezultatul comenzii id pentru trei utilizatori și al comenzii ls -l într-un director web. Răspundeți la fiecare întrebare despre cine ce poate face (de exemplu: "poate serverul web să modifice config.php?", "ce fișier are permisiuni prea largi?", "ce număr corespunde lui .env?"). Programul vă compară răspunsurile cu cheia fixă și explică, pentru fiecare întrebare, de ce.

Exercițiul Z3.1: Citirea permisiunilor

Fișier la acest exercițiu: rechten-1.txt










Ceea ce completați și ceea ce găsim nu se salvează. Browserul dumneavoastră reține răspunsurile și dacă ați rezolvat exercițiul. Dacă sunteți autentificat, păstrăm în Cursurile mele doar faptul că exercițiul a fost (aproape) corect; și de acolo îl puteți șterge.

Lecturi suplimentare

Pașii din aceste articole se aplică pachetelor de găzduire și VPS-urilor WebOké; la alți furnizori procedura este similară.

Un moment…

Configurați domeniile

Stabiliți pentru fiecare domeniu nameserverele, legătura cu hostingul și cine devine titularul.

Se încarcă domeniile…