Vai al contenuto

Impostazioni cookie

Scelga per ogni tipo quali cookie consente. Può modificare la sua scelta in qualsiasi momento tramite Impostazioni cookie in fondo a ogni pagina. Informativa sulla privacy

Necessari

Sempre attivi

Servono per accedere, conservare il carrello e ricordare le sue scelte. Sono sempre attivi.

Quali cookie?
  • weboke_sessie, weboke_klant, weboke_remember: la sua sessione e la permanenza dell'accesso
  • weboke_basket: il suo carrello
  • wkBtwIncl: visualizzazione dei prezzi con o senza IVA
  • wok_cookies: la sua scelta sui cookie, 12 mesi

Misurano quale annuncio porta a una visita o a un ordine, così non paghiamo annunci che non funzionano.

Quali cookie?
  • Google Ads tramite Google Tag Manager (_gcl_au, _gcl_aw), fino a 90 giorni
  • OpenAI Ads, annunci in ChatGPT
  • wok_aff: tramite quale partner è arrivato da noi (programma di affiliazione), 60 giorni

4,6

Paese e lingua

Ogni paese ha il suo sito, con i prezzi e l'IVA di quel paese.

Vedi

Utenti, gruppi e permessi dei file

Modulo 3: Utenti, permessi e sudo · Tempo di lettura: 12 minuti

Obiettivo della lezione: Dopo questa lezione saprà creare e consultare utenti e gruppi, leggere i permessi di un file o di una cartella in ls -l e impostarli correttamente con chmod e chown, senza spalancare tutto.

Concetti chiave: root (UID 0), utente normale, utente di sistema, /etc/passwd, /etc/shadow, gruppo, adduser, id, rwx, proprietario, gruppo, altri, ottale (644, 755, 600), chmod, chown, umask, setuid, 777

Ognuno è un numero

Linux è stato progettato fin dall'inizio per più utenti sulla stessa macchina. Ogni processo in esecuzione gira per conto di un utente e ogni file ha un proprietario. Per il sistema un utente è soprattutto un numero, lo UID:

  • root ha UID 0. Root può fare tutto: leggere e modificare qualsiasi file, fermare qualsiasi servizio, creare qualsiasi utente. Non esiste alcun "è sicuro?".
  • Gli utenti normali, come anna, su Debian e Ubuntu ricevono uno UID a partire da 1000. Possono scrivere nella propria cartella home e poco altro.
  • Gli utenti di sistema hanno un numero basso e di solito nessuna password e nessuna shell. I servizi girano con un utente di questo tipo: nginx con www-data, PostgreSQL con postgres. Se un servizio del genere viene violato, l'intruso ha solo i permessi di quell'utente, non quelli di root.

Chi è Lei, lo vede con id:

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

Anna ha UID 1000, un proprio gruppo anna e fa parte anche dei gruppi sudo e users.

Dove si trovano gli utenti

L'elenco degli utenti si trova in /etc/passwd, una riga per utente:

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

I campi, separati da due punti: nome, x (la password si trova altrove), UID, gruppo principale, descrizione, cartella home, shell. Per www-data la shell è /usr/sbin/nologin: non è possibile accedere.

Le password vere e proprie si trovano, cifrate (sotto forma di hash), in /etc/shadow. Solo root può leggere quel file. Un ! o un * all'inizio del campo password significa: non è possibile accedere con una password. Per questo root su Ubuntu è bloccato per impostazione predefinita, e su Debian se durante l'installazione non ha indicato una password di root.

Creare utenti e gruppi

Su Debian e Ubuntu si usa il comodo 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 crea l'utente, un gruppo proprio con lo stesso nome, una cartella home e chiede una password. Esiste anche il più essenziale useradd (che su AlmaLinux e Rocky Linux è il comando normale), ma senza opzioni fa meno: nessuna password e, su alcuni sistemi, nessuna cartella home.

Un gruppo è un modo per assegnare permessi a più utenti contemporaneamente. Aggiungere un utente a un gruppo:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # uguale, funziona ovunque

Faccia attenzione alla -a in usermod: senza -a sostituisce tutti i gruppi aggiuntivi dell'utente con questo solo gruppo. Un nuovo gruppo vale solo dopo un nuovo accesso.

Bloccare un account senza eliminarlo (per esempio quello di un ex collega):

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

-L blocca la password, -e 1 fa scadere l'account. Attenzione: una password bloccata non sempre ferma una chiave SSH. Rimuova quindi anche le chiavi in /home/jan/.ssh/authorized_keys (lezione 2.3); l'account scaduto (-e 1) invece viene rifiutato da sshd.

Leggere i permessi

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

Il primo blocco di dieci caratteri è la chiave di tutto:

  • Carattere 1: il tipo. - è un file normale, d una cartella (directory), l un collegamento (symlink).
  • Caratteri da 2 a 4: che cosa può fare il proprietario.
  • Caratteri da 5 a 7: che cosa può fare il gruppo.
  • Caratteri da 8 a 10: che cosa possono fare gli altri (tutti gli altri).

Seguono il numero di collegamenti, il proprietario, il gruppo, la dimensione e la data.

Per un file le lettere significano:

LetteraSignificato per un file
rleggere
wmodificare
xeseguire come programma o script

Per una cartella il significato è leggermente diverso:

LetteraSignificato per una cartella
relencare i nomi dei file nella cartella
wcreare, rinominare ed eliminare file nella cartella
xentrare nella cartella e aprire i file al suo interno

