SaLUG! @ Manifatture KNOS
09 Febbraio 2015
In un sistema Unix, gli utenti e i gruppi vengono utilizzati per regolare l'accesso alle varie risorse del sistema e degli utenti.
Ad ogni utente e gruppo il sistema associa un identificativo numerico:
- UID: User ID
- GID: Group ID
whoami
e le variabili d'ambiente UID
e GID
$ whoami
bob
$ echo $UID
1000
$ echo $GID
1000
getent
$ getent passwd
...
$ getent passwd bob
...
$ getent group
...
$ getent group bob
- molti utenti si troveranno in un omonimo gruppo
- con getent e' possibile identificare un utente e un gruppo anche a partire dall'identificativo numerico
ls -l
$ ls -l /etc/profile
...
$ cp /etc/profile tmpfile
$ ls -l tmpfile
...
Su unix sono disponibili tre tipologie di permesso:
- r: read
- w: write
- x: execute
Il permesso di lettura consente:
- su un file: la lettura di metadata e contenuto
- su una directory: visualizzare la lista dei file contenuti (ma non di leggere i metadata o il contenuto dei file presenti nella directory)
Il permesso di scrittura consente:
- su un file: la modifica dei metadata e contenuto
- su una directory: rinominare, creare e rimuovere file
Il permesso di esecuzione consente:
- su un file: eseguirlo come applicazione (sia in caso di script che di eseguibili compilati)
- su una directory: accesso al contenuto dei file e dei suoi metadata se ne e' noto il nome (ma non consente di visualizzare la lista dei file contenuti)
ls -l
$ mkdir test
$ cp /etc/lsb-release test/
$ ls -l test
...
$ ls -ld test
...
la colonna rwxrwxr-x contiene gli access mode bits
chmod
$ chmod a-x test
$ ls -l test
$ chmod 666 test
$ ls -l test
chmod supporta sia una sintassi mnemonica ed una ottale:
- sintassi mnemonica: a-x (rimuovi esecuzione a tutti) o ug+r (aggiungi lettura ad utente e gruppo)
- sintassi ottale: 777 (utente rwx, gruppo rwx, altri rwx)
root e' un utente con
- UID e GID uguali a
"0"
- privilegi di amministratore
getent
$ getent passwd root
...
$ getent group root
...
$ su root
...
$ su root -c 'COMMAND ARGS'
...
su richiedera' la password di root per autorizzare la richiesta
$ sudo su
...
$ sudo bash
...
$ sudo COMMAND ARGS
- sudo richiedera' la password dell'utente per autorizzare la richiesta
- l'utente dovra' essere autorizzato mediante la configurazione /etc/sudoers e /etc/sudoers.d
- la password corretta garantira' un token valido per un tempo limitato
In un sistema operativo multitasking, i Processi rappresentano le attivita' in esecuzione
Un processo e' un istanza di esecuzione di una programma, ed e' rappresentato in spazio kernel da una struttura dati (in Linux chiamata process descriptor) organizzatate in Circular Linked List.
che conterra' le informazioni necessarie allo scheduler, tra queste informazioni troveremo
- PID: identificativo numerico del processo
- address space: informazioni sulle aree di memoria allocate e il loro utilizzo (codice o dati)
- threads: stato delle esecuzioni (e.g. RUNNING, INTERRUPTIBLE/UNINTERRUPTIBLE, STOPPED...)
- resources descriptions: descrittori delle risorse in uso (e.g. l'insieme dei file aperti)
- parent process: collegamento al processo padre
- children: collegamenti ai processi figli
anche i processi (come gli inode) sono collegati tra loro in una struttura gerarchica ad albero
che ha origine nel processo con PID 1
(che sara' il processo che il kernel avviera' alla fine del suo processo di boot)
$ pstree
...
$ pstree -p
...
un oggetto del sistema operativo a cui sono assegnate tutte le risorse di sistema necessarie per l'esecuzione del programma, tranne la CPU
un oggetto del sistema operativo, associato ad un processo, a cui e' assegnata la risorsa CPU per l'esecuzione del programma
$ ps aux
...
- a ed x visualizzano tutti i processi in esecuzione sul sistema (quelli lanciati dal terminale in uso e tutti gli altri)
- u visualizza informazioni orientate alla lettura da parte utente (ad esempio visualizza i campi %MEM e %CPU)
- ps -eLf visualizzera' anche le informazioni sui thread
$ top
...
top -H per monitorare lo stato dei singoli thread
La shell puo' lanciare processi in foreground o in background.
&
$ man ls &
...
$ ps aux
...
$ ps axjf
...
$ fg