Synology群晖(以下简称群晖)的NAS是个好东西,在个人、工作室、企业内都可能会有使用场景。针对企业内的使用场景,本文介绍,如何通过CLI和API实现对群晖NAS内文件夹的权限管理。
此方法落地后可以实现通过上层ERP或者OA系统向群晖NAS下发文件夹权限配置,实现流程申请
目录
- 一、群晖SynoCLI命令行
- 1、开启SSH功能
- 2、登录DSM CLI命令行
- 4、SynoCLI命令行
- 5、synoacltools命令
- 二、API接口实现
一、群晖SynoCLI命令行
群晖NAS使用的Disk Station Management(NAS管理操作系统,以下简称DSM)操作系统基于Linux开发,其中除了常见的Linux操作命令以外,还有一套独特的SynoCLI命令。
1、开启SSH功能
体验DSM的命令行,首先需要进入控制面板-终端机-开启SSH功能
2、登录DSM CLI命令行
像普通的Linux系统一样,ssh进度后可以使用sudo -s切换至root权限,本文后续的授权操作需要使用root权限执行。
4、SynoCLI命令行
Synoxxxxxx工具总共有300+个,本文不一一介绍了。
感兴趣的读者自行输入syno然后tab一下看看吧。这里面说一下:
比较坑的是,群晖没有公开太多的关于SynoCLI命令行工具的使用说明。
但是比较好的是,几乎所有的工具的help说明都很清晰明了。
例如:
synouser命令可以用于本地用户管理,其help说明中关于枚举、添加、查看、删除的参数描述都很详细。
5、synoacltools命令
synoacltools命令可以用于配置文件夹的访问权限列表。命令的help说明如下:
sh-4.3# synoacltool 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
在DSM中,常见的三种用户权限对应的ACL Perm如下:
- 完全控制:
rwxpdDaARWcCo:fd--
- 只读:
r-x---a-R-c--:fd--
- 读写:
rwxpdDaARWc--:fd--
更精细的权限配置,可以对比DSM中的权限编辑器内的权限。各位读者可以参考下述截图。
举例说明:
获取指定文件夹权限列表
synoacltool -get /volume1/bak/PRTG-core-backup/
授予用户完全控制权限synoacltool -add /volume1/bak/100MEDIA/ user:doubi@csdn.net:allow:rwxpdDaARWcCo:fd--
sh-4.3# synoacltool -get /volume1/bak/100MEDIA/ #查看文件夹权限 ACL version: 1 Archive: is_inherit,is_support_ACL Owner: [admin(user)] --------------------- [0] group::deny:rwxpdDaARWcCo:fd-- (level:1) [1] group:network-radius-nas:deny:rwxpdDaARWcCo:fd-- (level:1) [2] group:CSDN\ITgroup:deny:rwxpdDaARWcCo:fd-- (level:1) [3] group:administrators:allow:rwxpdDaARWc--:fd-- (level:1) [4] user:admin:allow:rwxpdDaARWc--:fd-- (level:1) [5] group:CSDN\domain admins:allow:rwxpdDaARWc--:fd-- (level:1) [6] user:prtgbackup:allow:rwxpdDaARWc--:fd-- (level:1) [7] user:CSDN\zhangsan:allow:r-x---a-R-c--:fd-- (level:1) sh-4.3# synoacltool -add /volume1/bak/100MEDIA/ user:doubi@csdn.net:allow:rwxpdDaARWcCo:fd-- #授予用户完全管理权限 ACL version: 1 Archive: is_inherit,has_ACL,is_support_ACL Owner: [admin(user)] --------------------- #授权成功后立刻显示更新的ACL [0] user:CSDN\doubi:allow:rwxpdDaARWcCo:fd-- (level:0) [1] group::deny:rwxpdDaARWcCo:fd-- (level:1) [2] group:network-radius-nas:deny:rwxpdDaARWcCo:fd-- (level:1) [3] group:CSDN\ITgroup:deny:rwxpdDaARWcCo:fd-- (level:1) [4] group:administrators:allow:rwxpdDaARWc--:fd-- (level:1) [5] user:admin:allow:rwxpdDaARWc--:fd-- (level:1) [6] group:CSDN\domain admins:allow:rwxpdDaARWc--:fd-- (level:1) [7] user:prtgbackup:allow:rwxpdDaARWc--:fd-- (level:1) [8] user:CSDN\zhangsan:allow:r-x---a-R-c--:fd-- (level:1)
二、API接口实现
我们的思路是,通过Django+Python+SSH的方式,对外提供API接口,本地通过Python脚本执行ssh命令。
method |
参数 |
返回值 |
synology_nas.list_synoshare Synology NAS 获取当前文件夹列表 |
空 |
返回所有共享文件夹列表 |
run_result=synology_nas.list_synouser Synology NAS 获取当前用户列表 |
空 |
返回所有用户列表 |
synology_nas.set_acl_permission Synology NAS 设置文件夹访问权限 |
dir_path 文件夹路径 username 传邮箱前缀 user_permission 设置权限 (MA所有者,RW读写,RO只读) |
权限添加成功
出问题了~~~ 备注: NAS文件夹必须设置在volume1(存储空间1)内 |
原文链接:https://blog.51cto.com/u_16213584/8062453