Linux és definitivament un sistema multiusuari, així doncs és necessari proporcionar un sistema de permisos per controlar el conjunt d'operacions autoritzades en fitxers i directoris, que inclou tots els recursos i dispositius del sistema (en un sistema Unix, qualsevol dispositiu està representat per un fitxer o directori). Aquest principi és comú a tots els sistemes Unix, però un recordar-lo sempre és útil, especialment perquè hi ha alguns usos avançats interessants i relativament desconeguts.
9.3.1. Owners and Permissions
Cada fitxer o directori té permisos específics per a tres categories d'usuaris:
el propietari (simbolitzat amb la lletra u
d'usuari);
el grup propietari (simbolitzat per la lletra g
de grup), que representa tots els membres del grup;
els altres (simbolitzat per la lletra o
de l'anglès «other» o “altres”).
Three basic types of rights can be combined:
lectura (representat por la lletra r
de «read», llegir en anglès);
escriptura (o modificació, representat amb la lletra w
de «write», escriure en anglès);
execució (representat amb la lletra x
d'«eXecute»: executar en anglès).
En el cas d'un arxiu, aquests permisos es poden entendre fàcilment: l'accés de lectura permet llegir-ne el contingut (incloent-hi la còpia), l'accés d'escriptura permet modificar-lo, i l'accés d'execució permet executar-lo (que només funcionarà si és un programa).
Un directori es gestiona de manera diferent. L'accés de lectura dona dret a consultar la llista de les seves entrades (fitxers i directoris), l'accés d'escriptura permet crear-hi o suprimir fitxers, i l'accés d'execució permet creuar-lo (especialment per accedir-hi amb l'ordre cd
). Poder creuar un directori sense poder llegir-lo dona permís per accedir a les entrades que es coneixen pel seu nom, però no per a trobar-les si no se'n coneix l'existència o el nom exacte.
Tres ordres controlen els permisos associats a un fitxer:
chown usuari fitxer
canvia el propietari del fitxer;
chgrp grup fitxer
canvia el grup propietari;
chmod permisos fitxer
canvia els permisos del fitxer.
Hi ha dues maneres de representar els permisos. Entre elles, la representació simbòlica és probablement la més fàcil d'entendre i recordar. Es tracta dels símbols de les lletres esmentats anteriorment. Podeu definir els drets de cada categoria d'usuaris (u
/g
/o
), establint-los explícitament (amb=
), afegint-los (+
), o traient-los (-
). Així, la fórmula u=rwx,g+rw,o-r
dona al propietari permisos de lectura, escriptura i execució, afegeix permís de lectura i d'escriptura per al grup propietari, i elimina el permís de lectura per a altres usuaris. Els permisos no alterats per l'addició o substracció en una ordre d'aquest tipus romanen igual. La lletra a
, de «all» en anglès (tot), cobreix les tres categories d'usuaris, de manera que a=rx
concedeix a les tres categories els mateixos permisos (lectura i execució, però no escriptura).
La representació numèrica (octal) associa a cada permís amb un valor: 4 per a la lectura, 2 per a l'escriptura, i 1 per a l'execució. Associem cada combinació de permisos amb la suma de les xifres. Cada valor s'assigna a les diferents categories d'usuaris posant-los en l'ordre habitual (propietari, grup, altres).
For instance, the chmod 754 file
command will set the following rights: read, write and execute for the owner (since 7 = 4 + 2 + 1); read and execute for the group (since 5 = 4 + 1); read-only for others. The 0
(zero) means no rights; thus chmod 600 file
allows for read/write rights for the owner, and no rights for anyone else. The most frequent right combinations are 755
for executable files and directories, and 644
for data files.
Per representar els permisos especials es pot prefixar un quart dígit a aquest nombre segons el mateix principi, on els bits setuid
, setgid
i sticky
són 4, 2 i 1 respectivament. chmod 4754
associarà el bit setuid
amb els permisos descrits prèviament.
Tingueu en compte que l'ús de la notació octal només permet establir simultàniament tots els permisos a un fitxer; no es pot utilitzar simplement per afegir un nou permís, com ara l'accés de lectura per al propietari del grup, ja que cal tenir en compte els drets existents i calcular el nou valor numèric corresponent.
9.3.2. ACLs - Access Control Lists
Many filesystems, e.g. Btrfs, Ext3, Ext4, JFS, XFS, etc., support the use of Access Control Lists (ACLs). These extend the basic features of file ownership and permission, described in the previous section, and allow for a more fine-grained control of each (file) object. For example: A user wants to share a file with another user and that user should only be able to read the file, but not write or change it.
For some of the filesystems, the usage of ACLs is enabled by default (e.g. Btrfs, Ext3, Ext4). For other filesystems or older systems it must be enabled using the acl
mount option - either in the mount
command directly or in /etc/fstab
. In the same way the usage of ACLs can be disabled by using the noacl
mount option. For Ext* filesystems one can also use the tune2fs -o [no]acl /dev/device
command to enable/disable the usage of ACLs by default. The default values for each filesystem can usually be found in their homonym manual pages in section 5 (filesystem(5)) or in mount(8).
After enabling ACLs, permissions can be set using the setfacl(1) command, while getfacl(1) allows one to retrieve the ACLs for a given object or path. These commands are part of the acl package. With setfacl
one can also configure newly created files or directories to inherit permissions from the parent directory. It is important to note that ACLs are processed in their order and that an earlier entry that fits the situation has precedence over later entries.
If a file has ACLs set, the output of the ls -l
command will show a plus-sign after the traditional permissions. When using ACLs, the chmod
command behaves slightly different, and umask
might be ignored. The extensive documentation, e.g. acl(5) contains more information.