12/12/2024

NAS

Synoacltool : un outil pour gérer les ACL de son NAS Synology en ligne de commande

I. Présentation

Sur les NAS Synology, il y a plusieurs outils disponibles à partir de la ligne de commande qui permettent d'effectuer des opérations au travers de scripts, plutôt que de passer par l'interface de gestion de DSM. Dans ce tutoriel, je vais vous présenter l'outil synoacltool qui est un outil en ligne de commande qui sert à gérer les permissions (ACL) sur les dossiers et fichiers, notamment pour définir les droits d'accès sur un dossier partagé sur le NAS.

Prérequis : vous devez disposer d'un accès SSH sur votre NAS Synology afin d'accéder à la ligne de commande. L'accès SSH peut être activé temporairement dans Panneau de configuration > Terminal & SNMP > Activer le service SSH. Si vous souhaitez laisser le service actif de façon permanente, pensez à changer le port d'écoute du service.

II. L'aide de synoacltool

Pour utiliser correctement l'outil synoacltool, il faut s'inspirer de l'aide accessible directement à partir de la ligne de commande. Après connexion en SSH sur le NAS, exécutez la commande suivante :

synoacltool -h

Voici l'aide complète :

Usage: synoacltool

SYNOPSIS
   synoacltool -h
   synoacltool -check PATH [ACL Perm]
   synoacltool -get PATH
   synoacltool -getace PATH
   synoacltool -get-perm PATH USERNAME
   synoacltool -add PATH [ACL Entry]
   synoacltool -replace PATH [ACL Entry Index] [ACL Entry]
   synoacltool -get-archive PATH
   synoacltool -set-archive PATH [ACL Archive Option]
   synoacltool -del-archive PATH [ACL Archive Option]
   synoacltool -del PATH [ACL Entry Index]
   synoacltool -del PATH
   synoacltool -copy PATH_SRC PATH_DST
   synoacltool -set-owner PATH [user|group] NAME
   synoacltool -set-eadir-acl PATH
   synoacltool -enforce-inherit PATH
   synoacltool [-stat|-cstat|-fstat|-lstat|-utime] PATH

   -h: show help
   -check: check acl permission of file
   -get: get syno acl of file
   -getace: get syno ACEs with uid/gid of file
   -get-perm: extract windows permission from acl or linux permission
   -add: add syno ace into file
   -replace: replace specified ace by index number
   -del: delete syno acl of file
   -get-archive: get ACL archive bit
   -set-archive: set ACL archive bit
   -del-archive: delete ACL archive bit
   -stat, -cstat, -lstat, -fstat: get stat/archive bit
   -utime: set current time into file
   -copy: copy ACL from source to destination, only works when ACL exists
   -set-eadir-acl: set ACL for EA dir
   -enforce-inherit: enforce ACL inheritance

OPTIONS
   ACL Entry Index: >= 0
   ACL Option: [inherit|single]
   ACL Archive Option: is_inherit,is_read_only,is_owner_group,has_ACL,is_support_ACL
   ACL Entry: [user|group|owner|everyone|authenticated_user|system]:name:[allow|deny]:permissions:inherit mode

   Example: user:root:allow:rwx-d---RWc--:fd--
   Example: owner:*:allow:rwx-d---RWc--:fd--

Fields
   name: user/group name
   ACL Perm: rwxpdDaARWcCo
      r: (r)ead data
      w: (w)rite data (create file)
      x: e(x)ecute
      p: a(p)pend data (create dir)
      d: (d)elete
      D: (D)elete child (only for dir)
      a: read (a)ttribute (For SMB read-only/hidden/archive/system)
      A: write (A)ttribute
      R: (R)ead xattr
      W: (W)rite xattr
      c: read a(c)l
      C: write a(c)l
      o: get (o)wner ship

    inherit mode: fdin
      f: (f)ile inherited
      d: (d)irectory inherited
      i: (i)nherit only
      n: (n)o propagate

Il faut s'inspirer de cette aide pour trouver les bonnes commandes, en fonction de ses attentes. Synology ne fournit pas d'aide supplémentaire sur l'utilisation de ce script. Pour ma part, je vais vous partager quelques exemples pour vous aider à l'utiliser, tout en sachant que l'on peut l'utiliser au travers d'un script Bash pour traiter des fichiers et dossiers par lot.

III. Exemples d'utilisation de synoacltool

A. Récupérer les ACL sur un fichier ou un dossier

Avant de chercher à modifier les ACL sur un fichier ou un dossier existant, voyons comment récupérer les ACL sur un fichier ou un dossier. Synoacltool dispose d'un paramètre nommé "-get" prévu à cet usage. Il suffit de préciser le chemin vers le fichier ou dossier, tout en sachant que vos données sont sous la racine "/volume1/".

synoacltool -get /volume1/DossierPourTests/MesDatas

La commande vous retournera un résultat semblable à celui-ci :

Synoacltool

Au-delà d'indiquer le nom du propriétaire de ce dossier, on peut voir la liste des permissions sur ce dossier.

[0] group:administrators:allow:rwxpdDaARWc--:fd-- (level:0)

