rhel-acls

RHEL 10 - Permissions et ACLs


Les permissions standards

Concepts

  1. Catégories d'utilisateurs
  • Utilisateur propriétaire → u
  • Groupe propriétaire → g
  • Tout autre → o
  1. Niveau de permission
  • Lecture → r4
  • Ecriture → w2
  • Exécution → x1
  1. Type de fichier
  • Fichier standard → -
  • Dossier → d
  • Lien symbolique → l
  • Périphérique d'entrée → c
  • Périphérique de type bloc → b
  • Fichier pipe (fifo) → p
  • Fichier socket → s
  1. Représentation dans le terminal
Type de fichier Permissions u Permissions g Permissions o Valeur octale Exemple
- rw- r-- r-- 644 /etc/hosts
d rwx r-x r-x 755 /var/www
l rwx rwx rwx 777 /dev/cdrom

Pratique

  1. Afficher les permissions appliquées sur un fichier

    ls -l fichier_lab.txt

    -rw-r--r--. 1 root root 0 30 oct. 09:15 fichier_lab.txt

  2. Modifier les permissions appliquées sur un fichier

    chmod 664 fichier_lab.txt
    ls -l fichier_lab.txt

    -rw-rw-r--. 1 root root 0 30 oct. 09:15 fichier_lab.txt On a ajouté les droits en écriture pour le groupe propriétaire

    chmod o-r fichier_lab.txt
    ls -l fichier_lab.txt

    -rw-rw----. 1 root root 0 30 oct. 09:15 fichier_lab.txt On a retiré les droits en lecture pour tout autre utilisateur

chmod +x script_lab.sh
ls -l script_lab.sh

-rwxr-xr-x. 1 root root 0 30 oct. 09:19 script_lab.sh On a ajouté les droits en exécution pour tous les utilisateurs

  1. Modifier l'utilisateur propriétaire ou le groupe propriétaire
    chown labuser1: fichier_lab.txt
    ls -l fichier_lab.txt

    -rw-rw----. 1 labuser1 labuser1 0 30 oct. 09:15 fichier_lab.txt On a défini l'utilisateur labuser1 comme propriétaire du fichier

chown :postgres fichier_lab.txt
ls -l fichier_lab.txt

Ou

chgrp postgres fichier_lab.txt

-rw-rw----. 1 labuser1 postgres 0 30 oct. 09:15 fichier_lab.txt On a défini le groupe postgres comme propriétaire du fichier

chown root:root fichier_lab.txt
ls -l fichier_lab.txt

-rw-rw----. 1 root root 0 30 oct. 09:15 fichier_lab.txt On a défini l'utilisateur et le groupe root comme propriétaire


Les permissions spéciales

Concepts

  • SUID → set user ID → 4000 → Le fichier s'exécute avec les droits du propriétaire du fichier
  • SGID → set group ID → 2000 → Pour les dossiers: les nouveaux fichiers héritent des permissions du groupe parent
  • Sticky Bit → 1000 → Pour les dossier: restriction sur la suppression des fichiers

Pratique

  1. Obtenir des informations sur les permissions spéciales
ls -l /usr/bin/sudo

---s--x--x. 1 root root 297752 9 juil. 02:00 /usr/bin/sudo Le fichier /usr/bin/sudo a une permission fixée à 4111 pour s'exécuter avec les droits de l'utilisateur propriétaire

ls -ld /run/log/journal/

drwxr-sr-x+ 3 root systemd-journal 60 30 oct. 08:07 /run/log/journal/ Le dossier /run/log/journal/ a une permission fixée à 2755 et les fichiers créés dans ce dossier hériteront de ses permissions

ls -ld /tmp/

drwxrwxrwt. 11 root root 4096 30 oct. 09:38 /tmp/ Le dossier /tmp/ a une permission fixée à 1777 qui détermine l'impossibilité de supprimer des fichiers dont on est pas le propriétaire

  1. Modifier les permissions spéciales
chmod 4755 script_lab.sh
ls -l script_lab.sh

-rwsr-xr-x. 1 root root 0 30 oct. 09:19 script_lab.sh _Le fichier scriptlab.sh sera exécuté avec les droits root pour tous les utilisateurs

chmod g+s dossier_lab/
ls -ld dossier_lab/

drwxr-sr-x. 2 root root 6 30 oct. 13:48 dossier_lab/ _Le dossier dossierlab/ est maintenant défini avec un SGID

chmod 1777 sticky_dir/
ls -ld sticky_dir/

drwxrwxrwt. 2 root root 6 30 oct. 13:54 sticky_dir/ _Le dossier stickydir/ est maintenant défini avec un StickyBit

Si le marqueur de permission spéciale apparaît en majuscule: cela signifie une incohérence avec les permissions en exécution


Umask

Concept

User File Creation MASK - Le masque du mode de création de fichiers par l'utilisateur Permet de définir des droits d'accès par défaut pour l'ensemble des fichiers et des dossiers créés

  • Ce masque se calcule par soustraction

Permissions fichier standard → 666 moins umask 022644 Permissions dossier standard → 777 moins umask 022755

umask

0022 → il s'agit du umask par défaut pour tous les utilisateurs

