IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Control d'accés als fitxers. Permisos tradicionals de Unix

Degut a que els sistemes Linux son sistemes amb multiusuari real, es necessita un sistema per protegir fitxers, el sistema de permisos.

El sistema de control d'accés al fitxers depèn més del sistema de fitxers que del sistema operatiu.

El POSIX és el sistema utilitzat per defecte en Linux, però n'hi ha d'altres com per exemple les ACL.

IMPORTANT: Com a Linux tot són fitxers, si tenim un sistema de control d'accés als fitxers, significa que tenim un sistema de control d'accés a tot el sistema.

Concepte de propietari d'un fitxer

  • Establir els permisos d'un fitxer permet determinar explícitament, qui té drets (i quin tipus de drets té) d’accés a aquest arxiu.
  • La combinació de propietari i permisos d'un fitxer, estableix el que un usuari concret pot fer amb aquest fitxer.

Hi ha dos nivells de propietari d'un fitxer:

- El propietari en si (owner)

- El grup propietari (group o group owner)

No hi poden haver dos grups que siguin propietaris d'un fitxer.

En Linux tenim tres tipus d'usuaris:

  • El propietari (owner): És l'usuari del sistema al que pertany el fitxer. Al crear un fitxer s'assigna com a usuari el nom d'usuari (login name) de l'usuari que l'ha creat.
  • El grup al que pertany el fitxer (group o group owner): Els fitxers, a més de pertànyer a un usuari, també pertanyen a un grup. Al crear un fitxer s'assigna com a grup el grup principal de l'usuari que l'ha creat.
  • La resta d'usuaris i grups (others): Qualsevol usuari o grup que no sigui el propietari o el grup del fitxer. Aquests permisos també es coneixen com a permisos per a la resta del mon (world permissions).

Definicions:

- Mode: Els drets d’accés a un arxiu s’anomenen també “mode” en Unix.

- Entitat: Cadascun dels tipus d'usuaris especificats a l'apartat anterior és conegut com entitat.

- Bit de permís: Determina el tipus de permís.

Cada entitat pot tenir 3 tipus de permis:

  • De lectura (read): indicat pel caràcter r. Aquest permís permet obrir l’arxiu i veure el seu contingut.
  • D'escriptura (write): indicat per una w. Aquest permís permet modificar el fitxer.
  • D'execució (execution): indicat per una x. Aquest permís indica si un fitxer es pot executar.


Permisos de lectura

  • Podem llegir el contingut del fitxer.
  • Podem copiar l'arxiu amb l'ordre cp a un lloc on l'usuari tingui permisos d'escriptura. La còpia la podem modificar, l'original no.
  • Mai podrem fer cap tipus de modificació del contingut del fitxer si té només permís de lectura.
  • Els permisos d'un fitxer no determinen si podem canviar-los o canviar-ne el propietari. Aquesta operació només la poden fer el propietari o el superusuari (root).
  • Es poden fer enllaços simbòlics i durs a un fitxer amb permisos de lectura però això no ens permet modificar el fitxer. Si que podem però eliminar l'enllaç (no elimina el fitxer original).
  • En directoris permet llegir només els noms dels fitxers d'aquest directori. No podem, però, consultar cap altra informació. El directori en si és visible.

Permisos d'escriptura

  • Permeten fer les següents operacions:
  • Eliminar el fitxer amb l'ordre rm.
  • Modificar els continguts del fitxer.
  • Canviar el nom o moure'l a un altre carpeta amb l'ordre mv.
  • Es poden modificar les marques de temps.

