Les systèmes Unix ont été conçus pour être des systèmes multi-utilisateurs (plusieurs utilisateurs peuvent utiliser simultanément le système), il fallait donc définir comment ces différents utilisateurs allaient interagir entre eux, que ce soit au niveau des programmes ou des fichiers.
À chaque utilisateur est associé un nombre, unique sur le système, appelé UID (User ID).
Parmi tous les utilisateurs du système, il y en a un à part, celui ayant l'UID 0, généralement appelé root, c'est l'administrateur du système. Root a tous les droits sur le système, et s'il y en a qu'il ne possède pas il peut se les octroyer. On comprend donc que seules les opérations nécessitant les permissions d'administrateur doivent être faites en tant que root, toute autre opération ``normale'' doit se faire avec un ID d'utilisateur non privilégié, même si l'on est root sur sa machine.
Les programmes exécutés sont associés au nom de l'utilisateur qui les a démarrés (il y a cependant des subtilités) et seul le propriétaire (et l'administrateur, qui peut tout faire) du processus peut le modifier.
On utilise également la notion de groupe, un groupe peut contenir
un nombre quelconque d'utilisateurs, tout utilisateur doit être au
moins membre d'un groupe (son groupe par défaut) et peut appartenir
à autant de groupes que l'administrateur voudra. Les groupes sont
repérés par un GID (Groupe ID) auquel est associé un nom de groupe.
La commande groups vous donne la liste de tous les groupes auxquels
vous appartenez.
Fort de ce qui précède, on comprend facilement qu'à chaque fichier va être associé un UID et un GID représentant le propriétaire du fichier et le groupe auquel le fichier appartient.
Dans le standard Unix, un certain nombre d'attributs sont associés aux fichiers, ces attributs sont des bits, indiquant si le fichier a cet attribut ou non.
Dans le cas des répertoires, les trois bits x ne représentent pas le droit d'exécution (sans objet pour ce type de fichier) mais le droit de lister le contenu du répertoire. Si le fichier de l'exemple précédent est un répertoire alors les membres du groupe ont le droit de lecture mais pas de listage, ils peuvent donc accéder aux fichiers contenus dans le répertoire (suivant leurs propres permissions) à condition de connaître leur nom! Il est rarement utile de donner à un répertoire les droits en lecture sans donner les droits de listage.
Ce mécanisme est souvent utilisé pour que certains programmes puissent avoir des privilèges root sans devoir accorder ceux-ci aux utilisateurs.