Corso Linux / Permessi dei file e uso sicuro di sudo
I permessi dei file Linux stabiliscono se il proprietario, il gruppo proprietario e gli altri utenti possono leggere (r), scrivere (w) o eseguire (x) un oggetto. sudo consente a un utente autorizzato di eseguire un comando come un altro utente, di solito l’amministratore. Quando l’accesso fallisce, controlla prima proprietà e permessi; usa privilegi superiori soltanto per l’operazione che li richiede.
Le prime interrogazioni su notes.txt riguardano il file creato nella nuova cartella di esercitazione più avanti. Esegui prima la preparazione della sezione su chmod, poi torna a controllare proprietario, gruppo e modalità. Il corso su utenti, gruppi e proprietà spiega le identità coinvolte.
Controllare identità e proprietà prima dei permessi
I permessi non sono un numero isolato associato a un file. Contano l’utente e i gruppi del processo corrente, il proprietario e il gruppo del file e i permessi delle directory lungo il percorso. Usa id per la sessione corrente e ls -l e stat per il file interessato. Comprendere prima utenti, gruppi e proprietà aiuta a interpretare correttamente i risultati.
id
ls -l notes.txt
stat -c '%A %a %U %G %n' notes.txt
Se ls -l mostra -rw-r----- 1 learner editors ... notes.txt, il primo - identifica un file regolare. I tre gruppi successivi, rw-, r-- e ---, si applicano rispettivamente al proprietario, al gruppo proprietario e agli altri utenti. learner ed editors sono nomi illustrativi: quelli reali dipendono dal sistema. Il campo %a di GNU stat mostra la modalità in ottale, per esempio 640.
Il significato di r, w e x per file e directory
Le stesse lettere consentono operazioni diverse sui file regolari e sulle directory. Questa distinzione spiega perché un file leggibile può comunque essere irraggiungibile attraverso il suo percorso.
| Permesso | File regolare | Directory |
|---|---|---|
r |
Leggere il contenuto | Leggere l’elenco dei nomi presenti |
w |
Modificare il contenuto | Permesso necessario per creare, eliminare e rinominare elementi |
x |
Consentire l’esecuzione di un file eseguibile | Attraversare la directory per raggiungere elementi di cui si conosce il nome |
Per aprire un file serve il permesso di attraversamento x sulle directory del percorso. Eliminare un file dipende normalmente da w e x sulla directory che lo contiene, non da w sul file stesso. Lo sticky bit, le liste di controllo degli accessi (ACL, Access Control List), le caratteristiche del file system o criteri aggiuntivi come SELinux (Security-Enhanced Linux) possono imporre ulteriori limiti.
Cambiare i permessi di un file di prova con chmod
L’esempio crea una nuova cartella e un file nella tua directory home. Se la cartella esiste già, scegli un altro nome. Fermati se mkdir o cd fallisce e verifica con pwd di essere nella nuova cartella prima di proseguire. printf scrive notes.txt nella directory corrente: controlla che non sostituisca un file esistente. Per questa esercitazione usa file tuoi, senza sudo, su un file system Linux che supporti i normali permessi Unix.
mkdir ~/linux-course-17-practice
cd ~/linux-course-17-practice
printf 'private notes\n' > notes.txt
ls -l notes.txt
chmod u=rw,g=r,o= notes.txt
stat -c '%A %a %n' notes.txt
u indica il proprietario, g il gruppo proprietario e o gli altri utenti. L’operatore = imposta i permessi di ciascuna categoria sui valori specificati. In un normale ambiente Linux con GNU stat, l’ultima riga è -rw-r----- 640 notes.txt. Gli utenti che possono effettivamente leggere il file dipendono comunque dalle loro identità e dai permessi del percorso. I permessi visualizzati da Git Bash su Windows non dimostrano il comportamento dei controlli di accesso Linux.
Nella notazione numerica si sommano r=4, w=2 e x=1 per ciascuna categoria. Quindi 640 equivale a rw-, r-- e ---. Il comando seguente passa a 600, che concede lettura e scrittura soltanto al proprietario nei normali controlli dei permessi. Se il comando riesce, verifica che stat mostri 600.
chmod 600 notes.txt
stat -c '%A %a %n' notes.txt
Invece chmod g+r notes.txt aggiunge soltanto la lettura per il gruppo ai permessi esistenti; chmod o-rwx notes.txt rimuove tutti e tre i permessi degli altri utenti. Scegli consapevolmente se sostituire i permessi di una categoria con = oppure aggiungere o togliere singoli bit con + e -. Un normale file di appunti non richiede il permesso di esecuzione.
Verificare separatamente i permessi delle directory
Per una directory personale, 700 consente soltanto al proprietario di elencare, attraversare e modificare le sue voci, nell’ambito dei normali permessi. Esegui l’esempio soltanto dentro la cartella di prova creata sopra. Se private esiste già o mkdir fallisce, fermati e scegli un nuovo nome: non cambiare i permessi di una directory preesistente.
mkdir private
chmod 700 private
ls -ld private
stat -c '%A %a %n' private
Il risultato atteso in questo ambiente Linux è drwx------ 700 private. L’opzione -d di ls mostra la directory stessa anziché il suo contenuto. Togliere per errore x a una directory può impedire anche al proprietario di raggiungerne i file. Applicare indiscriminatamente un solo valore a tutto un albero con chmod -R è rischioso: file regolari e directory hanno esigenze diverse per x.
Quando e come usare sudo
sudo esegue un comando come un altro utente secondo i criteri di autorizzazione dell’account corrente; normalmente l’utente di destinazione predefinito è root. Non tutti gli account hanno accesso amministrativo. sudo -l elenca i comandi consentiti e può richiedere l’autenticazione. Un messaggio di rifiuto è un risultato previsto se l’account non è autorizzato.
sudo -l
Usa la forma sudo comando soltanto quando quello specifico comando richiede privilegi superiori. Se un file di un altro utente non è accessibile, chiarisci prima quali accessi siano effettivamente necessari, senza aprirne indiscriminatamente i permessi. sudo di per sé non cambia permanentemente il proprietario del file: dipende da ciò che fa il comando eseguito. Un comando privilegiato può però creare file appartenenti all’amministratore, quindi controlla dove scrive e quali file lascia.
La shell corrente elabora la redirezione dell’output prima di avviare il comando. Per questo sudo echo ... > file-protetto può fallire: sudo non rende privilegiata l’apertura del file effettuata dalla shell. Per modificare una configurazione valuta uno strumento appropriato come sudoedit, nei limiti della politica autorizzata, invece di combinare redirezioni alla cieca. Per i file della politica sudoers usa visudo, che controlla la sintassi e riduce il rischio di perdere l’accesso amministrativo. Non ignorare gli errori segnalati dal controllo.
Diagnostica degli errori di permesso
- Esegui
idper vedere utente e gruppi della sessione corrente. Se hai modificato l’appartenenza ai gruppi, controlla che questa sessione di login abbia recepito il cambiamento. - Usa
ls -lostatper proprietario e permessi dell’oggetto. Per la directory stessa usals -ld. - Verifica il permesso di attraversamento su ogni directory del percorso. Se disponibile,
namei -l percorso, del progetto util-linux, mostra i singoli componenti con permessi e proprietà. - Se i normali bit non spiegano l’errore, esamina ACL, SELinux, eventuali mount in sola lettura e sticky bit. Non iniziare con
chmod 777per far sparire il messaggio. - Chiarito l’accesso necessario, applica la modifica più limitata e riprova come l’utente che dovrà realmente usare il file.
Terminata l’esercitazione, verifica con pwd la posizione prima di un’eventuale pulizia della cartella. Non applicare questi comandi chmod a dati di produzione o a file di altri utenti. Puoi ripetere l’esempio sul solo file di prova per passare nuovamente da 600 a 640, controllando ogni volta il risultato.
Documentazione di riferimento
Il manuale GNU chmod distribuito da Debian descrive notazioni, operatori e sticky bit. Consulta anche il manuale GNU stat per i campi mostrati e path_resolution(7) per i controlli lungo il percorso. Per autorizzazioni e modifica dei file, leggi i manuali sudo(8) e sudoedit e visudo(8). Il manuale namei(1) spiega l’ispezione dei componenti del percorso.




