Synoacltool : un outil pour gérer les ACL de son NAS Synology en ligne de commande
Sommaire
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 :
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 :
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.