Permessi su file e directory

Loris Tissino

30 giugno 2009

Tipi di file

In un sistema Un*x ogni dispositivo è visto come un file. Vi sono questi diversi tipi di file:

Tipi di file (2)

Con ls -l la prima colonna dell'output mostra il tipo di file. Si veda il seguente esempio:

$ ls -ld /etc/passwd /dev/hda /dev/lp0 /home /etc/rc0.d/K01gdm \
         /usplash_fifo /dev/log
brw-rw----  1 root disk 3, 0 2007-12-02 09:23 /dev/hda
srw-rw-rw-  1 root root    0 2007-12-02 09:24 /dev/log
crw-rw----  1 root lp   6, 0 2007-12-02 09:24 /dev/lp0
-rw-r--r--  1 root root 2272 2007-11-06 20:42 /etc/passwd
lrwxrwxrwx  1 root root   13 2006-09-06 18:49 /etc/rc0.d/K01gdm -> ../init.d/gdm
drwxr-xr-x 14 root root 4096 2007-11-06 20:42 /home
prw-r-----  1 root root    0 2006-09-07 21:49 /usplash_fifo

Tipi di file -- stat

Informazioni specifiche sui file si possono ottenere con stat:

$ stat /dev/lp0  File: `/dev/lp0'
  Size: 0               Blocks: 0          IO Block: 4096   file speciale a caratteri
Device: dh/13d  Inode: 15020       Links: 1     Device type: 6,0
Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (    7/      lp)
Access: 2007-12-02 09:24:19.880479329 +0100
Modify: 2007-12-02 09:24:19.880479329 +0100
Change: 2007-12-02 09:24:19.880479329 +0100

$ stat /dev/hda
  File: `/dev/hda'
  Size: 0               Blocks: 0          IO Block: 4096   file speciale a blocchi
Device: dh/13d  Inode: 7552        Links: 1     Device type: 3,0
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)
Access: 2007-12-02 09:24:27.544626181 +0100
Modify: 2007-12-02 09:23:58.860390973 +0100
Change: 2007-12-02 09:24:12.253154183 +0100

Tipi di file -- find

Si possono cercare file di un determinato tipo con find:

$ find / -type c 2> /dev/null
/lib/udev/devices/net/tun
/lib/udev/devices/ppp
/lib/udev/devices/kmem
/lib/udev/devices/console
/lib/udev/devices/null
...
...

Proprietari

Ogni file è di proprietà di un determinato utente e di un determinato gruppo.

I permessi sul file sono relativi all'utente proprietario e al gruppo proprietario.

Root può cambiare il proprietario di un file con chown.

Un utente può cambiare il gruppo proprietario di un file con chgrp (scegliendo tra i gruppi a cui appartiene)

$ ls -l unfile 
-rw-r--r-- 1 loris jasiu 0 2007-12-02 11:31 unfile

$ id
uid=1000(loris) gid=1004(jasiu) gruppi=4(adm),6(disk),20(dialout),21(fax),24(cdrom),25(floppy),26(tape),
29(audio),30(dip),40(src),44(video),46(plugdev),104(lpadmin),105(scanner),128(admin),1004(jasiu)

$ chgrp audio unfile
$ ls -l unfile 
-rw-r--r-- 1 loris audio 0 2007-12-02 11:31 unfile

Sono possibili comandi ricorsivi e abbreviati (vedere man page).

Permessi

I permessi sono di tre tipi e sono organizzati in terzetti di bit:

Ci sono tre terzetti, riferiti al proprietario, al gruppo proprietario, agli altri.

$ ls -l silence 
-rwxr-xr-- 1 loris audio 168 2007-12-02 14:21 silence

Il file "silence" è leggibile, scrivibile ed eseguibile dal suo proprietario, leggibile ed eseguibile dagli appartenenti al gruppo audio, solo leggibile dagli altri utenti del sistema.

Permessi sulle directory

Nelle directory, i permessi significano:

Immaginandosi una directory come una tabella contenente i nomi dei file e i relativi i-node, leggere una directory significa poter scorrere l'elenco dei nomi, mentre scrivere in una directory significa poter aggiungere, modificare o eliminare righe nella tabella.

Il permesso di esecuzione consente di accedere alla parte della tabella contenente gli i-node.

Priorità delle appartenenze

I permessi vengono valutati a partire dal proprietario. Se si è proprietari di un file e quel file non è leggibile dal proprietario ed è leggibile dal gruppo cui si appartiene, quest'ultima cosa non viene tenuta in considerazione.

$ id
uid=1000(loris) gid=1004(jasiu)
...

$ ls -l documento 
----r----- 1 loris jasiu 99 2007-12-02 14:29 documento

$ cat documento 
cat: documento: Permesso negato

Bit SUID, SGID e Sticky

Sono presenti anche i seguenti bit:

Chmod con modalità simbolica o numerica

Il comando chmod può essere usato in modalità simbolica (assoluta o relativa) o numerica.

$ chmod 777 unfile 
$ ls -l unfile 
-rwxrwxrwx 1 loris jasiu 0 2007-12-02 15:08 unfile

$ chmod o-w unfile
$ ls -l unfile 
-rwxrwxr-x 1 loris jasiu 0 2007-12-02 15:08 unfile

$ chmod g=rx unfile
$ ls -l unfile 
-rwxr-xr-x 1 loris jasiu 0 2007-12-02 15:08 unfile

UMask

Normalmente, i file vengono creati dai programmi con permessi 666 e le directory con permessi 777. L'impostazione di una umask permette di decidere quali permessi sottrarre a quelli standard.

Ad esempio:

$ umask 0
$ touch file1
$ mkdir dir1
$ umask 22
$ touch file2
$ mkdir dir2
$ umask 77
$ touch file3
$ mkdir dir3
$ ls -ld dir* file*
drwxrwxrwx 2 loris jasiu 4096 2007-12-02 14:50 dir1
drwxr-xr-x 2 loris jasiu 4096 2007-12-02 14:51 dir2
drwx------ 2 loris jasiu 4096 2007-12-02 14:51 dir3
-rw-rw-rw- 1 loris jasiu    0 2007-12-02 14:50 file1
-rw-r--r-- 1 loris jasiu    0 2007-12-02 14:51 file2
-rw------- 1 loris jasiu    0 2007-12-02 14:51 file3

Altri permessi

(rinvio) Nella presentazione sulle autorizzazioni verranno introdotti altri permessi, basati su bit speciali dei file system ext2 ed ext3 e sulle ACL (access control list). Inoltre, verrà introdotto il meccanismo delle deleghe, che può essere usato per consentire determinate operazioni (sui file, ma non solo) ad alcuni utenti.

Esercizi

  1. Creare un file con permessi -w------- e aggiungervi qualche riga.
  2. Creare una directory con permessi r-------- e provare ad accedervi e a leggerne i contenuti.
  3. Creare una directory con permessi -w------- e provare ad accedervi e a leggerne i contenuti.
  4. Provare lo scenario di directory condivisa con sticky bit impostato.
  5. Provare lo scenario di directory condivisa e SGID bit impostato e gruppi primari di appartenenza diversi
  6. Cercare con find tutti i programmi che hanno il bit SUID impostato.
  7. Creare un file fifo e, da due terminali diversi, usarlo per fare comunicare tra loro due processi.
  8. Provare il comando newgrp per creare file con gruppo proprietario diverso dal proprio gruppo primario.