The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何使用 Synology NAS 內建的 CLI 命令列管理工具

我們這幾年陸續在淘汰地端的基礎建設,盡可能的把服務搬上雲端,此舉不單是因為「數位轉型」的趨勢所然,而是同時考量了許多其他因素,例如各種成本降低、管理方便、安全提升,都是優點。最近我們把 Active Directory 也給移掉了,所有地端的設備開始改用 RADIUS 進行驗證,帳號則使用 Synology NAS 的 DSM (DiskStation Manager) 進行管理,因為 DSM 提供很棒的 Web UI 介面,同時又提供 CLI 介面可以批次操作,雖然功能沒有太多,但還算實用。今天這篇文章我就來說說常見的使用方式。

Synology NAS DSM

啟用 SSH 服務

要使用 CLI 管理整台 Synology NAS 上面的服務,首先要先啟用 SSH 服務,以下是啟用步驟:

  1. 點擊 Control Panel
  2. 點擊 ApplicationsTerminal & SNMP
  3. Terminal 頁籤點擊 Enable SSH service
  4. 按下 Apply 即可啟用服務

DSM

請注意: 上圖很清楚的寫到 Note: SSH/Telnet only supports logins from accounts belonging to the administrators group. Please refer to Terminal for more details. 注意事項,只有隸屬於 administrators 群組的成員才能透過 SSH 連入裝置。

連入 SSH 介面

  1. 使用 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
    
  2. 使用 sudo -i 變身為 root 特權帳戶

    sudo -i
    
  3. 使用 ssh-keygen 建立一張 RSA 金鑰組

    ssh-keygen
    
  4. 建立 ~/.ssh/authorized_keys 授權金鑰檔,將你自己的 SSH 公開金鑰放進去即可。

    步驟可參考 如何使用 RSA 金鑰組以 SSH 的方式登入 DSM? 文章

  5. 退出系統

    exit
    exit
    
  6. 重新改用 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 上面的帳戶,而且建立速度非常快,以下是常見用法:

  1. 基本用法說明

    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}
    
  2. 列出所有帳戶

    /usr/syno/sbin/synouser --enum local
    

    跳過第一行,僅顯示帳戶清單

    /usr/syno/sbin/synogroup --enum local | tail -n +2
    
  3. 建立帳戶

    基本語法

    /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
    
  4. 變更使用者密碼

    基本語法

    /usr/syno/sbin/synouser --setpw '帳號' '新密碼'
    

    使用範例

    /usr/syno/sbin/synouser --setpw 'xien' 'TNXZfhSP'
    
  5. 停用帳號

    基本語法

    /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 介面所設計的,糟糕啊!😅

  6. 刪除帳號

    基本語法

    /usr/syno/sbin/synouser --del username1 username2 ...
    

    使用範例

    /usr/syno/sbin/synouser --del 'xien'
    

使用者群組管理

你可以使用 synogroup 工具來管理 DSM 上面的群組,也可以變更群組成員,執行速度非常快,但 CLI 介面設計的相當糟糕!😅

  1. 基本用法說明

    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
    
  2. 列出所有群組

    /usr/syno/sbin/synogroup --enum local
    

    跳過第一行,僅顯示群組清單

    /usr/syno/sbin/synogroup --enum local | tail -n +2
    
  3. 建立群組

    基本語法

    /usr/syno/sbin/synogroup --add '群組名稱' 'user1' 'user2' ...
    

    使用範例

    /usr/syno/sbin/synogroup --add 'group1' 'xien' 'john' 'tom'
    
  4. 編輯群組成員

    基本語法

    /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 介面所設計的,糟糕啊!😅

  5. 刪除群組

    基本語法

    /usr/syno/sbin/synogroup --del groupname1 groupname2 ...
    

    使用範例

    /usr/syno/sbin/synogroup --del group1
    

總結

在 Synology NAS 中的 DSM 提供了很多很棒的 Web UI 介面,這些針對大部分一次性的操作,提供的相當大的便利性,不用花時間學習什麼自動化技巧。

同時 DSM 也提供的 CLI 介面可以針對一些需要自動化的工作,例如批次建立帳號、日常帳號維護、群組成員維護等等,都可以透過 SSH + Shell 來達成自動化管理的目的,也可以很輕易的跟我們其他的系統進行整合,光是這點我就覺得很滿意了!👍

相關連結