Gestion des ACL sous Debian

Objectif

L’objectif de ce tutoriel est la mise en place et la gestion des ACL sous Linux. Les ACL (Access Control List, ou Liste de Contrôle d’Accès) permettent d’étendre les droits POSIX (type user:group:others) en décrivant des droits pour des utilisateurs ou groupes supplémentaires.

L’intérêt de ce système se retrouve principalement sur des serveurs, dans des contextes de travail collaboratif.

Dans l’exemple suivant, je me suis basé sur un de mes besoins: Droits sur la HomeDir standards préservés (755) et un accès web en lecture/écriture sur un répertoire des homes.

Il s’agit ici uniquement d’un exemple sur l’utilisation des ACL avec quelques notions de base. Pour aller plus loin, consultez les sources en bas de page.

Installation

Sur les noyaux récents (2.6) les ACL sont gérés.

Vous pouvez tester si le noyau accepte les ACL et si oui, sur quels de systèmes de fichiers. Pour cela, il suffit de taper la commande suivante (X.X.XXXXXXXXX représentant la version du noyau)

# grep ACL /boot/config-X.X.XXXXXXXXX

Si la commande vous retourne au minimum les lignes suivantes, (XXXX étant le type de système de fichiers sur lequel vous voulez utiliser vos ACL)

CONFIG_XXXX_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y

C’est que les ACL seront bien prises en charge. Sinon, il faudra certainement patcher et recompiler. La liste se trouve sur le site suivant: http://acl.bestbits.at/download.html

Sous Ubuntu, il faut cependant procéder à l’installation d’un paquet: acl

# apt-get install acl

Mise en place des ACL

Objectif de l’exemple

L’exemple se fera donc sur la HomeDir de l’utilisateur foo. Les droits devront rester les suivants: 755

ls -l /home/foo
drwxr-xr-x 37 foo    foo    4096 2009-07-21 23:28 test

Et cependant, l’utilisateur www-data (utilisateur du service apache) devra avoir accès en lecture et en écriture sur le répertoire /home/foo/test afin de permettre un accès web directement sur la HomeDir.

Le système de fichier utilisé est EXT3

La partition utilisée, /dev/sda2

Réalisation

Paramétrer les systèmes de fichiers au montage

La première étape consite à paramétrer pour activer les acl sur le(s) systèmes de fichiers désirés. Il faut ajouter le paramètre acl.

Si vous le souhaitez, vous pouvez faire cette modification à chaud (si le système de fichier est déjà monté)

# mount -o remount,acl /home

Et si la partition n’est pas encore montée, il faudra faire la commande suivante :

# mount -t ext3 -o defaults,acl /dev/sda2 /home

N’oubliez pas d’inscrire les modifications en « mode persistent » en modifiant le fichier /etc/fstab et en inscrivant cette ligne

/dev/sda2    /home    ext3    defaults,acl    0    0

Configuration des ACL

Les ACL sont des permissions étendues aux permissions POSIX « classiques ». Elles ne remplaceront donc pas les droits POSIX défini sur les dossiers/fichiers.

On va donc fixer à l’aide de la commande setfacl les droits de lecture/écriture/exécution à l’utilisateur www-data. Pour cela voici la commande:

# setfacl -d -Rm u:www-data:rwx /home/foo/test

Les options utilisées (Rm) sont les suivantes:

-d : Pour que les ACL soient appliquées par défaut aux nouveaux dossiers/fichiers créés.

-R : fixe les ACL de manière récursives sur le dossier.

m : Modifie les ACL sur le dossier.

La syntaxe de la définition des droits se lit de telle manière:

u: Utilisateur

www-data: Notre utilisateur

rwx: équivalent aux droits POSIX (Read / Write / eXecute)

Lorsque que l’on liste à nouveau les dossiers de /home, on peut voir apparaître le signe +

# ls -l /home/foo
drwxr-xr-x+ 37 foo    foo    4096 2009-07-21 23:28 test

Pour obtenir les ACL sur ce dossier, il suffit de lancer la commande getfacl

# getfacl /home/foo/test
# file: home/foo/test
# owner: foo
# group: foo
user::rwx
group::r-x
other::---
default:user::rwx
default:user:www-data:rwx      #effective: r-x
default:group::r-x
default:mask::rwx
default:other::---

Dans cet exemple, on peut s’apercevoir que de manière effective, l’utilisateur www-data n’aura toujours pas les droits d’écriture. la raison en est simple, les ACL n’outrepassent pas les droits POSIX. Pour remédier à cela, il faudra changer les droits POSIX sur le dossier datas/ et autoriser le groupe « foo » à écrire.

# chmod 775 /home/foo/test

De cette manière, l’utilisateur www-data peut écrire dans le dossier test.

Quelques explications

Les commandes setfacl et getfacl

La commande setfacl comprend de nombreuses options, je vous laisserais en prendre note en consultant le manuel (man setfacl), cependant certaines méritent une petite explication ici:

-m : permet d’éditer des droits

-x : permet de supprimer des droits

-d: permet de définir par défaut les ACL sur tout nouveau dossier/fichier créé sous le répertoire.

-R : permet de définir les ACL récursivement

La syntaxe des droits est similaire à POSIX:

u: pour utilisateur
g: pour groupe
o: pour others

r: pour Read (Lecture)
w: pour Write (Ecriture)
x: pour eXecute (Exécuter)

La commande getfactl ne fait que lister les ACL, les options sont donc moins importantes. Vous pouvez cependant les consulter sur la page de manuel (man getfacl).

Sources

Lea-Linux: http://www.lea-linux.org/documentations/index.php/ACL

POSIX Access Control List on LINUX: http://www.suse.de/~agruen/acl/linux-acls/online/

Et les Manuels des deux commandes bien sûr !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *