【逗老师带你学IT】Synology群晖DSM CLI API接口实现

本文介绍了如何使用群晖SynoCLI的synoacltools命令及API接口来管理NAS文件夹权限。通过开启SSH,使用synoacltools设置和查看文件夹权限,以及利用Django+Python+SSH实现API接口,可以实现自动化权限配置,适用于企业内部集成到ERP或OA系统。
摘要由CSDN通过智能技术生成

Synology群晖(以下简称群晖)的NAS是个好东西,在个人、工作室、企业内都可能会有使用场景。针对企业内的使用场景,本文介绍,如何通过CLI和API实现对群晖NAS内文件夹的权限管理。
此方法落地后可以实现通过上层ERP或者OA系统向群晖NAS下发文件夹权限配置,实现流程申请

一、群晖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命令。
Django搭建指导参考:
【逗老师带你学IT】Django+IIS+Python构建微软AD域控API管理中心

本文使用的模块已上传git
IIS-Django-MicrosoftAD_API_Center/Python_Program/Synology_cli.py

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只读)
{'Current_ACL':'Already Exist','Return_Result':'OK'}
权限已经存在,无需重复添加
{'Current_ACL':'NOT Exist and Add now','Return_Result':'OK'}
权限添加成功
{'Current_ACL':'NOT Exist','Return_Result':'Something Wrong~~~~'}
出问题了~~~
备注:
NAS文件夹必须设置在volume1(存储空间1)内
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逗老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值