bitlvl
IT

Scheda chmod e permessi

L’intero sistema dei permessi sta in una pagina. Stampala, o tieni aperto il calcolatore chmod per qualsiasi cosa interattiva.

Sta in una pagina A4 / Letter verticale; usa «Salva come PDF» nella finestra di stampa per conservarne una copia.

Leggere i permessi

-rwxr-xr-xtipo, proprietario rwx, gruppo r-x, altri r-x
r = 4, w = 2, x = 1somma per gruppo → cifra ottale
rwx r-x r-x= 7 5 5 = 755
d l c b p sdirectory, symlink, dispositivo a caratteri, a blocchi, pipe, socket

Modi comuni

644file: proprietario rw, tutti r
755directory, script, binari
600 / 700file / directory privati (chiavi SSH, .env, ~/.ssh)
664 / 775file / directory scrivibili dal gruppo
2775directory condivisa: i nuovi file ereditano il gruppo (setgid)
1777/tmp: tutti scrivono, solo i proprietari cancellano (sticky)
4755binario setuid (passwd, sudo)
777quasi sempre sbagliato

chmod simbolico

u g o auser (proprietario), gruppo, altri, tutti
+ - =aggiungi, togli, imposta esattamente
chmod u+x fil proprietario può eseguire
chmod go-w fgruppo e altri perdono la scrittura
chmod a=r ftutti in sola lettura
chmod u=rwx,g=rx,o= f= 750
chmod -R u=rwX,go=rX dirricorsivo; X = esecuzione solo per directory e file già eseguibili
chmod g+s dirsetgid su una directory
chmod +t dirbit sticky
chmod --reference=a bcopia il modo di a su b

Bit speciali (cifra ottale iniziale)

4 setuidesegui come il proprietario del file; appare come s nella x del proprietario
2 setgidesegui come il gruppo; sulle directory: eredita il gruppo; s nella x del gruppo
1 stickynelle directory: solo il proprietario può cancellare; t nella x degli altri
S / Tmaiuscola = bit speciale senza esecuzione (di solito un errore)

Proprietà

chown utente filecambia proprietario (solo root)
chown utente:gruppo fileproprietario e gruppo
chown -R www-data: /var/wwwricorsivo; gruppo vuoto = gruppo di login dell’utente
chgrp gruppo filesolo il gruppo (può farlo un membro)
chown -hcambia il symlink stesso, non la destinazione

umask

umask 022file 644, directory 755 (default)
umask 077file 600, directory 700 (privato)
umask 002file 664, directory 775 (lavoro di gruppo)
UMask=0077in un [Service] systemd

Trovare e correggere

find . -type f -perm -o+wfile scrivibili da tutti
find / -perm -4000 -type fbinari setuid
find . -type d -exec chmod 755 {} +correggi solo le directory
find . -type f -exec chmod 644 {} +correggi solo i file
stat -c '%a %U %G %n' *modo ottale, proprietario, gruppo, nome
ls -ld dirla directory stessa, non il contenuto

ACL (quando rwx non basta)

getfacl filemostra; un + in ls -l indica che ce n’è una
setfacl -m u:alice:rw filedai rw ad alice
setfacl -m d:g:dev:rwx dirACL predefinita per i nuovi file in dir
setfacl -b filerimuovi tutte le ACL

Da ricordare

  • Su una directory x = può entrare; r = può elencare; w = può creare/cancellare voci.
  • Cancellare un file richiede w sulla directory, non sul file.
  • root ignora rwx (ma non il bit di esecuzione per eseguire).
  • «Permission denied» è spesso un problema di proprietà; controlla ls -l prima di chmod 777.

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Domande

Come sistemo in sicurezza un’intera web root?

find /var/www -type d -exec chmod 755 {} + e find /var/www -type f -exec chmod 644 {} +, poi chown -R www-data: /var/www. Mai chmod -R 777.