Pratique

  • Modifier son umask temporairement

    su - labuser1
    umask 077
    touch testumask.txt
    ls -l testumask.txt

    -rw-------. 1 labuser1 labuser1 0 30 oct. 14:44 testumask.txt L'utilisateur labuser1 a modifié son umask jusqu'à sa prochaine déconnexion

  • Modifier son umask de manière persistente

su - labuser1
vim ~/.bashrc

Ajouter une ligne umask avec la valeur choisie umask 077 par exemple

touch testumask2.txt
ls -l testumask2.txt

-rw-------. 1 labuser1 labuser1 0 30 oct. 14:52 testumask2.txt L'utilisateur labuser1 a modifié son umask de manière persistente

  • Modifier l'umask pour tous les nouveaux utilisateurs créés

    vim /etc/login.defs

    Modifier la ligne UMASK 022 par la définition voulue UMASK 027 par exemple

  • Vérification

    useradd umaskuser
    su - umaskuser
    touch fichier_test.txt
    ls -l fichier_test.txt 

    -rw-r-----. 1 umaskuser umaskuser 0 30 oct. 15:07 fichier_test.txt Le nouvel utilisateur umaskuser a un umask défini à 027


Les ACLs

Les ACL nous permettent d'appliquer un ensemble d'autorisations plus spécifique à un fichier ou un dossier sans (nécessairement) modifier le propriétaire et les autorisations de base

2 commandes essentielles:

  • getfacl → pour afficher les ACLs
  • setfacl → pour définir les ACLs

Créer un contexte pour le lab

  • Un dossier /root/labacl/ avec les permissions 770
  • Un fichier _/root/labacl/fichieracl1 avec les permissions 700
  • Un fichier _/root/labacl/fichieracl2 avec les permissions 700
  • Un utilisateur labuser1 membre du groupe groupallow
  • Un utilisateur labuser2 membre du groupe groupdeny
    ls -la /root/labacl/
    total 4
    drwxrwx---.  2 root root   46 30 oct.  16:13 .
    dr-xr-x---. 11 root root 4096 30 oct.  15:54 ..
    -rwx------.  1 root root    0 30 oct.  15:58 fichier_acl1
    -rwx------.  1 root root    0 30 oct.  16:13 fichier_acl2

Définition des ACLs à appliquer dans le lab

  1. Permissions pour les groupes
    • Donner les permissions en lecture, écriture et exécution sur le dossier /root/labacl/ au groupe groupallow
    • Donner les permissions en lecture et exécution de manière récursive sur le dossier /root/labacl/ au groupe groupdeny
  2. Permissions pour les utilisateurs
    • Donner les permissions en lecture, écriture et exécution à l'utilisateur labuser1 sur le fichier _fichieracl1
    • Donner les permissions en lecture uniquement à l'utilisateur labuser1 sur le fichier _fichieracl2
  3. Vérifications
    • Afficher les ACLs en place pour le dossier /root/labacl/
    • Afficher les ACLs en place pour les fichiers _fichieracl1 et _fichieracl2

Mise en pratique

  1. Permissions pour les groupes

    setfacl -m g:groupallow:rwx /root/labacl/
    setfacl -R -m g:groupdeny:rx /root/labacl/
  2. Permissions pour les utilisateurs

    setfacl -m u:labuser1:rwx /root/labacl/fichier_acl1
    setfacl -m u:labuser1:r /root/labacl/fichier_acl2
  3. Vérifications

    getfacl /root/labacl/
    getfacl : suppression du premier « / » des noms de chemins absolus
    # file: root/labacl/
    # owner: root
    # group: root
    user::rwx
    group::rwx
    group:groupallow:rwx
    group:groupdeny:r-x
    mask::rwx
    other::---
    getfacl /root/labacl/fichier_acl1 /root/labacl/fichier_acl2
    getfacl : suppression du premier « / » des noms de chemins absolus
    # file: root/labacl/fichier_acl1
    # owner: root
    # group: root
    user::rwx
    user:labuser1:rwx
    group::---
    group:groupdeny:r-x
    mask::rwx
    other::---
    # file: root/labacl/fichier_acl2
    # owner: root
    # group: root
    user::rwx
    user:labuser1:r--
    group::---
    group:groupdeny:r-x
    mask::r-x
    other::---

Supprimer les ACLs en place

  • Pour supprimer les ACLs d'un utilisateur sur un fichier

    setfacl -x u:labuser1 /root/labacl/fichier_acl2
  • Pour supprimer les ACLs d'un groupe sur un dossier

    setfacl -x g:groupdeny /root/labacl/
  • Pour supprimer toutes les ACLs définies sur un fichier

    setfacl -b /root/labacl/fichier_acl1
  • Vérification sur un dossier de manière récursive

    getfacl -R /root/labacl/
    getfacl : suppression du premier « / » des noms de chemins absolus
    # file: root/labacl/
    # owner: root
    # group: root
    user::rwx
    group::rwx
    group:groupallow:rwx
    mask::rwx
    other::---
    # file: root/labacl//fichier_acl1
    # owner: root
    # group: root
    user::rwx
    group::---
    other::---
    # file: root/labacl//fichier_acl2
    # owner: root
    # group: root
    user::rwx
    group::---
    group:groupdeny:r-x
    mask::r-x
    other::---

Sources principales:


Fiches RHCSA