In un sistema Un*x ogni dispositivo è visto come un file. Vi sono questi diversi tipi di file:
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
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
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
...
...
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).
I permessi sono di tre tipi e sono organizzati in terzetti di bit:
r)w)x)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.
Nelle directory, i permessi significano:
cd)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.
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
Sono presenti anche i seguenti bit:
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
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
(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.
-w------- e aggiungervi qualche riga.r-------- e provare ad accedervi e a leggerne i contenuti.-w------- e provare ad accedervi e a leggerne i contenuti.find tutti i programmi che hanno il bit SUID impostato.newgrp per creare file con gruppo proprietario diverso dal proprio gruppo primario.