Sistema de permisos del Unix & umask:

Per a poder administrar la seguretat en un sistema unix cal tindre molt clar com funcionen les proteccions dels sistemes de fitxers del unix. Les proteccions es basen en un sistema força simple. Disposem de drets del propietari del fitxer (u), del grup al que pertany el fitxer (g) i els drets aplicables a la resta d'usuaris (o).

Els drets que es concedeixen o deneguen son; lectura (r), escriptura (w) i execució (x). I la seva aplicació en els diferents tipus de fitxers s'indica en la taula següent:

Taula dels drets d'acces del unix
r (llegir) w (escriure) x (executar)
fitxers Es pot examinar el contingut
more, cat, lp
Es pot examinar el contingut
vi
Es pot utilitzar com a comanda
DirectorisEs pot examinar el contingut
ls
Es pot modificar el contingut
rm,cp,mv
Es possible entrar-hi
cd

Màscara per defecte. Umask

Un fitxer es crea sempre segons diu el valor de la màscara d'usuari umask, en cas de que l' usuari no hagi definit cap màscara de proteccions propia s'utilitzarà la de defecte del sistema. Les opcions per defecte es troben a /etc/default/login en Solaris 2.x i IRIX 5.x i es poden controlar desde els fitxers de configuració de la shell.

Umask indica amb un nombre octal codificat binari de 3 digits quins son els drets d'accés per l'usuari (u) amb el tercer dígit, pel grup (g) amb el segón dígit, i per la resta del mon (o) amb el pimer. Per exemple `umask 26' provoca la creació de fitxers amb els drets d'accés "rw- r-- ---".

Càlcul d'umask.

Exemple: volem obtindre uns permisos per defecte tals com: rw-r-----
  110 100 000          (rw- r-- --- en binari)
  XOR 
  110 110 110          (666)
  ---------------
  00 010 110           (026 en octal codificat binari)
Cal tindre en compte que tot i que una determinada mascarà tingui assignats drets "x", al crear un fitxer no se li aplicaran aquests drets a menys que sigui un directori o el resultat d'una compilació. La funció inversa, que a partir d'una màscara fa un XOR per trobar els drets d'accés a assignar, es calcula amb 666 pels fitxers plans i amb 777 en el cas de directoris.

Si "toquem" un fitxer amb la comanda touch, se li actualitzarà la data d'última modificació i accés, i els drets d'accés quedaran segons umask.

Assignació explícita de drets d'accés. Chmod També és possible canviar els drets d'accés d'un fitxer o directori directament. Es faria amb la comanda chmod. És molt recomenable donar-li una mirada a la pàgina de manual d'aquesta comanda ja que conté una explicació detallada dels diferents permisos del unix.

Exemples:

   # chmod g=rw a.dat     (-???rw-???)
   # chmod g+w dades      (-????w????)
   # chmod o-x a.exe      (treure el dret d'execució per la resta)
   # chmod 766 b.dat      (-rwxrw-rw-)
   # chmod -R 640 a.dir   (-rw-r----- per tots els fitxers del directori)

Diferència entre umask i chmod

No s'ha de confondre el que significa "umask 26" amb "chmod 26"

Exemple:

   sol{48} ~ : umask 26
   sol{51} ~ : touch a.b
   sol{52} ~ : ls -l a.b
   -rw-r-----   1 root            0 Mar 29 09:38 a.b
   sol{53} ~ : chmod 26 a.b
   sol{54} ~ : ls -l a.b
   -----w-rw-   1 root            0 Mar 29 09:38 a.b

Canvi de propietari i grup d'un fitxer. Chown i chgrp

Es possible canviar el propietari d'un determinat fitxer amb la comanda chown i el grup amb la comanda chgrp. Però sols el propietari del fitxer o el super-usuari poden utilitzar aquestes comandes.

També és possible canviar propietari i grup directament desde la comanda chown utilitzant el format

  chown loginname.grup fitxer
OSF/1 3.x també acepta el format

  chown loginname:grup fitxer
H4>Algorisme de la llista d'accés dels drets d'accés en unix En un cas general, els drets s'apliquen com una llista d'accés que segueix l'algorisme que es descriurà a continuació. En tot cas, encara que s'estigui totalment segur de com actuarà una determinada protecció sobre un fitxer o directori, mai estarà de més comprovar-ho.

   SI (l'usuari és el propietari) LLAVORS
       # aplicar drets de propietari
       SI (usuari te dret) LLAVORS
           executar comanda
       FSI
   SINO SI (grup coincideix) LLAVORS
       # aplicar drets de grup
       SI (grup te dret) LLAVORS
           executar comanda
       FSI
   SINO # aplicar drets de la resta del mon
       SI (un altre usuari te dret) LLAVORS
           executar comanda
       FSI
   FSI

Setuid (s)

Es un permis especial, aplicable sovint sols als fitxers executables, pel qual s'aconsegueix que si un procés qualsevol executa una comanda marcada amb bit setuid, aquest procés executa la comanda amb els drets que tindria el propietari del fitxer. Això es imprescindible per a poder utilitzar comandes de sistema que necessiten accedir a fitxers o dispositius protegits.

Exemple d'utilització de setuid:

   %ls -lg /bin/passwd 
   -r-sr-sr-x   3 root     sys         15688 Oct 25 12:10 /bin/passwd
Per marcar un fitxer amb setuid tenim dues opcions, assignar directament la "s" o sumar 4000 al codi octal dels permisos que ja tenia en el cas de setuid per usuari, i 20#0 si es tracta d'un setuid de grup. En aquest cas # ha de ser 7, 5, 3 o 1.

Exemple d'assignacions de setuid:

   -rw-r-x--x 1 sanroma  scc             4 Mar 17 17:20 a.dat
   % chmod u+s a.dat
   -rwsr-x--x 1 sanroma  scc             4 Mar 17 17:20 a.dat
   
   sol{59} ~ : chmod 775 a.dat
   -rwxrwxr-x   1 sanroma         0 Mar 29 09:38 a.dat
   sol{61} ~ : chmod 4775 a.dat
   -rwsrwxr-x   1 sanroma         0 Mar 29 09:38 a.dat
   sol{63} ~ : chmod 2775 a.dat
   -rwxrwsr-x   1 sanroma         0 Mar 29 09:38 a.dat
   sol{65} ~ : chmod 6775 a.dat
   -rwsrwsr-x   1 sanroma         0 Mar 29 09:38 a.dat

Locking bit (l)

Si de manera similar al cas del setuid, sumem un valor 20#0 utilitzant els valors 2,4, o 6 obtenim el bit "l", el qual ens dona exclusió mútua sobre el fitxer. Sovint es representa aquest bit amb una S majúscula.

Exemple:

   sol{27} ~ : chmod 2020 a.a
   sol{28} ~ : ls -lg a.a
   -----wS---   1 sanroma  scc             0 May 20 17:03 a.a

Sticky bit (t)

És aplicable sovint sols a directoris. La major part dels unix, si detecten un bit "t" a un fitxer que no és directori, simplement l'ignoren.

Quan un directori té activat el sticky bit i té dret d'escriptura, per tal que qualsevol fitxer o directori intern pugui ser borrat o canviat de nom, cal que alguna de les següents condicions sigui certa

Exemple: suposem que ho executa l'usuari user1 de grup grup1

   % ls -lgd a.dir
   drwxr-x---   2 sanroma  scc           512 Mar 17 17:31 a.dir/
   %chmod 1777 a.dir
   % ls -lgd a.dir
   drwxrwxrwt   2 sanroma  scc      512 Mar 17 17:31 a.dir/
Un exemple d'utilització de sticky bit en el sistema operatiu és el cas del directori /tmp. Un directori que ha de poder ser utilitzat per qualsevol procés del sistema, sigui quin sigui el uid del procés. Tothom ha de poder-hi escriure, però no interessa que un determinat procés pugui veure o modificar els fitxers temporals d'un altre usuari.

Exemple dels permisos de /tmp:

   % ls -lgd /tmp
   drwxrwxrwt   8 sys      sys      2560 Mar 16 19:32 /tmp/
   % ls -lg /tmp
   ....
   -rw-------   1 auto     bio      1527 Mar 17 17:45 prova_sticky.bit
   ...
   % more /tmp/prova_sticky.bit
  /tmp/prova_sticky.bit: Permission denied