Systemd-homed是Systemd v245加入的一個功能,提供一種不依賴Linux主機的機制,來管理使用者帳號與家目錄的資料。正是所謂的重新定義Home管理流程。
解說systemd-home的優勢,並討論如何在Ubuntu使用這個功能。
1. systemd-homed優勢#
傳統上Linux系統行之有年的方式,是透過useradd指令新增使用者,usermod調整群組,再搭配/etc/passwd管理密碼。
systemd-homed將這個過程大幅簡化。
systemd-homed與傳統Linux管理使用者的機制如下圖所示:

傳統的Linux家目錄,通常是建立使用者之後一併建立的。它建立後就會存在於檔案系統。換言之,如果把硬碟抽出來,是可以直接讀取使用者家目錄的檔案的。
systemd-homed將使用者家目錄變成映像檔管理,開機登入後才會動態掛載,登出後取消掛載,增加安全性。
systemd-homed還能將使用者的家目錄用LUKS / fscrypt / cifs / btrfs加密保護,外人即使拿到硬碟也難以讀取。
透過homectl指令,可以新增或刪除使用者,編輯使用者的基本資料,設定容量限制等等操作。
會跟systemd-homed一起用的,還有systemd-userdbd。這個服務負責紀錄使用者資料和群組資訊。systemd-userdbd裡面會以JSON欄位紀錄使用者的Email、姓名、年齡等資訊。部份欄位是一般使用者可以自己填寫的內容,其他欄位則是需要系統管理員權限才能修改。
順帶一提,如果你不想依賴sudo來提昇使用者權限,那麼可以使用systemd-run0當作替代工具。
Systemd-homed可以讓遷移多個使用者的家目錄變得更簡單。過去,如果我們要遷移家目錄到其他硬碟,都得手動用rsync複製到新的目的地,然後編輯/etc/fstab掛載,還要注意GID和UID的問題。要是把它都丟給systemd-homed管的話,就不用煩惱這些問題了。
2. 實際在Ubuntu使用systemd-homed#
Systemd-homed這個工具存在很久了,但綜觀各大Linux發行版,到2026年只有SteamOS 3.0預設啟用systemd-homed管理使用者帳號的樣子。
使用者可以手動遷移家目錄給Systemd-homed管理。並且systemd-homed可以與現有的useradd所新增的家目錄使用者共存。
縱然systemd-homed的homectl --image-path指令擁有任意指定使用者家目錄掛載位置的能力,但是將現有的/home轉為systemd-homed的這個過程有點複雜,還可能因為操作失誤導致無法登入。因此,若要在現有的系統使用systemd-homed,還是新增一個使用者為好。
- 例如我是用Ubuntu 24.04,使用以下指令安裝systemd-homed與相關組件:
sudo apt install systemd-homed systemd-userdb
sudo systemctl enable --now systemd-homed
sudo systemctl enable --now systemd-userdb- 使用以下指令新增一個使用者
user1,指定家目錄映像檔位置(LUKS加密需以.home結尾),新增使用者群組到wheel允許使用sudo,指定使用bash shell,使用LUKS加密,設定磁碟空間20GB:
sudo homectl create user1 \
--image-path=/home/user1.home \
--member-of=wheel,video,audio \
--shell=/bin/bash \
--storage=luks \
--disk-size=20G依照畫面指示設定該使用者的密碼。LUKS會使用該密碼加密。使用者資料會以數位簽章的方式保存在家目錄的
~/.identity。公鑰與私鑰則保存在/var/lib/systemd/home/。透過
ls -al /home/user1/指令可以得知,在尚未登入該使用者前,/home/user1/的內容是空的,此時的狀態是inactive。需要使用su user1切換使用者,systemd-homed才會掛載家目錄內容,此時可以用lsblk確認掛載點。該名使用者的狀態變成active。在Linux系統進入suspend的時候,使用者家目錄會自動維持加密狀態。顯示管理器如GDM應該會自動讀到透過systemd-homed所新增的使用者。至於SDDM的話得手動編輯
/etc/sddm.conf.d/uid.conf提高UID上限才會顯示。之後該名使用者資料可以使用
homectl和userdbctl操作。例如:
sudo homectl inspect user1檢視使用者資料與帳號登入紀錄。
# 範例輸出
User name: user1
State: active
Disposition: regular
Last Change: Thu 2026-04-02 17:55:25 CST
Last Passw.: Thu 2026-04-02 17:35:03 CST
Login OK: yes
Password OK: yes
UID: 60486
GID: 60486 (user1)
Aux. Groups: audio
video
wheel
Directory: / (fallback)
Blob Dir.: /var/cache/systemd/home/user1
Storage: luks (strong encryption)
Image Path: /home/user1.home
Removable: no
Shell: /usr/bin/systemd-home-fallback-shell (fallback)
LUKS Discard: online=no offline=yes
LUKS UUID: afc2bbbe-0022-425a-8977-99afcc8cd287
Part UUID: f5d33cc1-a707-4bca-95ee-2e2f7c0dde8d
FS UUID: 78c1acb9-ac0a-4166-9654-b1af159e5975
File System: btrfs
LUKS Cipher: aes
Cipher Mode: xts-plain64
Volume Key: 256bit
Mount Flags: nosuid nodev exec
Disk Size: 568M
Disk Floor: 256M
Disk Ceiling: 258.7G
Good Auth.: 4
Last Good: Thu 2026-04-02 19:02:58 CST
Bad Auth.: 3
Last Bad: Thu 2026-04-02 19:02:56 CST
Next Try: anytime
Auth. Limit: 30 attempts per 1min
Passwd Pol.: no
Rebalance: off
Passwords: 1
Local Sig.: yes
Service: io.systemd.Home
Self Modify: realName
emailAddress
iconName
location
shell
umask
environment
timeZone
preferredLanguage
additionalLanguages
preferredSessionLauncher
preferredSessionType
pkcs11TokenUri
fido2HmacCredential
recoveryKeyType
lastChangeUSec
lastPasswordChangeUSec
(Blobs) avatar
login-background
(Privileged) passwordHint
hashedPassword
pkcs11EncryptedKey
fido2HmacSalt
recoveryKey
sshAuthorizedKeys透過
sudo homectl update user1 --disk-size=60G修改使用者的屬性,像這裡是修改所分配的磁碟空間。如果使用其他具有sudo權限的使用者登入,可以使用
sudo homectl deactivate user1暫時取消該名使用者目錄的掛載。
3. 備份與還原systemd-homed資料#
因為使用者家目錄的資料是以一個Btrfs映像檔儲存,並使用金鑰加密,所以只要備份這兩個檔案就可以了。
以本文的例子來說,首先複製
/home/user1.home到他處。再複製
/var/lib/systemd/home/下的檔案。在另外一台電腦,存入以上檔案到對應的位置,然後重新啟動systemd-homed服務:
sudo systemctl restart systemd-homed註:若其他電腦已經有使用systemd-homed建立使用者,那麼必須針對個別使用者,手動匯出.json檔案再匯入:
# 電腦A
sudo homectl inspect user1 --export-format=minimal -j >> user1.json
# 電腦B
sudo homectl create --identity=./user1.json user1

