GUIDA I permessi su Unix

memset

Nuovo Utente
73
53
In questo articolo vedremo quali sono e come trattate i permessi su sistemi Unix & Unix-Like ( BSD, Linux, Mac Os [...] )​
copertina.png

Il thread si dividerà in una parte di teoria e una pratica, nella prima spiegheremo il significato di proprietario gruppo, permessi e altro
Nel secondo metteremo in atto quello imparato poco prima, inizieremo a usare comandi come chmod, chown, chgrp [...]

Linux nasce con un concetto multi-users a differenza di Windows, perciò saper gestire i permessi è importante per evitare brutte situazioni.

1 Quali sono i permessi e come posso vederli​

I permessi si dividono in tre:
  • r ( read ), permette il diritto di lettura
  • w ( write ), permette il diritto di scrittura
  • x ( exec ), permette il diritto di esecuzione
Facciamo ls -l nella shell per avere più informazioni sui file:
Bash:
[ghost@hackware ~]
% ll
total 124
drwxr-xr-x 2 ghost ghost  4096 Jan 18 16:11  Desktop
drwxr-xr-x 2 ghost ghost  4096 Jan 26 20:56  Downloads
drwxr-xr-x 2 ghost ghost  4096 Jan 25 21:34  Telegram
drwxr-xr-x 3 ghost ghost  4096 Jan 26 21:18 'VirtualBox VMs'
drwxr-xr-x 2 ghost ghost  4096 Jan 23 21:13  Wallpapers
-rw-r--r-- 1 ghost ghost 83087 Jan 27 16:48  copertina.png
drwxr-xr-x 2 ghost ghost  4096 Jan 23 14:21  iso
-rwxr-xr-x 1 ghost ghost    27 Jan 27 15:01  listener.sh
-rw-r--r-- 1 ghost ghost    85 Jan 22 19:37  readme.txt
drwxr-xr-x 3 ghost ghost  4096 Jan 23 18:15  rkit
-rw-r--r-- 1 ghost ghost     5 Jan 27 15:10  root.txt
Possiamo notare varie colonne, lasciamo perdere le ultime 5 colonne ( dimensione, mese, giorno, ora, file ) e concentriamoci sulle prime 4.

1.1 Colonna dei permessi​