Quest'ultimo punto sorprende molte persone. Senza x su una cartella non si arriva ai file al suo interno, anche se questi sono leggibili. E chi ha w su una cartella può eliminare i file al suo interno, anche se appartengono a qualcun altro.

Nell'esempio: index.html può essere letto da tutti; config.php (con la password del database) può essere letto e modificato da Anna, il gruppo www-data (cioè il server web) può solo leggerlo e gli altri non possono fare nulla. In uploads il server web può scrivere, perché lì finiscono i file caricati dai visitatori.

I permessi come numero

I permessi vengono spesso scritti come tre cifre, il numero ottale. Ogni lettera ha un valore: r = 4, w = 2, x = 1. Si sommano per ciascun gruppo:

PermessiNumeroUso
rw-r--r--644file normale che tutti possono leggere
rw-r-----640file per proprietario e gruppo, come una configurazione con una password
rw-------600file segreto, come authorized_keys o una chiave privata
rwxr-xr-x755cartella o programma che tutti possono usare
rwx------700cartella privata, come ~/.ssh

Modificare i permessi: chmod e 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 modifica i permessi, con un numero o con lettere (u, g, o per proprietario, gruppo, altri; + o - e la lettera). chown eigenaar:groep modifica proprietario e gruppo; può farlo solo root. Con -R entrambi agiscono su un'intera cartella, ed è lì che spesso le cose vanno storte: chmod -R 644 su una cartella rende inutilizzabili tutte le sottocartelle, perché le cartelle hanno bisogno di x. Per un intero albero usi piuttosto 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 {} +

Mai 777

"Non funzionava, allora ho messo 777." 777 significa: chiunque sul server può leggere, modificare ed eseguire questo file. Se un giorno anche un solo servizio o un solo sito web sul Suo server viene compromesso, l'intruso può scrivere ovunque ci sia 777, compresi i Suoi file PHP. Il vero problema è quasi sempre il proprietario o il gruppo: dia al server web, tramite il gruppo, esattamente il permesso di cui ha bisogno, e solo sulla cartella in cui serve.

Permessi predefiniti e bit speciali

I nuovi file ricevono i loro permessi tramite la umask. Con la umask comune 022 i nuovi file diventano 644 e le nuove cartelle 755. La Sua umask la vede con il comando umask.

A volte vede una s al posto di una x, come per /usr/bin/passwd (-rwsr-xr-x). È il bit setuid: il programma gira con i permessi del proprietario (root), anche se lo avvia un utente normale. È necessario per alcuni programmi di sistema, ma non lo imposti mai Lei stesso su uno script. Un file setuid inatteso è un noto segnale di intrusione; con find / -perm -4000 -type f 2>/dev/null li vede tutti.

Su AlmaLinux e Rocky Linux

Lì adduser è un altro nome per useradd; usi useradd -m anna e poi passwd anna. I gruppi si aggiungono con usermod -aG. SELinux aggiunge un ulteriore livello oltre ai permessi di questa lezione: un file con i permessi giusti può comunque essere rifiutato se ha l'etichetta SELinux sbagliata (ls -Z la mostra).

Riepilogo

  • Ogni utente ha uno UID; root (0) può fare tutto, i servizi girano con propri utenti di sistema senza shell.
  • Gli utenti si trovano in /etc/passwd, gli hash delle password in /etc/shadow. Crei gli utenti con adduser e aggiunga i gruppi con usermod -aG.
  • ls -l mostra il tipo, i permessi di proprietario, gruppo e altri, e poi proprietario e gruppo. Per una cartella x significa entrare e w creare ed eliminare file.
  • Numeri comuni: 644 e 755 per ciò che è pubblico, 640 per configurazioni con segreti, 600 e 700 per ciò che è privato. Mai 777.
  • Usi find per impostare i permessi su un intero albero; tenga d'occhio i file setuid.

Quiz

1. Che cosa significa -rw-r----- per un file con proprietario anna e gruppo www-data?



2. Che cosa succede se una cartella ha i permessi drw-r--r-- (quindi nessuna x)?



3. Esegue usermod -G www-data anna (senza -a). Qual è la conseguenza?



4. Un plugin non riesce a scrivere in /var/www/example.com/uploads. Qual è la soluzione migliore?



5. Perché nginx gira con l'utente www-data e non come root?



Esercizio

Esercizio Z3.1: Leggere i permessi. Apra il file di esempio rechten-1.txt: l'output di id per tre utenti e di ls -l in una cartella web. Risponda a ogni domanda indicando chi può fare cosa (per esempio: "il server web può modificare config.php?", "quale file ha permessi troppo ampi?", "quale numero corrisponde a .env?"). Il programma confronta le Sue risposte con la chiave fissa e spiega il perché per ogni domanda.

Esercizio Z3.1: Leggere i permessi

File relativo a questo esercizio: rechten-1.txt










Quello che inserisce e quello che rileviamo non vengono salvati. Il Suo browser ricorda le Sue risposte e se ha superato l'esercizio. Se ha effettuato l'accesso, conserviamo in I miei corsi solo il fatto che l'esercizio era (quasi) corretto; anche lì può eliminarlo.

Per approfondire

I passaggi descritti in questi articoli valgono per i pacchetti di hosting e i VPS di WebOké; con altri fornitori funziona in modo simile.

Un momento…

Configuri i suoi domini

Per ogni dominio imposti i nameserver, il collegamento al suo hosting e chi ne diventa l'intestatario.

Caricamento dei suoi domini…