Afin de vous aider à comprendre et décortiquer chaque ligne, voici quelques explications :

  • [0] : c'est le numéro d'index de l'ACL, une information importante, car pour supprimer une ACL via synoacltool, il faut préciser le numéro d'index
  • group : cette permission concerne un groupe, on peut aussi rencontrer "user" si l'autorisation est posée sur un utilisateur directement
  • administrators : nom du groupe (ou de l'utilisateur) concerné par cette ACL
  • allow : règle de type "autoriser", mais on peut rencontrer aussi "deny" pour refuser
  • rwxpdDaARWc-- : les détails de l'ACL, se référer à l'aide pour comprendre la signification de chaque lettre
  • fd-- : les détails sur l'héritage
  • (level:0) : puisque c'est le niveau 0, c'est que cette ACL est posée directement sur le dossier que l'on audit, si l'on a "level:1", "level:2", etc... Cela signifie que ce sont des droits hérités d'un dossier de niveau supérieur

B. Supprimer une ACL sur un dossier avec synoacltool

Pour supprimer une ACL sur un dossier ou un fichier, il faut préciser le chemin de l'élément et indiquer le numéro d'index de l'ACL à supprimer, sans oublier l'option "-del". Ainsi, pour supprimer l'ACL avec l'index 0 sur le dossier "/volume1/DossierPourTests/MesDatas/", il faut exécuter cette commande :

synoacltool -del /volume1/DossierPourTests/MesDatas/ 0

Dans certains cas, une erreur est retournée ("(synoacltool.c, 588)unknown error: [900]") mais la suppression de l'ACL est prise en charge malgré tout. Pour vérifier si vos modifications sont prises en charge ou pour comparer l'affichage de synoacltool avec vos permissions, n'hésitez pas à comparer l'affichage console avec l'affichage sur l'interface DSM (Propriétés > Permissions).

C. Ajouter une ACL sur un dossier avec synoacltool

Pour ajouter une permission sur un élément avec synoacltool, c'est l'option "-add" qui doit être utilisée. Plutôt que de chercher à trouver la bonne syntaxe, et bien que ce soit faisable, je vous recommande de poser l'autorisation une fois via l'interface de DSM, d'utiliser l'option "-get" pour lister les permissions afin de récupérer la valeur. Ensuite, il vous suffit d'utiliser la même syntaxe dans une commande synoacltool pour appliquer les mêmes autorisations.

Voici un exemple :

synoacltool -add /volume1/DossierPourTests/MesDatas/ user:it-connect:allow:rwxpdDaARWc--:fd--

Pour trouver la bonne valeur, j'ai simplement récupéré la valeur dans la console :

D. Supprimer les permissions héritées

Pour désactiver l'héritage sur un dossier et supprimer tous les droits pour repartir à blanc, dans l'optique de poser des nouveaux droits, il faut exécuter ces deux commandes sur l'élément cible :

synoacltool -set-archive /volume1/DossierPourTests/MesDatas/ has_ACL,is_support_ACL
synoacltool -del-archive /volume1/DossierPourTests/MesDatas/ is_inherit

Une fois ces deux commandes exécutées, il sera nécessaire de passer par DSM pour ajouter des droits ou utiliser directement synoacltool avec l'option "-add" évoquée précédemment.

E. Traitement avec une boucle et un script Bash

Nous allons voir qu'il est possible de traiter des données par lot, que ce soit pour ajouter, supprimer, modifier des droits, ou tout simplement lister les droits existants. Commençons par créer un script Bash sur un volume du NAS :

cd /volume1/homes/florian/
vi synoacltool-exemple.sh

Dans ce fichier, je vous invite à ajouter le contenu suivant :

#!/bin/bash
# Racine à inspecter
DossierSource="/volume1/DossierPourTests/"
# Répertoire cible
DossierFiltre="Photos"

# Process
for Dossier in $DossierSource
do
   find $Dossier -path "*/@eaDir" -prune -o -path "*/#recycle" -prune -o -type d -name $DossierFiltre -print | while read DossierATraiter
   do
     echo $DossierATraiter
     synoacltool -get $DossierATraiter
   done
done

Ce script va permettre de rechercher tous les dossiers avec le nom "Photos" (variable DossierFiltre) à partir de la racine "/volume1/DossierPourTests/" (variable DossierSource), de manière récursive, et à chaque fois que ce dossier est trouvé, on liste les ACL. On peut utiliser ce type de boucle pour traiter des dossiers par lot, et ici j'ai indiqué uniquement une règle "synoacltool" mais on pourrait ajouter plusieurs commandes pour réaliser plusieurs actions.

On enregistre le fichier avec "Echap" puis ":wq!" dans l'éditeur Vi et on ajoute les droits d'exécution sur le script :

chmod +x synoacltool-exemple.sh

Il ne reste plus qu'à exécuter le script :

./synoacltool-exemple.sh

On peut voir qu'à chaque fois qu'il a trouvé un dossier nommé "Photos", le script m'a listé les ACL de mon NAS :

Synoacltool exemple script

Autre script intéressant : GitHub

IV. Conclusion

Nous venons de voir comment utiliser synoacltool pour gérer les ACL de son NAS Synology à partir de la ligne de commande. Son utilisation est intéressante car on peut automatiser certaines tâches ou effectuer du traitement par lot, plutôt que de passer par l'interface de DSM.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.