Si divide in tre ed è composta da 9 ( 10 punti, ma il primo indica l'oggetto ) punti, ogni tripletta è pensata per il proprietario ( la 1° ), il gruppo ( la 2° ), tutti gli altri utenti ( la 3° )
  • Il primo elemento indica l'oggetto, se inizia con - è un file, d è una directory, l è un symlink ( ln -s src dest )
  • La prima tripletta indica l'owner, nel caso del file readme.txt può essere scritto e letto dall'owner ( ghost ) ( rw- )
  • La seconda tripletta indica il gruppo, riprendendo sempre il file readme.txt gli utenti appartenenti al gruppo ghost potranno leggere solo ( r-- )
  • La terza e ultima tripletta indica gli others ( gli altri utenti ), anche questi hanno solo permessi di lettura ( r-- )
Questo ci può tornare utile anche in altre situa, ad esempio voglio listare tutte le cartelle, faccio ls -l | grep '^d', ossia lista tutto greppando le stringhe che partono per 'd':
Bash:
[ghost@hackware ~]
% ll | grep '^d'
drwxr-xr-x 2 ghost ghost  4096 Jan 18 16:11 Desktop
drwxr-xr-x 2 ghost ghost  4096 Jan 27 18:57 Downloads
drwxr-xr-x 2 ghost ghost  4096 Jan 25 21:34 Telegram
drwxr-xr-x 3 ghost ghost  4096 Jan 26 21:18 VirtualBox VMs
drwxr-xr-x 2 ghost ghost  4096 Jan 23 21:13 Wallpapers
drwxr-xr-x 2 ghost ghost  4096 Jan 23 14:21 iso
drwxr-xr-x 3 ghost ghost  4096 Jan 23 18:15 rkit

1.2 Colonna dell'owner​

In questa colonna è specificato l'owner del file, ossia il proprietario, non è per forza il creatore, io potrei creare un file scemochilegge.txt e *chownarlo ad un altro utente, cambiando così owner ( e volendo anche gruppo ), come abbiamo detto l'owner ha permessi di scrittura e lettura, detto ciò può eliminarlo, modificarlo e leggerlo, non lo può eseguire a meno che non aggiunga il parametro x a permessi.

1.3 Colonna del group​

Questa colonna specifica il gruppo,
Anche in questo caso il gruppo si può cambiare, vale lo stesso discorso come per l'owner.
Per listare i gruppi possiamo *cattare il file /etc/group:
Bash:
[ghost@hackware ~]
% cat /etc/group
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
wheel:x:4:ghost
tty:x:5:ghost
tape:x:6:
daemon:x:7:
floppy:x:8:
disk:x:9:ghost
lp:x:10:
dialout:x:11:
audio:x:12:ghost,_bluez_alsa
video:x:13:ghost
utmp:x:14:
adm:x:15:
cdrom:x:16:
optical:x:17:
mail:x:18:
storage:x:19:
scanner:x:20:
network:x:21:ghost
kvm:x:24:
input:x:25:
plugdev:x:26:
usbmon:x:27:
nogroup:x:99:
users:x:100:
xbuilder:x:101:
_dhcpcd:x:999:
_uuidd:x:998:
dbus:x:22:
ghost:x:1000:
vboxusers:x:997:ghost
bluetooth:x:996:ghost
_bluez_alsa:x:995:
E' diviso in diverse colonne:
  • La prima specifica il nom del gruppo
  • La seconda specifica se c'è una password
  • La terza specifica l'id
  • La quarta gli appartenenti al gruppo
Ad esempio ghost fa parte dei gruppi vboxusers,bluetooth, network. audio, video, tty, disk e wheel.

2 Gestire i permessi con chmod, chown, chgrp​

Adesso vediamo come gestirli tramite i comanidi citati sopra

2.1 chmod​

Per modificare i permessi possiamo su file e cartelle possiamo usare chmod, in due sintassi differenti, ottale & simbolica:
Ottale usa i numeri da 0 a 7:
  • 0 - NULL
  • 1 - x ( exec )
  • 2 - w ( write )
  • 3 - wx ( write & exec )
  • 4 - r ( read )
  • 5 - rx ( read & exec )
  • 6 - rw ( read & write )
  • 7 - rwx ( read & write & exec )
Ad esempio se volessimo dare tutti i permessi all'owner, al gruppo e others dovremmo fare:
Bash:
chmod 777 listener.sh
Se li volessimo lasciare solo quelli di lettura:
Bash:
chmod 444 listener.sh
Se preferiamo usare la notazione simbolica:
  • a - all
  • g - group
  • o - others
  • u - owner
  • r - read
  • w - write
  • x - exec
  • + - aggiunge un permesso
  • - - leva un permesso
  • = - imposta un permesso
Stesso esempio di prima, vogliamo dare tutti i permessi:
Bash:
chmod a=rwx listener.sh
In pratica abbiao detto a chmod di dare a tuti ( a ) i permessi di scrittura, lettura ed esecuzione, se volessimo rendere uno script eseguibile dovremmo fare:
Bash:
chmod +x listener.sh
Così facendo abbiamo aggiunto il permesso di esecuzione, possiamo lanciarlo facendo ./listener.sh
Con l'opzione -R, --recursive cambi i permessi di una cartella e di tutto il suo contenuto all'interno, vale anche per tutti gli altri comandi che vedremo ( tolto usermod ).

2.2 chown, cambiare owner​

Con il comando chown si può cambiare owner ( volendo anche gruppo ) di un file/cartella, la sintassi è la seguente:
Bash:
chown [owner] file # owner
chown [owner]:[group] file # owner & group
Mettiamo caso che abbiamo creato un nuovo utente, ledzeppelin, con il comando:
Bash:
useradd -d /home/ledzeppelin -s /bin/bash ledzeppelin
Normalmente dovrebbe creare la home in automatico, ma non lo fa quindi la creiamo noi con il comando mkdir /home/ledzeppelin, dato che siamo root la cartella appena creata appartiene a root:root invece che ledzeppelin:ledzeppelin:
Bash:
drwx------ 15 ghost ghost 4096 Jan 28 13:48 ghost
drwx------  2 root  root  4096 Jan 28 13:49 ledzeppelin
per fixare questo "problema" usiamo chown:
Bash:
chown ledzeppelin:ledzeppelin /home/ledzeppelin
Ora l'owner e il gruppo sono corretti:
Bash:
drwx------ 15 ghost       ghost       4096 Jan 28 13:48 ghost
drwx------  2 ledzeppelin ledzeppelin 4096 Jan 28 13:49 ledzeppelin

2.3 chgrp, cambiare group​

chgrp consente di cambiare il gruppo, non l'owner attenzione, solo il gruppo, si potrebbe fare anche con chown, la sintassi è easy:
Bash:
chgrp [group] file
Esempio:
Bash:
chgrp root readme.txt
Il file readme.txt ora potrà essere letto da tutti gli appartenenti al gruppo root.

Uscirà un altra guida dove vedremo il SUID ( Set User ID ) e Sticky bit.

./ghost​
 
Ultima modifica:

centoventicinque

Moderatore
Staff Forum
Utente Èlite
7,441
3,202
CPU
Intel core I5 4950/ i5 3550
Dissipatore
coolermaster Mod Anonima sequestri
Scheda Madre
anonima sequestri/ p8z77le
HDD
crucial bx500 480GB+raid0 wd blue 500GB / 8Xwd red 2TB[9420I+4X seagate 2TB [intel] 2x850 pro 256GB
RAM
16GB ddr3 1600 / 16 GB ddr3 hyperx
GPU
gtx660TI 3GB / gtx 1080 TI
Audio
Azila
Monitor
40" 4k LG / asus 27"
PSU
cm masterwatt 650 / microstar 750W
Case
anonimo itek/rack 2U
OS
archlinux X68_66
Ottima Giuda, metto in rilievo !
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Concordo con centoventicinque.
Ho aggiunto il prefisso guida 💪
 
  • Mi piace
Reazioni: memset

Mario Niola

Nuovo Utente
43
9
CPU
Pentium G4500 6th Gen (Skylake)
Dissipatore
Intel LGA 1151
Scheda Madre
Gigabyte H110M-S2H
HDD
Wester Digital WD10EZEX 1 TB
RAM
Hyperx Fury DDR4 2133mhz 1x8GB
GPU
Intel HD 530 (grafica integrata)
Audio
Realtek ALC887 (audio integrato)
Monitor
Acer 22'' 1920x1080
PSU
Cooler Master 600W
Case
Cooler Master Masterbox lite 5
Periferiche
Tastiera PS2 e mouse del supermercato
Net
Fastweb
OS
Gnu/Linux Debian 10 (Buster) e Gnome 3.38

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!