(Cal tenir en compte l'sticky bit)

  • No permeten fer les següents operacions:
  • No es poden modificar els permisos (excepte propietari o root).
  • No es pot modificar el propietari (excepte usuari root).
  • El propietari pot modificar el grup, si el grup escollit és un dels grups als que pertany l'usuari.
  • En un directori, permeten fer les següents operacions:
  • Crear nous fitxers dins del directori.
  • Esborrar fitxers (rm) o canviar el nom/moure (mv) els fitxers, encara que no sigui el propietari del fitxers a modificar i/o no tingui permisos d'escriptura.
  • Es pot modificar el sticky bit per tal de modificar aquest comportament.

Permisos d'execució

  • Només tenen tenen sentit en fitxers ordinaris o directoris. S'ignoren en altre tipus de fitxers com per exemple els dispositius.
  • No implica que sigui un executable! p. ex. es pot tenir un fitxer de configuració en text pla amb permisos d'execució, però cal evitar-ho per no dur a confusions.
  • Els directoris NO s'executen. S'utilitza el permís amb altres objectius.
  • Permet establir el directori com a directori de treball, és a dir, podem entrar-hi amb l'ordre cd.
  • Es necessiten permisos d'execució per accedir a la informació dels inodes dels fitxers del directori.
  • És necessari per cercar els fitxers i per aquesta raó sovint també s'anomena permís de cerca.

El superusuari i els permisos

Notació simbòlica

Notació binaria i notació octal

Bits especials de permisos

SUID

És l'abrevició de Set User ID.

  • S'utilitza conjuntament amb fitxers amb permisos d' execució.
  • Indica al sistema operatiu que el programa s'ha d'executar amb els permisos del propietari del fitxer i no pas amb els permisos de l'usuari que executa el fitxer.
  • Es pot utilitzar per tal d' executar fitxers com a superusuari sense ser root. El fitxer ha de pertànyer al superusuari, ser executable i tenir el bit especial d'execució SUID.
  • Aquesta opció es força utilitzada en alguns serveis i programes.
  • Els programes que s'executen d'aquesta forma són anomenats SUID root.
  • Els fitxers amb aquest permís s'indiquen amb una s al bit d'execució del propietari. (o S majúscula si no és executable).

Podem veure les aplicacions que s'utilitzen com a superusuari per defecte sense ser root amb la comanda:

$ find /bin -type f \( -perm -04000 -o -perm -02000 \)
/bin/fusermount
/bin/umount
/bin/ping6
/bin/ping
/bin/mount
/bin/su
  • Activar el SUID en directoris no té cap sentit.
  • Per seguretat, només funciona amb fitxers executables binaris.

SGID

És l'abrevició de Set Group ID.

  • És similar a SUID però estableix que el grup del programa executable és el grup del fitxer i no pas el grup de l'usuari que executa el fitxer.
  • S'indica amb una s al bit d'execució del grup.
  • Directoris: Quan el bit SGID s'estableix en un directori, els fitxers nous o directoris creats en aquest directori heretaran el grup del directori i no pas el grup de l'usuari que crea el directori o fitxer. Se sol utilitzar en carpetes compartides.

Exercici

Crear: carpeta compartida

Permisos per defecte: - rwxrwx--- root asix1 asix1 | |-- rw-r--r-- jbarcelo jbarcelo fitxer_creat_per_jbarcelo.txt

solucio:

- rwxrws--- root asix1 asix1 | |-- rw-rw---- jbarcelo asix1 fitxer_creat_per_jbarcelo.txt

o

passar la màscara per defecte 644 a 660 -> umask

Sticky bit

  • Ha tingut diferents significats durant la història de Unix.
  • A la majoria de sistemes operatius moderns (com Linux) s'utilitza per evitar que certs fitxers siguin esborrats per persones que no siguin propietàries del fitxer.
  • Quan aquest bit està present en un directori, els fitxers del directori només poden ser eliminats pels seus propietaris o pel superusuari.
  • S'indica amb una t al bit d'execució de l'entitat altres.
  • S'ignora en els fitxers. Històricament feia que l'executable seguis en memòria fen més ràpida a seva execució.

Carpeta /tmp

El directori temporal /tmp permet a qualsevol usuari emmagatzemar els seus propis arxius, però per evitar que esborri els arxius d’altres, s’ha d’activar el permís Sticky:

$ ls -ld/tmp
drwxrwxrwt 16 root root 4096 2012-04-19 13:09 /tmp

En aquesta carpeta tothom té permisos. Si no marquessim l' sticky bit, qualsevol usuari podria eliminar arxius d'altres usuaris, però quan el marquem, fem que no es puguin eliminar fitxers d'altres usuaris.

Notació octal per canviar l' sticky bit

Permisos (simbòlic) Notació binària Notació octal
--- 000 0
--t 001 1
-s- 010 2
-st 011 3
s-- 100 4
s-t 101 5
st- 110 6
stt 111 7

Enllaços simbòlics i permisos

Taula resum

Usuaris (propietaris)

5 Grups

Consultar els permisos d'un fitxer

Amb la opció ls -l mostrarem els permisos dels fitxers:

$ ls -l
total 104780
-rw-r--r--  1 joel joel         2 2011-10-24 13:23 a
drwxr-xr-x  7 joel joel      4096 2012-04-19 11:49 Baixades
drwxr-xr-x  2 joel joel      4096 2011-11-28 11:54 bin
drwx------  3 root root      4096 2012-04-16 13:18 carpeta

Els caràcters en negreta es divideixen en 4 parts:

  • Primer caràcter: és el tipus de fitxer (d per directori, - per fitxer...)
  • 3 grups de 3 caràcters: mostren els permisos (r per lectura, w per escriptura, x per executar) de cada grup (user, group, all). Si hi apareix el símbol - significa que el permís d'aquella posició no està activat. El caràcter a representa les tres entitats.

Notacions alternatives

Permisos (simbòlic) Notació binària Notació octal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Tip: Per passar a binari, la x suma 1, la w suma 2, la r suma 4.

Per a donar permisos s'utilitza la notació octal. Exemples:

  • 755 (rwxr-xr-x): El propietari ho pot fer tot i la resta llegir i executar. Permís habitual de les carpetes.
  • 644 (rw-r--r--): El propietari pot llegir i modificar i la resta només llegir. Permís habitual dels arxius.
  • 777 (rwxrwxrwx): Tots els permisos. No és segur. És la opció desesperada quan tenim problemes de permisos.
  • 000 (---------): Cap permís. No és habitual.
  • 700 (rwx------): Tots els permisos només per al propietari.

Gestionar els propietaris d'un fitxer. Ordre chown

L'ordre chown (change owner) serveix per canviar el propietari d'un fitxer.

Característiques

  • La seva sintaxi és:
$ chmod [-R] <permisos> <arxiu ...>
  • Només pot canviar el propietari d'un fitxer el superusuari del sistema (però el propietari d'un fitxer pot canviar el grup d'un fitxer sempre que assigni un grup al qual pertany).
  • Exemple (establir el propietari i grup d'un fitxer):
$ sudo chown usuari:grup fitxer
  • Exemple (establir propietari d'un fitxer):
$ sudo chown owner fitxer
  • Exemple (establir només el grup d'un fitxer):
$ sudo chown :grup fitxer
  • Exemple (establir propietari de forma recursiva):
$ sudo chown -R usuari:grup carpeta

Gestionar els permisos d'un fitxer. Ordre chmod

L'ordre chmod (change mode) serveix per modificar els permisos d'un fitxer. Característiques

  • La seva sintaxi és:
$ chmod [-R] <permisos> <arxiu ...>
  • Suporta tant la notació octal com simbòlica.
  • Només el propietari de l'arxiu i l'administrador del sistema (root) poden utilitzar-lo.

Amb chmod, podem afegir o treure permisos de la següent manera:

Notació simbòlica

  • +: per activar el permís.
  • -: per treure el permís.
  • =: per definir els tres permisos en una sola etapa per a l'entitat indicada.
  • Sintaxi: <entitat(s)>[+-=]<permís(os)>

Notació octal

  • Sintaxi:
$ sudo chmod xyz fitxer ...
  • x: permisos del propietari en octal.
  • y: permisos del grup en octal.
  • z: permisos d' altres en octal.

Exemples

  • u+x: afegeix (+) el permís d’execució (x) per al propietari (u).
  • g-w: suprimeix (-) el permís de modificació (w) per al grup (g).
  • o-rw: suprimeix (-) els permisos de lectura (r) i de modificació (w) per als altres (o).
  • ug-x: suprimeix (-) el permís d’execució (x) per al propietari (u) i el grup (g).
  • a+r: afegeix (+) el permís de lectura (r) per a totes les entitats (a).
  • u=rw: estableix (=) els permisos de lectura (r) i de modificació (w) i suprimeix el permís d’execució (x) per al propietari (u).

Canviar permisos de forma massiva

  • Sintaxi:
$ sudo chmod -R 644 carpeta
  • Hem d'anar en compte, ja que executar aquesta comanda pot tenir repercussions imprevistes segons com i on es faci. Per exemple segurament no volem aplicar els mateixos permisos a carpetes que a fitxers.

ordre find

Canviar recursivament els permissos de només els fitxers

  • Per canviar recursivament els permisos de només fitxers, utilitzem:
$ find . -type f -exec chmod 644 {} \;

Canviar recursivament els permissos de només els directoris

  • Per canviar recursivament els permisos de només directoris, utilitzem:
$ sudo find . -type d -exec chmod 755 {} \;

Ordres

chmod

umask

chown

chgrp

id

Mostra l'usuari i els grups amb els identificadors.

$ id
uid=1000(joel) gid=1000(joel) grups=1000(joel),4(adm),20(dialout),24(cdrom),46(plugdev),112(lpadmin),120(admin),122(sambashare)

groups

La comanda groups ens mostra a quins grups pertany l'usuari.

$ groups
joel adm dialout cdrom plugdev lpadmin admin sambashare

whoami