我們這幾年陸續在淘汰地端的基礎建設,盡可能的把服務搬上雲端,此舉不單是因為「數位轉型」的趨勢所然,而是同時考量了許多其他因素,例如各種成本降低、管理方便、安全提升,都是優點。最近我們把 Active Directory 也給移掉了,所有地端的設備開始改用 RADIUS 進行驗證,帳號則使用 Synology NAS 的 DSM (DiskStation Manager) 進行管理,因為 DSM 提供很棒的 Web UI 介面,同時又提供 CLI 介面可以批次操作,雖然功能沒有太多,但還算實用。今天這篇文章我就來說說常見的使用方式。
啟用 SSH 服務
要使用 CLI 管理整台 Synology NAS 上面的服務,首先要先啟用 SSH 服務,以下是啟用步驟:
- 點擊
Control Panel
- 點擊
Applications
→ Terminal & SNMP
- 在
Terminal
頁籤點擊 Enable SSH service
- 按下
Apply
即可啟用服務
請注意: 上圖很清楚的寫到 Note: SSH/Telnet only supports logins from accounts belonging to the administrators group. Please refer to Terminal for more details. 注意事項,只有隸屬於 administrators
群組的成員才能透過 SSH 連入裝置。
連入 SSH 介面
-
使用 ssh
命令登入 DSM
ssh admin@192.168.1.1
登入後會先遇到一個無法 chdir
的問題,這是因為 DSM 預設所有使用者都不會建立 $HOME
目錄,但這其實不影響操作:
Could not chdir to home directory /var/services/homes/admin: No such file or directory
-
使用 sudo -i
變身為 root
特權帳戶
sudo -i
-
使用 ssh-keygen
建立一張 RSA 金鑰組
ssh-keygen
-
建立 ~/.ssh/authorized_keys
授權金鑰檔,將你自己的 SSH 公開金鑰放進去即可。
步驟可參考 如何使用 RSA 金鑰組以 SSH 的方式登入 DSM? 文章
-
退出系統
exit
exit
-
重新改用 root
身份直接連入設備
ssh root@192.168.1.1
認識 syno
工具組
DSM 所有的 CLI 管理工具都放在 /usr/syno/sbin
目錄下,共有一百多個工具,工具命令的名稱大多是 syno*
開頭,不過大部分的工具程式都找不到文件,所以有些工具要大家自己摸索。
這個 /usr/syno/sbin
路徑已經預設被加入到 /etc/profile
全域啟動設定檔中,所以執行時不用特別打路徑部分。不過,只有登入到 Shell 環境才會載入 /etc/profile
全域啟動設定檔喔!如果要在 Remote Shell 中執行命令,請記得加上完整路徑,例如:ssh root@192.168.1.1 /usr/syno/sbin/synouser
adjust_kern_level synologconvert
bootup_create_volumes.sh synolog-linker
btacd synolunbackup
check_root_junior_match.sh synoluntransform
config_bootup_check.sh synomediaparserd
ddnsd synomkflvd
dhm_tool synomkthumbd
epck syno-move-coredump
esynoscheduler synonet
eunit_info synonetd
heartbeatd synonetdtool
hotplugd synonfstest
install_backup_plugin.sh synonfstop
ip-conflict-detect.sh synoovstool
refresh_cache.sh synopartition
sharingdb_move synopasswordmail
syno8021Xtool synoperfeventd
synoagentregisterd synopftest
synoapppriv_updater synopkgctl
synobootupcheck synopkghelper
syno-bootup-type-set.sh synopkicompatsync
synobtrfssnap synopoweroff
synobtrfssnapusage synopyntlmd
synocacheclient synoquota
synocachepinfiletool synoraidtool
synocachepinfiletoolha synorelayd
synocachepinfiletool-status synoroutertool
synocgid synoscgi
synocgitool synoscgi______________________
synocloudserviceauth synoservice
synoconfd synoservicecfg
synocontentextractd synoservicectl
synocrond synoservicemigrate
synodate synoshare
syno-dbus-check.sh synosharequota
synodctest synosharesnapshot
synoddnsinfo synosharesnaptool
syno_disk_log_convert synosharesnaptree
syno_disk_testlog_convert synosharesnaptree_reconstruct.sh
synodsdefault synoshutdown
synodsinfo synosnmpcd
syno-dump-core.sh synospace
syno_dvb_admin.sh synostgdisk
syno_fan_debug synostgpool
synoflashcachebootupcheck synostgsysraid
synofstool synostgvolume
synogpoclientd synostorage
synogroup synostoragecore
synohacore synostoraged
syno_hibernation_debug synosyncdctime
synoindexd synosyslogmail
synoindexplugind syno_system_dump
synoindexscand synotifyd
synoindexworkerd synotimecontrol
syno_ip_conflict_detect synotune
synoiscsitop synoupgrade
synoisns synousbmodemd
synoldapclientd synouser
syno-letsencrypt synouserdir
synologaccd synovolumesnapshot
synologand synowifid
synologconfgen synowin
雖然有許多工具沒有文件可參考,但常用的工具可找到 CLI Administrator Guide for Synology NAS [PDF] 來參考其用法。
使用者帳戶管理
你可以使用 synouser
工具來管理 DSM 上面的帳戶,而且建立速度非常快,以下是常見用法:
-
基本用法說明
synouser
使用上非常直觀,功能雖然沒有很完整,但就是很好上手!
# /usr/syno/sbin/synouser
Copyright (c) 2003-2021 Synology Inc. All rights reserved.
Usage: synouser (Version 25556)
--help
--rebuild {all|(domain Force{0|1})|(ldap Force{0|1})}
--enum {local|domain|ldap|all|domain_used}
--enumpre {local|domain|all|domain_used} prefix Caseless{0|1}
--enumsub {local|domain|all|domain_used} substr Caseless{0|1}
--get username
--getuid UID
--add [username pwd "full name" expired{0|1} mail privilege]
--modify username "full name" expired{0|1} mail
--rename old_username new_username
--setpw username newpasswd
--del username1 username2 ...
--login username pwd
--dbopen2 username
--filesetpw filename
--create_homes {domain|ldap}
-
列出所有帳戶
/usr/syno/sbin/synouser --enum local
跳過第一行,僅顯示帳戶清單
/usr/syno/sbin/synogroup --enum local | tail -n +2
-
建立帳戶
基本語法
/usr/syno/sbin/synouser --add '帳號' '密碼' '全名' 是否過期{0|1} 'email@example.com' 權限等級{0|1}
使用範例
/usr/syno/sbin/synouser --add 'xien' 'TNXZfhSP' '黃大仙Xien' 0 'xien@example.com' 0
-
變更使用者密碼
基本語法
/usr/syno/sbin/synouser --setpw '帳號' '新密碼'
使用範例
/usr/syno/sbin/synouser --setpw 'xien' 'TNXZfhSP'
-
停用帳號
基本語法
/usr/syno/sbin/synouser --modify '帳號' '全名' 是否過期{0|1} 'email@example.com'
使用範例
/usr/syno/sbin/synouser --modify 'xien' '黃大仙Xien' 1 'email@example.com'
DSM 的這個 --modify
參數非常難用,我在停用帳戶時,還一定要同時修改「全名」與「電子郵件」欄位,輸入空值還會被清空。很明顯這個 CLI 是為了 Web 介面所設計的,糟糕啊!😅
-
刪除帳號
基本語法
/usr/syno/sbin/synouser --del username1 username2 ...
使用範例
/usr/syno/sbin/synouser --del 'xien'
使用者群組管理
你可以使用 synogroup
工具來管理 DSM 上面的群組,也可以變更群組成員,執行速度非常快,但 CLI 介面設計的相當糟糕!😅
-
基本用法說明
synogroup
使用上非常直觀,功能雖然沒有很完整,但就是很好上手!
# /usr/syno/sbin/synogroup
Copyright (c) 2003-2021 Synology Inc. All rights reserved.
Usage: synogroup (Version 25556)
--help
--rebuild {all|(domain Force{0|1})|(ldap Force{0|1})}
--enum [{local|domain|ldap|all}]
--enumpre {local|domain|all} prefix Caseless{0|1}
--enumsub {local|domain|all} substr Caseless{0|1}
--get groupname
--getgid GID
--descget groupname
--descset groupname ["New Descritions"]
--add groupname username1 username2 ...
--rename old_groupname new_groupname
--member groupname username1 username2 ...
--del groupname1 groupname2 ...
--dbopen2 groupname
-
列出所有群組
/usr/syno/sbin/synogroup --enum local
跳過第一行,僅顯示群組清單
/usr/syno/sbin/synogroup --enum local | tail -n +2
-
建立群組
基本語法
/usr/syno/sbin/synogroup --add '群組名稱' 'user1' 'user2' ...
使用範例
/usr/syno/sbin/synogroup --add 'group1' 'xien' 'john' 'tom'
-
編輯群組成員
基本語法
/usr/syno/sbin/synogroup --member '群組名稱' 'user1' 'user2' ...
使用範例
/usr/syno/sbin/synogroup --member 'group1' 'xien' 'john' 'tom'
DSM 的這個 --member
參數非常難用,我原本認為在加入成員時會累加上去,結果竟然是「完整取代」所有的成員清單。例如以下範例是「錯誤」的:
/usr/syno/sbin/synogroup --member 'group1' 'xien'
/usr/syno/sbin/synogroup --member 'group1' 'john'
/usr/syno/sbin/synogroup --member 'group1' 'tom'
執行完之後,這個 group1
群組,將只會剩下一個 tom
帳號在群組內而已,驚不驚喜,意不意外,難用爆了!😅
很明顯這個 CLI 是為了 Web 介面所設計的,糟糕啊!😅
-
刪除群組
基本語法
/usr/syno/sbin/synogroup --del groupname1 groupname2 ...
使用範例
/usr/syno/sbin/synogroup --del group1
總結
在 Synology NAS 中的 DSM 提供了很多很棒的 Web UI 介面,這些針對大部分一次性的操作,提供的相當大的便利性,不用花時間學習什麼自動化技巧。
同時 DSM 也提供的 CLI 介面可以針對一些需要自動化的工作,例如批次建立帳號、日常帳號維護、群組成員維護等等,都可以透過 SSH + Shell 來達成自動化管理的目的,也可以很輕易的跟我們其他的系統進行整合,光是這點我就覺得很滿意了!👍
相關連結